Τρίτη 29 Δεκεμβρίου 2015

Andruino Προγραμματισμός (Μάθημα 5)



Andruino Προγραμματισμός (Μάθημα 5)

 Αποτέλεσμα εικόνας για arduino logo
Εντάξει έχετε πάρει το Arduino το έχετε ρυθμίσει και καταλάβατε πως να χρησιμοποιήσετε το λογισμικό για να στείλετε sketches στην πλακέτα. Το επόμενο βήμα είναι να αρχίσετε να γράφετε τα δικά σας sketches. Θα ξεκινήσει εύκολη με το απλά τροποποιώντας κάτι που ήδη λειτουργεί.
Για να ξεκινήσετε, θα ριχτούμε βαθιά στο Blink sketch, κοιτάζοντας κάθε γραμμή και προσπαθούμε να καταλάβουμε τι κάνει.
Τότε θα ξεκινήσουμε  το hacking στο sketch!

Blinkie

Εκκινήστε το Arduino λογισμικό και ανοίξτε το Blink παράδειγμα sketch.
Το sketch από μόνο του είναι στην περιοχή εισαγωγής κειμένου του Arduino λογισμικού. Sketches γράφονται σε κείμενο, όπως ένα έγγραφο. Όταν επιλέγετε Compile/Verify από το μενού, το Arduino λογισμικό κοιτάζει πάνω από το έγγραφο και τις μεταφράζει σε Arduino-γλώσσα μηχανής - που δεν είναι αναγνώσιμη από τον άνθρωπο, αλλά είναι εύκολο για το Arduino να την καταλάβει.
Sketches είναι γραμμένα σε C, η οποία είναι μια γλώσσα προγραμματισμού που είναι πολύ δημοφιλές και ισχυρή. Παίρνει λίγο να την συνηθίσει, αλλά θα πάμε μέσα από αυτά τα παραδείγματα αργά.
 
/*
 * Blink
 *
 * The basic Arduino example.  Turns on an LED on for one second,
 * then off for one second, and so on...  We use pin 13 because,
 * depending on your Arduino board, it has either a built-in LED
 * or a built-in resistor so that you need only an LED.
 *
 * http://www.arduino.cc/en/Tutorial/Blink
 */
 
 
int ledPin = 13;                // LED connected to digital pin 13
 
void setup()                    // run once, when the sketch starts
{
  pinMode(ledPin, OUTPUT);      // sets the digital pin as output
}
 
 
void loop()                     // run over and over again
{
  digitalWrite(ledPin, HIGH);   // sets the LED on
  delay(1000);                  // waits for a second
  digitalWrite(ledPin, LOW);    // sets the LED off
  delay(1000);                  // waits for a second
}

Comments

Ας εξετάσουμε αυτό το sketch σε λεπτομέριες ξεκινόντας από την πρώτη ενότητα:
/*
 * Blink
 *
 * The basic Arduino example.  Turns on an LED on for one second,
 * then off for one second, and so on...  We use pin 13 because,
 * depending on your Arduino board, it has either a built-in LED
 * or a built-in resistor so that you need only an LED.
 *
 * http://www.arduino.cc/en/Tutorial/Blink
 */
Αυτό είναι σχόλιο, αυτό είναι το κείμενο που δεν χρησιμοποιείται από Arduino, είναι μόνο εκεί για να βοηθήσει τους ανθρώπους σαν εμάς να κατανοήσουν τι συμβαίνει. Μπορείτε να πείτε εάν κάτι είναι ένα σχόλιο, διότι υπάρχει /* στην αρχή και ένα */ στο τέλος. Οτιδήποτε μεταξύ του /* και */ αγνοήται από το ArduinoΣε αυτό το παράδειγμα το πρόσωπο που έγραψε το σχόλιο αποφάσισε να να φανεί όμορφο και προσθέστε *'s στην μια πλευρά της, αλλά αυτό δεν είναι αναγκαίο.
Τα σχόλια είναι πολύ χρήσιμα και ενθαρύνονται να υπάρχουν σε sketch που κάνετε στην αρχή τουμε πληροφορίες στο τι κάνει, τι.
Οι μεταβλητές
Ας δούμε την επόμενη γραμμή:
int ledPin = 13;                // LED connected to digital pin 13
Αυτή είναι η πρώτη γραμμή του κώδικα πραγματικής εντολής. Είναι επίσης εξαιρετικά σε αντίθεση με τα αγγλικά (ή οποιαδήποτε άλλη ανθρώπινη γλώσσα). Το πρώτο μέρος μπορούμε εύκολα να καταλάβουμε είναι το μέρος προς τα δεξιά, το οποίο είναι επίσης ένα σχόλιο. Αποδεικνύεται ότι, αν θέλετε να κάνετε ένα μικρό σχόλιο, μπορείτε να χρησιμοποιήσετε // καθώς /* */. // χρησιμοποιείται συχνά για συντομία, μιας γραμμής σχόλια.
Το υπόλοιπο της γραμμής, τα πράγματα πριν από την //, είναι αυτό που ονομάζεται statement (μεταβλητή), το οποίο είναι ουσιαστικά σαν μια μηχανογραφημένη φράση. Οι περισσότερες ανθρώπινη φράσεις τελειώνει με ένα. (τελεία), όλες οι προτάσεις του υπολογιστή τελειώνουν με ; (ερωτηματικό)
OK το σύνολο που έχουμε αριστερά είναι η ίδια η δήλωση, η οποία αποδεικνύεται ότι είναι μια φράση λέγοντας στον υπολογιστή ότι θα θέλαμε να δημιουργήσουμε ένα πλαίσιο που ονομάζεται ledPin και να θέσει τον αριθμό 13 στο πλαίσιο. Αν θυμάστε μαθηματικά , Ίσως να θυμάστε ότι το πλαίσιο είναι επίσης γνωστή ως variable (μεταβλητή).
box-type
box-name
=
stuff-to-put-in-box
int
ledPin
=
13
Το πρώτο μέρος της πρότασης αυτής είναι int, η οποία είναι η συντόμευση για  το (ακέραιος αριθμός) το οποίο είναι ένα άλλος τρόπος να λέμε ακέραιος αριθμός
Το δεύτερο μέρος της πρότασης αυτής είναι ledPin που είναι το όνομα του πλαισίου
Το τρίτο μέρος είναι ένα =, που βασικά λέει ότι η μεταβλητή (πλαίσιο) που ονομάζεται ledPin θα πρέπει να ισούται με ό, τι είναι μετά από το =
Το τέταρτο μέρος είναι 13, ακέραιος αριθμός (integer) η οποία έχει ανατεθεί σε ledPin

