mod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_counter
mod_vvisit_counterToday7
mod_vvisit_counterYesterday9
mod_vvisit_counterThis week42
mod_vvisit_counterLast week26
mod_vvisit_counterThis month150
mod_vvisit_counterLast month278
mod_vvisit_counterAll days24583

We have: 3 guests online
Your IP: 10.2.31.32
Mozilla 5.0, 
Today: Νοε 21, 2024

Πρόσφατα άρθρα

Αρχική σελίδα ARDUINO Arduino Σεμινάριο στο 1ο ΕΠΑΛ Περάματος

Arduino Σεμινάριο στο 1ο ΕΠΑΛ Περάματος

arduino uno

Το υλικό του  σεμιναρίου για τον Arduino από την κατεύθυνση Ηλεκτρονικών του 1ου ΕΠΑΛ Περάματος

 

ΕΦΑΡΜΟΓΕΣ ARDUINO

 Η παρουσίαση σε PowerPoint

  • ΠΡΑΚΤΙΚΟ ΜΕΡΟΣ
    • Επίσκεψη και περιήγηση στην Ιστοσελίδα www.arduino.cc
    • Κατέβασμα και εγκατάσταση εφαρμογής ARDUINO IDE
    • Επικοινωνία εφαρμογής ARDUINO IDE και της πλακέτας ARDUINO UNO
    • Κατέβασμα και εγκατάσταση του εξομοιωτή
      Simulator for Arduino v0.99
      Simulator for Arduino v0.99
      Simulator for Arduino v0.99
      Simulator for Arduino - Virtronics

SimForArduino



Εφαρμογή 1η

Συνεχές αναβόσβημα ενός Led με περίοδο 1sec, με αλλαγή της στάθμης στην ψηφιακή θύρα Ι/Ο του μικροελεγκτή. (Οι γραμμές με πορτοκαλί είναι κώδικας-εντολές όλα τα άλλα είναι σχόλια)


Το Arduino αποτελείται από δεκατρία ψηφιακά pin, τα οποία μπορούμε να τα χρησιμοποιήσουμε το κάθε ένα ξεχωριστά, είτε για είσοδο είτε για έξοδο. Μπορούμε να τα προγραμματίσουμε να συμπεριφέρονται όπως εμείς θέλουμε, αρκεί να κάνουμε τις σωστές δηλώσεις στο κώδικα που θα φορτώσουμε στη πλακέτα.
Η έξοδος του κάθε pin μπορεί να προγραμματιστεί να δίνει τιμές HIGH ή LOW. Λέγοντας HIGH ενώνουμε το δυαδικό '1' και έχουμε τάση εξόδου 5V DC, ενώ το LOW είναι το δυαδικό '0' και έχει τάση εξόδου 0V DC (ground).
Παρακάτω θα δούμε ένα παράδειγμα για να μπορέσουμε να κατανοήσουμε τον προγραμματισμό των ψηφιακών pin του Arduino. Θα ενώσουμε ένα led στη board και θα το προγραμματίσουμε να ανάβει και να σβήνει σε χρονικά διαστήματα ενός δευτερολέπτου
Blink
Αυτό το παράδειγμα παρουσιάζει το απλούστερο πράγμα που μπορείτε να κάνετε με ένα Arduino για να δείτε τη φυσική έξοδο: αναβοσβήνει ένα LED.
Απαραίτητα Υλικά

  • Arduino Board
  • breadboard
  • LED, αντίσταση 220Ω,

Κύκλωμα Για να υλοποιήσετε το κύκλωμα, συνδέστε μια αντίσταση 220Ω με το pin 13. Κατόπιν συνδέστε τον μακρύτερο ακροδέκτη (άνοδο) με την αντίσταση. Συνδέστε το κοντό ακροδέκτη (κάθοδο) με τη γείωση. Κατόπιν συνδέστε το Arduino με τον υπολογιστή σας, ξεκινήστε το πρόγραμμα Arduino, και πληκτρολογείστε τον παρακάτω κώδικα. Τα περισσότερα Arduino ήδη έχουν ένα LED στο pin 13. Εάν τρέχετε αυτό το παράδειγμα χωρίς εξωτερικό LED και αντισταση, πρέπει να δείτε το ενσωματωμένο LED να αναβοσβήνει.

 http://arduino.cc/en/uploads/Tutorial/ExampleCircuit_sch.pngAPP1B

