From 389f454b12f2c526fbc707d6b4903e7dfb8f5620 Mon Sep 17 00:00:00 2001 From: Andrea Manni Date: Thu, 13 Apr 2017 18:58:09 +0200 Subject: [PATCH] Loop e data type strutturati --- RGB_LED/rgb_5_struct/rgb_5_struct.ino | 12 +-- .../loop_1_array_loop/loop_1_array_loop.ino | 40 +++++----- .../loop_2_array_loop_serial.ino | 22 +++--- .../loop_3_multi_led_random.ino | 10 +-- .../array_loop/array_loop.ino | 77 +++++++++++++++++++ .../oggetto_rgb/oggetto_rgb.ino | 73 ++++++++++++++++++ .../structured_data_types/struct/struct.ino | 39 ++++++++++ 7 files changed, 229 insertions(+), 44 deletions(-) create mode 100644 programming/structured_data_types/array_loop/array_loop.ino create mode 100644 programming/structured_data_types/oggetto_rgb/oggetto_rgb.ino create mode 100644 programming/structured_data_types/struct/struct.ino diff --git a/RGB_LED/rgb_5_struct/rgb_5_struct.ino b/RGB_LED/rgb_5_struct/rgb_5_struct.ino index dbe0d05..181a90d 100644 --- a/RGB_LED/rgb_5_struct/rgb_5_struct.ino +++ b/RGB_LED/rgb_5_struct/rgb_5_struct.ino @@ -18,7 +18,6 @@ struct color { color led; - void setup() { for (byte i = 0; i < 4; i++) { @@ -26,7 +25,6 @@ void setup() } } - void loop() { analogWrite(pin[0], led.red); @@ -60,15 +58,13 @@ struct ledRGB { byte red; }; -ledRGB led {0,255,255,9,10,11}; +ledRGB led {9,10,11,0,255,255}; - - void setup() { - pinMode(led.Pin, OUTPUT); - pinMode(led.Pin, OUTPUT); - pinMode(led.Pin, OUTPUT); + pinMode(led.rPin, OUTPUT); + pinMode(led.gPin, OUTPUT); + pinMode(led.bPin, OUTPUT); } void loop() diff --git a/programming/loops/loop_1_array_loop/loop_1_array_loop.ino b/programming/loops/loop_1_array_loop/loop_1_array_loop.ino index bb9662e..0026508 100644 --- a/programming/loops/loop_1_array_loop/loop_1_array_loop.ino +++ b/programming/loops/loop_1_array_loop/loop_1_array_loop.ino @@ -1,11 +1,11 @@ /* Knight Rider 2 * -------------- - * + * * Array e uso dei cicli iterativi. * - Schema semplificato: + Schema semplificato: - http://lab.piffa.net/schemi/8_led_single_res_bb.png - http://lab.piffa.net/schemi/8_led_single_res_schem.png */ @@ -13,34 +13,34 @@ int pinArray[8] = {2, 3, 4, 5, 6, 7, 8, 9}; int timer = 100; -void setup(){ +void setup() { // we make all the declarations at once - for (int count=0;count<9;count++) { + for (int count = 0; count < 9; count++) { pinMode(pinArray[count], OUTPUT); } } void loop() { - for (int count=0;count<8;count++) { // 8 e' un numero magico - digitalWrite(pinArray[count], HIGH); - delay(timer); - digitalWrite(pinArray[count], LOW); - delay(timer); + for (int count = 0; count < 8; count++) { // 8 e' un numero magico + digitalWrite(pinArray[count], HIGH); + delay(timer); + digitalWrite(pinArray[count], LOW); + delay(timer); } -// Ciclo inverso: dall'alto in basso - for (int count=8;count>=0;count--) { - digitalWrite(pinArray[count], HIGH); - delay(timer); - digitalWrite(pinArray[count], LOW); - delay(timer); + // Ciclo inverso: dall'alto in basso + for (int count = 8; count >= 0; count--) { + digitalWrite(pinArray[count], HIGH); + delay(timer); + digitalWrite(pinArray[count], LOW); + delay(timer); } } /* Domande: - - 1. Come posso fare per saltare un elemento del loop? - 2. Come posso fare per uscire completamente dal loop? + + 1. Come posso fare per saltare un elemento del loop? + 2. Come posso fare per uscire completamente dal loop? 3. 8 e' un numero magico: come posso evitarlo? . @@ -64,12 +64,12 @@ void loop() { . . . -Soluzioni: +Soluzioni: 1. utilizzare continue 2. utilizzare break 3. Utilizzare un variabile sarebbe gia' un inizio, ancora meglio estrarre il valore tramite la funzione sizeof(). -Links: +Links: - http://www.tutorialspoint.com/cprogramming/c_continue_statement.htm - https://www.arduino.cc/en/Reference/Sizeof */ diff --git a/programming/loops/loop_2_array_loop_serial/loop_2_array_loop_serial.ino b/programming/loops/loop_2_array_loop_serial/loop_2_array_loop_serial.ino index 7591641..287628a 100644 --- a/programming/loops/loop_2_array_loop_serial/loop_2_array_loop_serial.ino +++ b/programming/loops/loop_2_array_loop_serial/loop_2_array_loop_serial.ino @@ -1,22 +1,22 @@ /* For Loop Iteration - + Demonstrates the use of a for() loop. Lights multiple LEDs in sequence, then in reverse. - + The circuit: * LEDs from pins 2 through 9 to ground - + Schemi: - http://lab.piffa.net/schemi/8_led_single_res_bb.png - http://lab.piffa.net/schemi/8_led_single_res_schem.png - + http://www.arduino.cc/en/Tutorial/ForLoop */ byte ledPins[8] = { // Domanda: cosa succede se uso int? - 2,3,4,5,6,7,8,9} -; //Array + 2, 3, 4, 5, 6, 7, 8, 9 + } ; //Array int timer = 100; // Pausa per far brillare i LED void setup() { @@ -25,7 +25,7 @@ void setup() { for (int thisPin = 0; thisPin < sizeof(ledPins); thisPin++) { pinMode(ledPins[thisPin], OUTPUT); Serial.print("Inizializzato pin n. "); - Serial.println( thisPin); + Serial.println(thisPin); } Serial.print("Dimesione array: "); @@ -38,16 +38,16 @@ void loop() { Serial.print("Accensione pin n. "); Serial.println(thisPin); // turn the pin on: - digitalWrite(ledPins[thisPin], HIGH); - delay(timer); + digitalWrite(ledPins[thisPin], HIGH); + delay(timer); // turn the pin off: - digitalWrite(ledPins[thisPin], LOW); + digitalWrite(ledPins[thisPin], LOW); // Debug } // loop from the highest pin to the lowest: - for (int thisPin = sizeof(ledPins) -1 ; thisPin > 0; thisPin--) { + for (int thisPin = sizeof(ledPins) - 1 ; thisPin > 0; thisPin--) { Serial.print("Accensione pin n. "); // Gli array sono indicizzati da 0 Serial.println(thisPin); digitalWrite(ledPins[thisPin], HIGH); diff --git a/programming/loops/loop_3_multi_led_random/loop_3_multi_led_random.ino b/programming/loops/loop_3_multi_led_random/loop_3_multi_led_random.ino index 70cfc62..71e83a1 100644 --- a/programming/loops/loop_3_multi_led_random/loop_3_multi_led_random.ino +++ b/programming/loops/loop_3_multi_led_random/loop_3_multi_led_random.ino @@ -17,8 +17,8 @@ */ byte ledPins[8] = { // Domanda: cosa succede se uso int? - 2,3,4,5,6,7,8,9} -; //Array + 2,3,4,5,6,7,8,9 + }; //Array int timer = 100; // Pausa per far brillare i LED int randNumber ; @@ -33,12 +33,13 @@ void setup() { Serial.print("Dimesione array: "); Serial.println(sizeof(ledPins)); + randomSeed(analogRead(0)); // Rilevazione di un valore esterno // per scegliere il primo elemento del pseudorandom generators } void loop() { - // print a random number from 0 to 8 + // print a random number from 0 to 7 randNumber = random(8); // turn the pin on: Serial.print("Accensione pin n. "); @@ -60,14 +61,13 @@ void rainbow() { // Esegue un pattern con i led Serial.println(">>> Rainbow! <<<"); + // loop from the lowest pin to the highest: for (int thisPin = 0; thisPin < sizeof(ledPins); thisPin++) { // turn the pin on: digitalWrite(ledPins[thisPin], HIGH); delay(timer / 2); // turn the pin off: digitalWrite(ledPins[thisPin], LOW); - // Debug - } // loop from the highest pin to the lowest: diff --git a/programming/structured_data_types/array_loop/array_loop.ino b/programming/structured_data_types/array_loop/array_loop.ino new file mode 100644 index 0000000..0026508 --- /dev/null +++ b/programming/structured_data_types/array_loop/array_loop.ino @@ -0,0 +1,77 @@ +/* Knight Rider 2 + * -------------- + * + * Array e uso dei cicli iterativi. + * + + + Schema semplificato: + - http://lab.piffa.net/schemi/8_led_single_res_bb.png + - http://lab.piffa.net/schemi/8_led_single_res_schem.png + */ + +int pinArray[8] = {2, 3, 4, 5, 6, 7, 8, 9}; +int timer = 100; + +void setup() { + // we make all the declarations at once + for (int count = 0; count < 9; count++) { + pinMode(pinArray[count], OUTPUT); + } +} + +void loop() { + for (int count = 0; count < 8; count++) { // 8 e' un numero magico + digitalWrite(pinArray[count], HIGH); + delay(timer); + digitalWrite(pinArray[count], LOW); + delay(timer); + } + + // Ciclo inverso: dall'alto in basso + for (int count = 8; count >= 0; count--) { + digitalWrite(pinArray[count], HIGH); + delay(timer); + digitalWrite(pinArray[count], LOW); + delay(timer); + } +} + +/* Domande: + + 1. Come posso fare per saltare un elemento del loop? + 2. Come posso fare per uscire completamente dal loop? + 3. 8 e' un numero magico: come posso evitarlo? + +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +Soluzioni: + 1. utilizzare continue + 2. utilizzare break + 3. Utilizzare un variabile sarebbe gia' un inizio, ancora meglio estrarre il + valore tramite la funzione sizeof(). +Links: +- http://www.tutorialspoint.com/cprogramming/c_continue_statement.htm +- https://www.arduino.cc/en/Reference/Sizeof +*/ + + diff --git a/programming/structured_data_types/oggetto_rgb/oggetto_rgb.ino b/programming/structured_data_types/oggetto_rgb/oggetto_rgb.ino new file mode 100644 index 0000000..9176f62 --- /dev/null +++ b/programming/structured_data_types/oggetto_rgb/oggetto_rgb.ino @@ -0,0 +1,73 @@ +/* + RGB Object + + Un oggetto puo' contenere tutte le proprieta' di un elemento + assieme ai metodi (le funzioni) che lo caratterizzano. + + In aggiunta il constructor e' una funzione richiamata al momento + di instanziare l'oggetto che puo' essere usata per attivare PIN, + assegnare variabili. + + + Schema: http://lab.piffa.net/schemi/rgb.jpg + */ + +class RGBLed { + // Classe rappresentativa di un LED RGB + + // Private properties, le proprieta' sono private per default + byte redPin ; + byte greenPin ; + byte bluePin ; + + public: + // Constructor: come viene instanziato un oggetto facente parte della classe + RGBLed(byte pinR, byte pinG, byte pinB) + { + // Carichiamo i valori dei PIN dentro alle proprieta' + redPin = pinR ; + greenPin = pinG ; + bluePin = pinB ; + + // Equivalente del Setup() per inizializzare i PIN + pinMode(redPin, OUTPUT); + pinMode(greenPin, OUTPUT); + pinMode(greenPin, OUTPUT); + } + + void Arrossa () { + // Metodo = funzione dell'oggetto + // Imposta il colore di un LED RGB a rosso + + analogWrite(redPin, 0); + analogWrite(greenPin, 255); + analogWrite(bluePin, 255); + } + + void SetColor (byte r, byte g, byte b) { + // Imposta il colore di un LED RGB + + analogWrite(redPin, r); + analogWrite(greenPin, g); + analogWrite(bluePin, b); + } +}; + +// Instanziamo un LED +RGBLed led(11, 10, 9); +/* L'oggetto viene istanziato qui e non nella funzione di setup() + perche' altrimenti la sua esistenza sarebbe legata solo + al contesto (scope) del setup(), non sarebbe disponibile nel loop() + */ + +void setup() { + // I PIN mode vengono settati dal constructor +} + +void loop() { + led.Arrossa(); + delay(1000); + led.SetColor(255, 0, 255) ; // Mettiamo il LED in Green + delay(1000); +} + diff --git a/programming/structured_data_types/struct/struct.ino b/programming/structured_data_types/struct/struct.ino new file mode 100644 index 0000000..6dd619d --- /dev/null +++ b/programming/structured_data_types/struct/struct.ino @@ -0,0 +1,39 @@ +/* + struct + + Struct e' un tipo struttura di dati non omogenea, + puo' contenere tipi di dati diversi a differenza di un array. + + Possiamo quindi raggruppare diverse proprieta' di un oggetto + sotto lo stesso identificatore. + + Schema: http://lab.piffa.net/schemi/rgb.jpg + */ + + +struct lampeggino { + byte pin ; + long pausa; + boolean stato; + char feedback[20]; +} ; + + +// instanziamo il lampeggino +lampeggino rosso { 13, 1000, 0, ">> Led Rosso <<"}; + +void setup() +{ + pinMode(rosso.pin, OUTPUT); + Serial.begin(9600); +} + +void loop() +{ + // Facciamo un lampeggiatore + digitalWrite(rosso.pin,rosso.stato); + Serial.println(rosso.feedback); + rosso.stato = !rosso.stato ; + delay(rosso.pausa); +} + -- 2.39.2