Procedures (διαδικασίες)

Ας περάσουμε στην επόμενη ενότητα
 
void setup()                    // run once, when the sketch starts
{
  pinMode(ledPin, OUTPUT);      // sets the digital pin as output
}
OK έχουμε δύο σχόλια, το καθένα ξεκινώντας με //. Κατανοούμε τα σχόλια που έχουν ήδη οπότε ας παρακάμψετε αυτό.
Βλέπουμε επίσης στη μέση υπάρχει μια δήλωση, γνωρίζουμε την δήλωση, επειδή τελειώνει με ένα ; (ερωτηματικό) Ωστόσο, υπάρχουν ένα σωρό άλλα πράγματα πριν και μετά .
Αυτή η δέσμη του κώδικα είναι ένα παράδειγμα ενός procedure (διαδικασίας), μια διαδικασία είναι μια συλλογή από δηλώσεις, που χρησιμοποιούνται στις δηλώσεις της ομάδας μαζί έτσι ώστε να μπορούμε να αναφερθούμε σε όλα αυτά με ένα όνομα. Είναι ακριβώς σαν μια διαδικασία που θα χρησιμοποιήσετε για να εκτελέσετε μια εργασία βήμα προς βήμα.
returned value
procedure name
(input values)
{ statements }
void
setup
()
{ pinMode(ledPin, OUTPUT); }
Βλέποντας την διαδικασία, βλέπουμε ότι πήρε και το όνομά setup και δεν έχει τιμές εισόδου και επιστρέφει void. Τώρα εσείς πιθανώς να αναρωτιέσαι " τι είναι void?" Λοιπόν αυτό είναι ένας τρόπος για υπολογιστή- να λέει nothing (τίποτα). Δηλαδή, αυτή η διαδικασία δεν επιστρέψει οτιδήποτε. (Αυτό δεν σημαίνει ότι δεν κάνει τίποτα, απλά ότι δεν έχουν απτές αριθμό ή οτιδήποτε άλλο, για να δείξει κατά την ολοκλήρωση της)
void setup()                    // run once, when the sketch starts
Υπάρχει μια δήλωση σε αυτή τη διαδικασία,
pinMode(ledPin, OUTPUT);      // sets the digital pin as output
Θα επιστρέψουμε στη δήλωση αυτή στη λεπτομέρεια αργότερα, αρκεί να πούμε ότι είναι ένας τρόπος να λέει στο Arduino ό, τι θα θέλαμε να κάνουμε με μία από τις φυσικές ακίδες στο κύριο τσιπ επεξεργαστών.

Διαδικασία κλήσεις