// Pin 13 has an LED connected on most Arduino boards.

// give it a name:

int led = 13; // Ορίζουμε μία μεταβλητή τύπου Integer (Ακεραίου) με όνομα led και της δίνουμε την τιμή 13 με σκοπό να την χρησιμοποιήσουμε παρακάτω στον κώδικα και να δηλώσουμε που θα συνδέσουμε το led.

 

// the setup routine runs once when you press reset:

void setup() {   //     Η συνάρτηση αρχικών ρυθμίσεων του μικροελεγκτή            

// initialize the digital pin as an output.

pinMode(led, OUTPUT);     // Ορίζουμε χρησιμοποιώντας την μεταβλητή led, ότι το pin 13 θα λειτουργεί σαν ψηφιακή έξοδος 0-5V

}

// the loop routine runs over and over again forever:

void loop() { // Η κύρια ρουτίνα του προγράμματος που εκτελείτε συνεχώς

digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)

                                           // Βγάλε λογικό 1 (5V) στο pin 13, δηλαδή άναψε το led

delay(1000);               // wait for a second

                                     // Συνάρτηση καθυστέρησης χρόνου 1000ms

digitalWrite(led, LOW);   // turn the LED off by making the voltage LOW

                                           //Βγάλε λογικό 0 (0V) στο pin 13, δηλαδή σβήσε το led

delay(1000);               // wait for a second

                                    // Συνάρτηση καθυστέρησης χρόνου 1000ms

} // Επιστρέφει στην γραμμή digitalWrite(led, HIGH);

 

 

  Εφαρμογή 2η

 Άναμμα και σβήσιμο Led ελεγχόμενο από εξωτερικό button με την διαδικασία polling.

APP2AAPP2B

// constants won't change. They're used here to

// set pin numbers:

const int buttonPin = 2;     // the number of the pushbutton pin

                                         // Ορίζουμε μία σταθερά τύπου Integer (Ακεραίου) με όνομα buttonPin και της δίνουμε την τιμή 2 με σκοπό να την χρησιμοποιήσουμε παρακάτω στον κώδικα και να δηλώσουμε που θα συνδέσουμε το button.

const int ledPin = 13;     // the number of the LED pin

                                       // Ορίζουμε μία σταθερά τύπου Integer (Ακεραίου) με όνομα ledPin και της δίνουμε την τιμή 13 με σκοπό να την χρησιμοποιήσουμε παρακάτω στον κώδικα και να δηλώσουμε που θα συνδέσουμε το led.

// variables will change:

int buttonState = 0;         // variable for reading the pushbutton status

                                     // Ορίζουμε μία μεταβλητή τύπου ? Integer (Ακεραίου) με όνομα buttonState και της δίνουμε αρχικά την τιμή 0 με σκοπό να την χρησιμοποιήσουμε παρακάτω στον κώδικα για να αποθηκεύουμε την κατάσταση λειτουργίας του button (on-off)

void setup() { // Η συνάρτηση αρχικών ρυθμίσεων του μικροελεγκτή            

// initialize the LED pin as an output:

pinMode(ledPin, OUTPUT);     // Ορίζουμε χρησιμοποιώντας την μεταβλητή ledPin, ότι το pin 13 θα λειτουργεί σαν ψηφιακή έξοδος 0-5V

// initialize the pushbutton pin as an input:

pinMode(buttonPin, INPUT);     // Ορίζουμε χρησιμοποιώντας την μεταβλητή buttonPin, ότι το pin 2 θα λειτουργεί σαν ψηφιακή είσοδος 0-5V

}

void loop(){ // Η κύρια ρουτίνα του προγράμματος που εκτελείτε συνεχώς

 

// read the state of the pushbutton value:

buttonState = digitalRead(buttonPin); // Διαβάζουμε την ψηφιακή τιμή που έχει το Pin 2 (εκεί που συνδέεται το button) και την αποθηκεύουμε στην μεταβλητή buttonState

// check if the pushbutton is pressed.

// if it is, the buttonState is HIGH:

if (buttonState == HIGH) {   //Ελέγχουμε αν το button είναι πατημένο, αν ναι τότε:

   // turn LED on:  

   digitalWrite(ledPin, HIGH); // Βγάλε λογικό 1 (5V) στο pin 13, δηλαδή άναψε το led

}

else { //αλλιώς:

   // turn LED off:

   digitalWrite(ledPin, LOW); //Βγάλε λογικό 0 (0V) στο pin 13, δηλαδή σβήσε το led

}

}

 

 

