Στην άσκηση 3 αν δώσουμε έναν πού μεγάλο αριθμό που έχει μηδενικά π.χ. 1000000000000000000000000000 τότε το led θα σβήσει, αν αντιθέτως δώσουμε έναν άλλο μεγάλο αριθμό χωρίς μηδενικά το led θα παραμείνει ανοιχτό π.χ. 89888888888888888888888888888888888888
Ίσως να γεμίζει ο buffer(?) που έχει και να μένουν τα μηδενικά στη 1η περίπτωση ενώ στην δεύτερη το περιεχόμενο του buffer(?) να είναι μη μηδενικό...
Οι ακέραιοι ορίζονται από -32,768 to 32,767 (minimum value of -2^15 and a maximum value of (2^15) - 1). Αρα η parseInt προσπαθεί να διαβάσει ακέραιους αριθμούς (και αρνητικούς) σε αυτή την περιοχή λαμβάνοντας υπόψιν μόνο τα τελευταία 16 ψηφία ενός πολύ μεγάλου αριθμού. Πάνω από το 32767 γυρίζει στο -32768 και ανεβαίνει πάλι. (Συμπλήρωμα ως προς 2).
Σύμφωνα με την σελίδα http://arduino.cc/en/Reference/ParseInt αν δώσουμε αρνητικό αριθμό δεν θα διαβαστεί από την εντολή. Όμως αν περιλάβουμε στον κώδικα if (serial_value < 0) digitalWrite(led, HIGH); θα δούμε ότι το led θα ανάψει...
Οι ακέραιοι ορίζονται από -32,768 to 32,767 (minimum value of -2^15 and a maximum value of (2^15) - 1). Αρα η parseInt προσπαθεί να διαβάσει ακέραιους αριθμούς (και αρνητικούς) σε αυτή την περιοχή λαμβάνοντας υπόψιν μόνο τα τελευταία 16 ψηφία ενός πολύ μεγάλου αριθμού. Πάνω από το 32767 γυρίζει στο -32768 και ανεβαίνει πάλι. (Συμπλήρωμα ως προς 2) Η if (serial_value < 0) εξετάζει μόνο ένα byte στην σειριακή (-128..127) και όχι όλα τα ψηφία του ακέραιου. Επίσης περιμένει ένα δευτερόλεπτο για να δει αν υπάρχει κάπιος αριθμός. Ετσι δείχνει ότι αργεί. Αν το τελευταίο γράμμα δεν είναι ψηφίο θα αποφανθεί άμεσα και όχι μετά από ένα δευτερόλεπτο.
Στην άσκηση 3 αν δώσουμε έναν πού μεγάλο αριθμό που έχει μηδενικά π.χ. 1000000000000000000000000000 τότε το led θα σβήσει, αν αντιθέτως δώσουμε έναν άλλο μεγάλο αριθμό χωρίς μηδενικά το led θα παραμείνει ανοιχτό π.χ. 89888888888888888888888888888888888888
ΑπάντησηΔιαγραφήΊσως να γεμίζει ο buffer(?) που έχει και να μένουν τα μηδενικά στη 1η περίπτωση ενώ στην δεύτερη το περιεχόμενο του buffer(?) να είναι μη μηδενικό...
Οι ακέραιοι ορίζονται από -32,768 to 32,767 (minimum value of -2^15 and a maximum value of (2^15) - 1). Αρα η parseInt προσπαθεί να διαβάσει ακέραιους αριθμούς (και αρνητικούς) σε αυτή την περιοχή λαμβάνοντας υπόψιν μόνο τα τελευταία 16 ψηφία ενός πολύ μεγάλου αριθμού. Πάνω από το 32767 γυρίζει στο -32768 και ανεβαίνει πάλι. (Συμπλήρωμα ως προς 2).
ΔιαγραφήΣύμφωνα με την σελίδα http://arduino.cc/en/Reference/ParseInt αν δώσουμε αρνητικό αριθμό δεν θα διαβαστεί από την εντολή. Όμως αν περιλάβουμε στον κώδικα
ΑπάντησηΔιαγραφήif (serial_value < 0) digitalWrite(led, HIGH); θα δούμε ότι το led θα ανάψει...
Οι ακέραιοι ορίζονται από -32,768 to 32,767 (minimum value of -2^15 and a maximum value of (2^15) - 1). Αρα η parseInt προσπαθεί να διαβάσει ακέραιους αριθμούς (και αρνητικούς) σε αυτή την περιοχή λαμβάνοντας υπόψιν μόνο τα τελευταία 16 ψηφία ενός πολύ μεγάλου αριθμού. Πάνω από το 32767 γυρίζει στο -32768 και ανεβαίνει πάλι. (Συμπλήρωμα ως προς 2)
ΔιαγραφήΗ if (serial_value < 0) εξετάζει μόνο ένα byte στην σειριακή (-128..127) και όχι όλα τα ψηφία του ακέραιου. Επίσης περιμένει ένα δευτερόλεπτο για να δει αν υπάρχει κάπιος αριθμός. Ετσι δείχνει ότι αργεί. Αν το τελευταίο γράμμα δεν είναι ψηφίο θα αποφανθεί άμεσα και όχι μετά από ένα δευτερόλεπτο.