Παρασκευή 8 Νοεμβρίου 2013

Εργαστηριακή άσκηση 1


Η εργαστηριακή άσκηση 1 :




4 σχόλια:

  1. Στην άσκηση 3 αν δώσουμε έναν πού μεγάλο αριθμό που έχει μηδενικά π.χ. 1000000000000000000000000000 τότε το led θα σβήσει, αν αντιθέτως δώσουμε έναν άλλο μεγάλο αριθμό χωρίς μηδενικά το led θα παραμείνει ανοιχτό π.χ. 89888888888888888888888888888888888888

    Ίσως να γεμίζει ο buffer(?) που έχει και να μένουν τα μηδενικά στη 1η περίπτωση ενώ στην δεύτερη το περιεχόμενο του buffer(?) να είναι μη μηδενικό...

    ΑπάντησηΔιαγραφή
    Απαντήσεις
    1. Οι ακέραιοι ορίζονται από -32,768 to 32,767 (minimum value of -2^15 and a maximum value of (2^15) - 1). Αρα η parseInt προσπαθεί να διαβάσει ακέραιους αριθμούς (και αρνητικούς) σε αυτή την περιοχή λαμβάνοντας υπόψιν μόνο τα τελευταία 16 ψηφία ενός πολύ μεγάλου αριθμού. Πάνω από το 32767 γυρίζει στο -32768 και ανεβαίνει πάλι. (Συμπλήρωμα ως προς 2).

      Διαγραφή
  2. Σύμφωνα με την σελίδα http://arduino.cc/en/Reference/ParseInt αν δώσουμε αρνητικό αριθμό δεν θα διαβαστεί από την εντολή. Όμως αν περιλάβουμε στον κώδικα
    if (serial_value < 0) digitalWrite(led, HIGH); θα δούμε ότι το led θα ανάψει...

    ΑπάντησηΔιαγραφή
    Απαντήσεις
    1. Οι ακέραιοι ορίζονται από -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) και όχι όλα τα ψηφία του ακέραιου. Επίσης περιμένει ένα δευτερόλεπτο για να δει αν υπάρχει κάπιος αριθμός. Ετσι δείχνει ότι αργεί. Αν το τελευταίο γράμμα δεν είναι ψηφίο θα αποφανθεί άμεσα και όχι μετά από ένα δευτερόλεπτο.

      Διαγραφή