Εφαρμογή 3η

Άναμμα και σβήσιμο Led ελεγχόμενο από εξωτερικό button με την διαδικασία Interrupt

(Η διαφορά με την προηγούμενη περίπτωση είναι ότι πρίν η ενεργοποίηση γίνεται μετά το loop ενώ τώρα άμεσα

με την ενεργοποίηση της διακοπής)

 

const byte LED = 13; // Ορίζουμε μία σταθερά τύπου Integer (Ακεραίου) με όνομα LED και της δίνουμε την τιμή 13 με σκοπό να την χρησιμοποιήσουμε παρακάτω στον κώδικα και να δηλώσουμε που θα συνδέσουμε το led.

const byte BUTTON = 2; // Ορίζουμε μία σταθερά τύπου Integer (Ακεραίου) με όνομα BUTTON και της δίνουμε την τιμή 2 με σκοπό να την χρησιμοποιήσουμε παρακάτω στον κώδικα και να δηλώσουμε που θα συνδέσουμε το button.

 

// Interrupt Service Routine (ISR)

void pinChange () // Δημιουργία ρουτίνας εξυπηρέτησης διακοπής με όνομα pinChange (δηλώνεται μετά τις μεταβλητές και πριν την ρουτίνα αρχικών ρυθμίσεων του μικροελεγκτή

 

{

noInterrupts (); // Απενεργοποίηση των διακοπών με σκοπό να μην συμβεί κάποια άλλη διακοπή για όσο χρόνο εξυπηρετείτε η παρούσα διακοπή

if (digitalRead (BUTTON) == HIGH) // Διαβάζουμε την ψηφιακή τιμή που έχει το Pin 2 (εκεί που συνδέεται το button) και ελέγχουμε αν το button είναι πατημένο, αν ναι τότε

   digitalWrite (LED, HIGH); // Βγάλε λογικό 1 (5V) στο pin 13, δηλαδή άναψε το led

else //αλλιώς:

   digitalWrite (LED, LOW); //Βγάλε λογικό 0 (0V) στο pin 13, δηλαδή σβήσε το led

interrupts (); //Ενεργοποίηση των διακοπών

} // end of pinChange

void setup () // Η συνάρτηση αρχικών ρυθμίσεων του μικροελεγκτή            

{

pinMode (LED, OUTPUT); // so we can update the LED

                                               // Ορίζουμε χρησιμοποιώντας την μεταβλητή LED, ότι το pin 13 θα λειτουργεί σαν ψηφιακή έξοδος 0-5V

attachInterrupt (0, pinChange, CHANGE); // attach interrupt handler

                                                                        // Ενεργοποίηση     της ρουτίνας που θα εξυπηρετεί την διακοπή. Η πρώτη παράμετρος με τιμή 0 μας ορίζει την πηγή της εξωτερικής διακοπής σύμφωνα με τον παρακάτω πίνακα. Η δεύτερη παράμετρος με τιμή pinChange μας ορίζει την ρουτίνα εξυπηρέτησης της διακοπής ISR που δημιουργήσαμε παραπάνω. Η τρίτη παράμετρος με τιμές LOW, RISING, FALLING, CHANGE μας ορίζει το είδος της αλλαγής λογικής στάθμης που ενεργοποιεί την διακοπή.                                                       

} // end of setup

void loop () // Η κύρια ρουτίνα του προγράμματος που εκτελείτε συνεχώς

{

// loop doing nothing

// Δεν εκτελείτε καμία εντολή αρά δεν γίνεται τίποτα και περιμένουμε να συμβεί μία διακοπή

}

 

 

Below is a list of interrupts, in priority order, for the Atmega328:

 
 1 Reset 
 2 External Interrupt Request 0 (pin D2)         (INT0_vect)
 3 External Interrupt Request 1 (pin D3)         (INT1_vect)
 4 Pin Change Interrupt Request 0 (pins D8 to D13) (PCINT0_vect)
 5 Pin Change Interrupt Request 1 (pins A0 to A5) (PCINT1_vect)
 6 Pin Change Interrupt Request 2 (pins D0 to D7) (PCINT2_vect)
 7 Watchdog Time-out Interrupt                     (WDT_vect)
 8 Timer/Counter2 Compare Match A                 (TIMER2_COMPA_vect)
 9 Timer/Counter2 Compare Match B                 (TIMER2_COMPB_vect)
10 Timer/Counter2 Overflow                         (TIMER2_OVF_vect)
11 Timer/Counter1 Capture Event                    (TIMER1_CAPT_vect)
12 Timer/Counter1 Compare Match A                 (TIMER1_COMPA_vect)
13 Timer/Counter1 Compare Match B                 (TIMER1_COMPB_vect)
14 Timer/Counter1 Overflow                         (TIMER1_OVF_vect)
15 Timer/Counter0 Compare Match A                 (TIMER0_COMPA_vect)
16 Timer/Counter0 Compare Match B                 (TIMER0_COMPB_vect)
17 Timer/Counter0 Overflow                         (TIMER0_OVF_vect)
18 SPI Serial Transfer Complete                  (SPI_STC_vect)
19 USART Rx Complete                               (USART_RX_vect)
20 USART, Data Register Empty                     (USART_UDRE_vect)
21 USART, Tx Complete                             (USART_TX_vect)
22 ADC Conversion Complete                        (ADC_vect)
23 EEPROM Ready                                   (EE_READY_vect)
24 Analog Comparator                               (ANALOG_COMP_vect)
25 2-wire Serial Interface (I2C)                 (TWI_vect)
26 Store Program Memory Ready                     (SPM_READY_vect)
 
 
 
 
 
 
 
 
 
 
 
 

           Εφαρμογή 4η

Διάβασμα αναλογικής τάσης, αναβόσβημα Led1 ανάλογα με την στάθμη της τάσης και έλεγχος φωτεινότητας Led2 μέσω PWM ανάλογα με την στάθμη της τάσης.

APP4A

APP4B

int sensorPin = A3;   // select the input pin for the potentiometer

                              // Ορίζουμε μία μεταβλητή τύπου Integer (Ακεραίου) με όνομα sensorPin και της δίνουμε την τιμή Α3 (το Α0 είναι μία ακέραια σταθερά και αντιστοιχεί σε έναν ακέραιο αριθμό που μας δείχνει το pin, του καναλιού 1 του ADC) με σκοπό να την χρησιμοποιήσουμε παρακάτω στον κώδικα και να δηλώσουμε που θα συνδέσουμε το ποτενσιόμετρο ? αναλογική είσοδος.

int ledPin1 = 13;     // select the pin for the LED1

// Ορίζουμε μία μεταβλητή τύπου Integer (Ακεραίου) με όνομα ledPin1 και της δίνουμε την τιμή 13 με σκοπό να την χρησιμοποιήσουμε παρακάτω στον κώδικα και να δηλώσουμε που θα συνδέσουμε το led1.

int sensorValue = 0; // variable to store the value coming from the sensor

// Ορίζουμε μία μεταβλητή τύπου Integer (Ακεραίου) με όνομα sensorValue και της δίνουμε αρχικά την τιμή 0 με σκοπό να την χρησιμοποιήσουμε παρακάτω στον κώδικα για να αποθηκεύουμε τις τιμές που διαβάζει ο ADC

int ledPin2 = 9;  // LED2 connected to digital pin 9

// Ορίζουμε μία μεταβλητή τύπου Integer (Ακεραίου) με όνομα ledPin2 και της δίνουμε την τιμή 9 με σκοπό να την χρησιμοποιήσουμε παρακάτω στον κώδικα και να δηλώσουμε που θα συνδέσουμε το led2. ? PWM Output

int outputValue = 0;       // value output to the PWM (analog out)

// Ορίζουμε μία μεταβλητή τύπου Integer (Ακεραίου) με όνομα outputValue και της δίνουμε αρχικά την τιμή 0 με σκοπό να την χρησιμοποιήσουμε παρακάτω στον κώδικα για να δίνουμε τις αναλογικές τιμές φωτεινότητας για το led2

void setup() { // Η συνάρτηση αρχικών ρυθμίσεων του μικροελεγκτή          

// declare the ledPin1 as an OUTPUT:

pinMode(ledPin1, OUTPUT); // Ορίζουμε χρησιμοποιώντας την μεταβλητή ledPin1, ότι το pin 13 θα λειτουργεί σαν ψηφιακή έξοδος 0-5V

pinMode(ledPin2, OUTPUT); // Ορίζουμε χρησιμοποιώντας την μεταβλητή ledPin2, ότι το pin 9 θα λειτουργεί σαν ψηφιακή έξοδος 0-5V

 

}

void loop() { // Η κύρια ρουτίνα του προγράμματος που εκτελείτε συνεχώς

// read the value from the sensor:

sensorValue = analogRead(sensorPin);   // Διάβασμα της αναλογικής τιμής της τάσης στο pin Α0 του ADC και απόδοση της τιμής στην μεταβλητή sensorValue

// turn the ledPin on

digitalWrite(ledPin1, HIGH); // Βγάλε λογικό 1 (5V) στο pin 13, δηλαδή άναψε το led1

// stop the program for <sensorValue> milliseconds:

delay(sensorValue);         // Συνάρτηση καθυστέρησης χρόνου σε ms ανάλογου με την τιμή της αναλογικής τάσης από 0 έως 1023 ms

// turn the ledPin off:      

digitalWrite(ledPin1, LOW);   // Βγάλε λογικό 0 (0V) στο pin 13, δηλαδή σβείσε το led1

 

// stop the program for for <sensorValue> milliseconds:

delay(sensorValue);       // Συνάρτηση καθυστέρησης χρόνου σε ms ανάλογου με την τιμή της αναλογικής τάσης από 0 έως 1023 ms

 

//fade section

// map it to the range of the analog out:

outputValue = map(sensorValue, 0, 1023, 0, 255); // Συνάρτηση αντιστοίχησης ? μετατροπής των τιμών της αναλογικής τάσης από 0 ? 1023 σε εύρος τιμών από 0-255 και απόδοση των νέων τιμών στην μεταβλητή outputValue

 

// change the analog out value:

analogWrite(ledPin2, outputValue);   // Δημιουργία παλμών PWM στο pin 9 (led2) ανάλογους με την τιμή του ADC με εύρος από 0 έως 255        

// wait 2 milliseconds before the next loop

// for the analog-to-digital converter to settle

// after the last reading:

delay(2);   // // Συνάρτηση καθυστέρησης χρόνου 2ms με σκοπό την επανεκκίνηση του ADC        

}

Διαμόρφωση πλάτος παλμού
Στο παρακάτω γράφημα, οι πράσινες γραμμές αντιπροσωπεύουν μια κανονική χρονική περίοδο. Μια κλήση της analogWrite() είναι σε μια κλίμακα από 0 έως 255, έτσι ώστε για παράδειγμα, η κλήση analogWrite(255) ζητά το 100% του κύκλου λειτουργίας,
και η analogWrite(127) το 50% του κύκλου λειτουργίας (στο μισό χρόνο).

PWM

 

Εφαρμογή 5η

Διάβασμα αναλογικής τάσης, άναμμα Led1 ή Led2 ανάλογα με την στάθμη της τάσης, και αποστολή δεδομένων σειριακά στον Η/Υ

APP5

int sensorPin = A0;   // select the input pin for the potentiometer

                               // Ορίζουμε μία μεταβλητή τύπου Integer (Ακεραίου) με όνομα sensorPin και της δίνουμε την τιμή Α0 (το Α0 είναι μία ακέραια σταθερά και αντιστοιχεί σε έναν ακέραιο αριθμό που μας δείχνει το pin, του καναλιού 1 του ADC) με σκοπό να την χρησιμοποιήσουμε παρακάτω στον κώδικα και να δηλώσουμε που θα συνδέσουμε το ποτενσιόμετρο ? αναλογική είσοδος.

int ledPin1 = 13;     // select the pin for the LED1

// Ορίζουμε μία μεταβλητή τύπου Integer (Ακεραίου) με όνομα ledPin1 και της δίνουμε την τιμή 13 με σκοπό να την χρησιμοποιήσουμε παρακάτω στον κώδικα και να δηλώσουμε που θα συνδέσουμε το led1.

int sensorValue = 0; // variable to store the value coming from the sensor

// Ορίζουμε μία μεταβλητή τύπου Integer (Ακεραίου) με όνομα sensorValue και της δίνουμε αρχικά την τιμή 0 με σκοπό να την χρησιμοποιήσουμε παρακάτω στον κώδικα για να αποθηκεύουμε τις τιμές που διαβάζει ο ADC

int ledPin2 = 9;   // LED2 connected to digital pin 9

// Ορίζουμε μία μεταβλητή τύπου Integer (Ακεραίου) με όνομα ledPin2και της δίνουμε την τιμή 9 με σκοπό να την χρησιμοποιήσουμε παρακάτω στον κώδικα και να δηλώσουμε που θα συνδέσουμε το led2.

int outputValue = 0;       // value output

// Ορίζουμε μία μεταβλητή τύπου Integer (Ακεραίου) με όνομα outputValue και της δίνουμε αρχικά την τιμή 0 με σκοπό να την χρησιμοποιήσουμε παρακάτω στον κώδικα

void setup() { // Η συνάρτηση αρχικών ρυθμίσεων του μικροελεγκτή            

// declare the ledPin1 as an OUTPUT:

pinMode(ledPin1, OUTPUT); // Ορίζουμε χρησιμοποιώντας την μεταβλητή ledPin1, ότι το pin 13 θα λειτουργεί σαν ψηφιακή έξοδος 0-5V

pinMode(ledPin2, OUTPUT); // Ορίζουμε χρησιμοποιώντας την μεταβλητή ledPin1, ότι το pin 9 θα λειτουργεί σαν ψηφιακή έξοδος 0-5V

// initialize serial communications at 9600 bps:

Serial.begin(9600); // Αρχικοποίηση της σειριακής επικοινωνίας με ρυθμό 9600

}

 

void loop() { // Η κύρια ρουτίνα του προγράμματος που εκτελείτε συνεχώς

 

// read the value from the sensor:

sensorValue = analogRead(sensorPin);   // Διάβασμα της αναλογικής τιμής της τάσης στο pin Α0 του ADC και απόδοση της τιμής στην μεταβλητή sensorValue

 

// turn the ledPin on

                               if (sensorValue < 511 ) { // Εάν η τιμή του ADC είναι μικρότερη από 511 δηλαδή 2,5 volt τότε:

digitalWrite (ledPin1, HIGH); // Βγάλε λογικό 1 (5V) στο pin 13, δηλαδή άναψε το led1

                             digitalWrite (ledPin2, LOW);          // Βγάλε λογικό 0 (0V) στο pin 9, δηλαδή σβήσε το led2

 

}

                             else //αλλιώς:

                                    {

                             digitalWrite (ledPin1, LOW); // Βγάλε λογικό 0 (0V) στο pin 13, δηλαδή σβήσε το led1

 

digitalWrite(ledPin2, HIGH); // Βγάλε λογικό 1 (5V) στο pin 9, δηλαδή άναψε το led2

 

}

 

//serial section

// print the results to the serial monitor:

// Τμήμα σειριακής επικοινωνίας

Serial.print("\t sensor = " );                      

Serial.println(sensorValue);    

 

// wait 2 milliseconds before the next loop

// for the analog-to-digital converter to settle

// after the last reading:

delay(2);                    

}


   

Εφαρμογή 6η

Διάβασμα αναλογικής τάσης, μόνιμη αποθήκευση τιμών στην EEPROM, και αποστολή δεδομένων σειριακά στον Η/Υ διαβάζοντας την EEPROM

 

#include <EEPROM.h> //Φόρτωση της βιβλιοθήκης με τις σχετικές συναρτήσεις για επικοινωνία με την EEPROM

// the current address in the EEPROM (i.e. which byte

// we're going to write to next)

int addr = 0; // Ορίζουμε μία μεταβλητή τύπου ακεραίου με όνομα addr και αρχική τιμή 0 με σκοπό να την χρησιμοποιήσουμε για να καθορίζουμε την διεύθυνση εγγραφής στην μνήμη

// start reading from the first byte (address 0) of the EEPROM

int address = 0; // Ορίζουμε μία μεταβλητή τύπου ακεραίου με όνομα address και αρχική τιμή 0 με σκοπό να την χρησιμοποιήσουμε για να καθορίζουμε την διεύθυνση ανάγνωσης από την μνήμη

 

byte value; // Ορίζουμε μία μεταβλητή τύπου byte με όνομα value για να αποθηκεύουμε τα δεδομένα της μνήμης

int sensorPin = A0;   // select the input pin for the potentiometer

                                // Ορίζουμε μία μεταβλητή τύπου Integer (Ακεραίου) με όνομα sensorPin και της δίνουμε την τιμή Α0 (το Α0 είναι μία ακέραια σταθερά και αντιστοιχεί σε έναν ακέραιο αριθμό που μας δείχνει το pin, του καναλιού 1 του ADC) με σκοπό να την χρησιμοποιήσουμε παρακάτω στον κώδικα και να δηλώσουμε που θα συνδέσουμε το ποτενσιόμετρο ? αναλογική είσοδος.

int sensorValue = 0; // variable to store the value coming from the sensor

// Ορίζουμε μία μεταβλητή τύπου Integer (Ακεραίου) με όνομα sensorValue και της δίνουμε αρχικά την τιμή 0 με σκοπό να την χρησιμοποιήσουμε παρακάτω στον κώδικα για να αποθηκεύουμε τις τιμές που διαβάζει ο ADC

void setup() { // Η συνάρτηση αρχικών ρυθμίσεων του μικροελεγκτή            

// declare the ledPin as an OUTPUT:

 

Serial.begin(9600); // Αρχικοποίηση της σειριακής επικοινωνίας με ρυθμό 9600

 

}

 

void loop() { // Η κύρια ρουτίνα του προγράμματος που εκτελείτε συνεχώς

 

// read the value from the sensor:

sensorValue = analogRead(sensorPin);

);   // Διάβασμα της αναλογικής τιμής της τάσης στο pin Α0 του ADC και απόδοση της τιμής στην μεταβλητή sensorValue

 

   // need to divide by 4 because analog inputs range from

// 0 to 1023 and each byte of the EEPROM can only hold a

// value from 0 to 255.

int val = analogRead(sensorPin) / 4; //Ορισμός μίας τοπικής μεταβλητής τύπου ακέραιου με όνομα val και απόδοση της αναλογικής τιμής της τάσης από το pin Α0 του ADC αφού διαιρεθεί με 4 για να αποθηκεύσουμε 8 bit σε κάθε θέση της μνήμης

// write the value to the appropriate byte of the EEPROM.

// these values will remain there when the board is

// turned off.

EEPROM.write(addr, val); // Εγγραφή της μνήμης στην διεύθυνση που μας δείχνει η τιμή της μεταβλητής addr, την τιμή της μεταβλητής val

// advance to the next address. there are 512 bytes in

// the EEPROM, so go back to 0 when we hit 512.

addr = addr + 1; // Αύξηση της διεύθυνσης κατά ένα (επόμενη διεύθυνση)

if (addr == 512) // Εάν η διεύθυνση είναι η τελευταία αφού η EEPROM έχει χωρητικότητα 512 byte, τότε:

   addr = 0; // Πήγαινε στην αρχική διεύθυνση

 

delay(100);   // Καθυστέρηση 100ms    

        

 

   value = EEPROM.read(address); // Ανάγνωση της μνήμης στην διεύθυνση που μας δείχνει η τιμή της μεταβλητής address, και απόδοση της τιμής στην μεταβλητή value

 

Serial.print(address); // Αποστολή σειριακά της τιμής της διεύθυνσης της μνήμης

Serial.print("\t");

Serial.print(value, DEC); // Αποστολή σειριακά της τιμής του περιέχομένου της διεύθυνσης της μνήμης

 

Serial.println();

// advance to the next address of the EEPROM

address = address + 1; // Αύξηση της διεύθυνσης κατά ένα (επόμενη διεύθυνση)

 

// there are only 512 bytes of EEPROM, from 0 to 511, so if we're

// on address 512, wrap around to address 0

if (address == 512) // Εάν η διεύθυνση είναι η τελευταία αφού η EEPROM έχει χωρητικότητα 512 byte, τότε:

   address = 0; // Πήγαινε στην αρχική διεύθυνση

 

  

delay(500); // Καθυστέρηση 100ms    

 

}

 

 

Εφαρμογή 7η

Δημιουργία μουσικών τόνων «Twinkle Twinkle Little Star»

app7

 

 

int speakerPin = 9; // Ορισμός μεταβλητής τύπου ακεραίου με όνομα speakerPin και απόδοση τιμής 9 με σκοπό να την χρησιμοποιήσουμε παρακάτω στον κώδικα και να δηλώσουμε που θα συνδέσουμε το buzzer

int length = 15; // the number of notes

// Ορισμός μεταβλητής τύπου ακεραίου με όνομα length και απόδοση τιμής 15 με σκοπό να την χρησιμοποιήσουμε παρακάτω στον κώδικα και να δηλώσουμε τον αριθμό από νότες που θα έχει το μουσικό κομμάτι

char notes[] = "ccggaagffeeddc "; // a space represents a rest

// Ορισμός πίνακα με τιμές τύπου χαρακτήρα (char) και απόδοση τιμών ccggaagffeeddc τις νότες που θα έχει το μουσικό κομμάτι

int beats[] = { 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 4 }; // Ορισμός πίνακα με τιμές τύπου ακεραίου και απόδοση τιμών 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 4 για τις φορές που παίζετε η κάθε νότα που θα έχει το μουσικό κομμάτι

 

int tempo = 300; // Ορισμός μεταβλητής τύπου ακεραίου με όνομα tempo και απόδοση τιμής 300 με σκοπό να την χρησιμοποιήσουμε παρακάτω στον κώδικα και να δηλώσουμε τον ρυθμό (ταχύτητα) παιξίματος που θα έχει το μουσικό κομμάτι

 

void playTone(int tone, int duration) { // Ορισμός συνάρτησης με όνομα playTone και ακέραιες παραμέτρους tone (khz) και duration με λειτουργία την δημιουργία του τόνου μιας νότας

for (long i = 0; i < duration * 1000L; i += tone * 2) {

   digitalWrite(speakerPin, HIGH);

   delayMicroseconds(tone);

   digitalWrite(speakerPin, LOW);

   delayMicroseconds(tone);

}

}

 

void playNote(char note, int duration) {// Ορισμός συνάρτησης με όνομα playNote και παραμέτρους note και duration με λειτουργία τo παίξιμο του τόνου μιας νότας

 

char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' }; // Οι νότες

int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 };

 

// play the tone corresponding to the note name

for (int i = 0; i < 8; i++) {

   if (names[i] == note) {

     playTone(tones[i], duration); // Χρησιμοποιεί την προηγούμενη συνάρτηση playTone

   }

}

}

 

void setup() {

pinMode(speakerPin, OUTPUT);

}

 

void loop() {

for (int i = 0; i < length; i++) {

   if (notes[i] == ' ') {

     delay(beats[i] * tempo); // rest

   } else {

     playNote(notes[i], beats[i] * tempo);

   }

   // pause between notes

   delay(tempo / 2);

}

}

 

 Εφαρμογή 8η

Απεικόνιση χαρακτήρων σε Display LCD


 LCD schem

LCD bb

lcd hello

/*

LiquidCrystal Library - Hello World

Demonstrates the use a 16x2 LCD display. The LiquidCrystal

library works with all LCD displays that are compatible with the

Hitachi HD44780 driver. There are many of them out there, and you

can usually tell them by the 16-pin interface.

This sketch prints "Hello World!" to the LCD

and shows the time.

The circuit:

* LCD RS pin to digital pin 12

* LCD Enable pin to digital pin 11

* LCD D4 pin to digital pin 5

* LCD D5 pin to digital pin 4

* LCD D6 pin to digital pin 3

* LCD D7 pin to digital pin 2

* LCD R/W pin to ground

* 10K resistor:

* ends to +5V and ground

* wiper to LCD VO pin (pin 3)

Library originally added 18 Apr 2008

by David A. Mellis

library modified 5 Jul 2009

by Limor Fried (http://www.ladyada.net)

example added 9 Jul 2009

by Tom Igoe

modified 22 Nov 2010

by Tom Igoe

This example code is in the public domain.

http://www.arduino.cc/en/Tutorial/LiquidCrystal

*/

// include the library code:

#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins

LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // Για το LCD Shield

void setup() {

// set up the LCD's number of columns and rows:

lcd.begin(16, 2);

// Print a message to the LCD.

lcd.print("hello, world!");

}

 

void loop() {

// set the cursor to column 0, line 1

// (note: line 1 is the second row, since counting begins with 0):

lcd.setCursor(0, 1);

// print the number of seconds since reset:

lcd.print(millis() / 1000); // Εμφάνισε τα δευτερόλεπτα από την εκκίνηση του προγράμματος

}

-----------------------------------------------------------------------------------------

  • Ελεύθερη δημιουργία εφαρμογής από τους εκπαιδευόμενους.
  • Επίδειξη σύνθετων εφαρμογών