Είμαστε στην επόμενη δέσμη των κειμένων.
void loop()                     // run over and over again
{
  digitalWrite(ledPin, HIGH);   // sets the LED on
  delay(1000);                  // waits for a second
  digitalWrite(ledPin, LOW);    // sets the LED off
  delay(1000);                  // waits for a second
}
Χρησιμοποιώντας πλέον καλά διαμορφωμένη τεχνική μας αναγνωρίζουμε ότι το κείμενο προς τα δεξιά είναι όλα σχόλια. Αναγνωρίζουμε επίσης μια άλλη διαδικασία, που ονομάζεται loop η οποία επίσης δεν έχει εισόδους ή εξόδους. Αυτή η διαδικασία έχει πολλαπλές καταστάσεις, την μία μετά την άλλη.
Πρόκειται να παραλείψετε τη πρώτη δήλωση για τώρα και να πάω κατευθείαν στην δήλωση #2.
Η δεύτερη και η τέταρτη κατάσταση είναι οι ίδιες, και έχει κάτι να κάνει με το delay. Αυτή η δήλωση είναι πολύ παρόμοιο με το "περίμενε 3 λεπτά." εντολή. Αυτή η δήλωση λέει " Arduino. Σταμάτα ότι κάνεις για κάποια περίοδο χρόνου. Ευχαριστώ!"
Για να γίνει αυτό, η δήλωση εκτελεί μια procedure call (κλήση διαδικασίας). Ουσιαστικά, θέλουμε το Arduino να κάνουν ένα διάλειμμα, αλλά δεν γνωρίζουμε ακριβώς πώς να το κάνουμε, ευτυχώς για εμάς, κάποιος άλλος έγραψε μια διαδικασία που ονομάζεται delay την οποία μπορούμε να καλέσουμε να κάνει τη δουλειά για εμάς. Π.Χ. αν θα πρέπει να κάνουμε τους φόρους μας και εμείς δεν ξέρουμε πώς, καλούμε έναν λογιστή να το κάνει για μας, δίνοντάς τους τα στοιχεία και να πάρει επιστροφή φόρου ως αποτέλεσμα.
procedure name
(input values)
;
delay
(1000)
;
Αυτό σημαίνει ότι κάπου εκεί έξω, ότι υπάρχει μια διαδικασία κάτι τέτοιο:
void delay(number of milliseconds)  
{
  " Arduino. Σταμάτα ότι κάνεις για (number of milliseconds) περίοδο χρόνου. Ευχαριστώ!" 
}
(Φυσικά, το παράδειγμα δεν είναι σωστό κώδικας)
Τελικά η delay διαδικασία δουλεύει πολλή καλά, και το μόνο που έχουμε να κάνουμε είναι να δώσουμε milliseconds (1/1000th του δευτερολέπτου) να περιμένει .
Επιστρέφοντας στην πρώτη εντολή, βλέπουμε ότι είναι επίσης μια διαδικασία κλήσηςΑυτή τη φορά για κάποια διαδικασία που ονομάζεται digitalWrite. Θα παραλείψουμε, επίσης, αυτό το ένα με λεπτομέρειες για λίγο, παρά μόνο για να εξηγήσουμε ότι ανάβει ένα pin για το Arduino chip κλειστό ή ανοιχτό, και το pin συνδέεται με LED έτσι ανάβει ή σβήνει.
Special Procedures - Setup() and Loop()

Μετατροπή του παραδείγματος

Αν στο Arduino πρόγραμμα, αλλάξουμε τον αριθμό delay σε 500 (απο 1000) όπως βλέπετε
void loop()                     // run over and over again
{
  digitalWrite(ledPin, HIGH);   // sets the LED on
  delay(500);                  // waits for a second
  digitalWrite(ledPin, LOW);    // sets the LED off
  delay(500);                  // waits for a second
}
Αν προσπαθήσετε να αποθηκεύσετε το sketch, θα έχετε την προειδοποίηση ότι είναι read-only.
Δεν είναι μια μεγάλη υπόθεση, μπορείτε να το αποθηκεύσετε με ένα νέο όνομα, όπως  MyBlink
Compile/Verify το sketch και Upload.
Μόλις το Arduino έχει ενημερωθεί με το νέο sketch θα πρέπει να δείτε μια πιο γρήγορα το φως που αναβοσβήνει από ότι πριν.
Εάν η λυχνία LED δεν αναβοσβήνει πιο γρήγορα, ελέγξτε:
  • κάνετε τις αλλαγές στην delay κλήση διαδικασίας για να το κάνετε 500?
  • Κάνατε compile/verify ολοκληρώνοντας επιτυχώς?
  • Κάνατε upload επιτυχώς?

Ασκήσεις

Τώρα ήρθε η ώρα για σας να προβείτε σε τροποποιήσεις του sketch και να πειραματιστείτε με διαφορετικές τιμές καθυστέρησης
Ασκήσεις 1.
Τροποποιήστε τον κώδικα έτσι ώστε το φως είναι αναμμένο για 100 msec και να σβήνουν για 900 msec
Ασκήσεις 2.
Τροποποιήστε τον κώδικα έτσι ώστε το φως είναι αναμμένο για 50 msec και να σβήνουν για 50 msec. Τι συμβαίνει?

Συγχαρητήρια, έχετε ολοκληρώσει το πέμπτο μάθημα!
Στο μάθημα αυτό εξετάζεται το sketch Blink λεπτομερώς, και μάθατε λίγο τη γλώσσα που χρησιμοποιείται για να μιλήσει στο Arduino. επίσης μάθατε πώς να τροποποιήσετε ένα sketch, .

Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου