From: eaman Date: Mon, 5 Dec 2016 09:07:41 +0000 (+0100) Subject: oggi analog X-Git-Url: http://git.piffa.net/web?p=sketchbook_andrea;a=commitdiff_plain;h=163683bdb0a87a13722db21fcc8a7889d79d4f3d oggi analog --- diff --git a/basic/pwm/pwm_1_soluzione_doppio_while_byte/pwm_1_soluzione_doppio_while_byte.ino b/basic/pwm/pwm_1_soluzione_doppio_while_byte/pwm_1_soluzione_doppio_while_byte.ino index eb6cca7..19f8d07 100644 --- a/basic/pwm/pwm_1_soluzione_doppio_while_byte/pwm_1_soluzione_doppio_while_byte.ino +++ b/basic/pwm/pwm_1_soluzione_doppio_while_byte/pwm_1_soluzione_doppio_while_byte.ino @@ -3,6 +3,9 @@ PWM per un LED: aumentare progressivamente la luminosita'. Aumenta e diminuisce la luminostia' usando un ciclo while + + Schema: http://lab.piffa.net/schemi/led_single_bb.png + Usare un PIN abilitato per il PWM. */ byte led = 9 ; // Il pin ~9 e' abilitato al PWM @@ -15,7 +18,7 @@ void setup() { void loop() { while (brightness < 255) { - analogWrite(led, brightness); // La funziona analogWrite utilizza il PWM + analogWrite(led, brightness);// La funziona analogWrite utilizza il PWM // a 8 bit integrato nel MCU: simula un serie di valori intermedi // nell'intervallo discreto con minimo 0 (spento) e massimo 255 (acceso). delay(10); @@ -23,15 +26,17 @@ void loop() { } while (brightness > 0) { - analogWrite(led, brightness); // La funziona analogWrite utilizza il PWM + analogWrite(led, brightness);// La funziona analogWrite utilizza il PWM delay(10); brightness = brightness - 1; // Decrementiamo la luminosita' } } -/* +/* Note: + - basic/pwm/pwm_3_fade_reverser/pwm_3_fade_reverser.ino -E molto piu' snello utilizzando il solo ciclo loop come iteratore -e una condizione per cambiare l'incremento + + E molto piu' snello utilizzando il solo ciclo loop come iteratore + e una condizione per cambiare l'incremento. */ diff --git a/basic/pwm/pwm_1_while_byte/pwm_1_while_byte.ino b/basic/pwm/pwm_1_while_byte/pwm_1_while_byte.ino index fed4e7f..dc09234 100644 --- a/basic/pwm/pwm_1_while_byte/pwm_1_while_byte.ino +++ b/basic/pwm/pwm_1_while_byte/pwm_1_while_byte.ino @@ -1,7 +1,11 @@ /* Fade - PWM per un LED: aumentare progressivamente la luminosita'. + PWM per un LED: aumentare progressivamente la luminosita' + utilizzando un ciclo while e l'overflow di un byte. + + Schema: http://lab.piffa.net/schemi/led_single_bb.png + (Cambiare PIN) */ const byte led = 9 ; // Il pin ~9 e' abilitato al PWM diff --git a/basic/pwm/pwm_3_fade_reverser/pwm_3_fade_reverser.ino b/basic/pwm/pwm_3_fade_reverser/pwm_3_fade_reverser.ino index 688465f..70bc48b 100644 --- a/basic/pwm/pwm_3_fade_reverser/pwm_3_fade_reverser.ino +++ b/basic/pwm/pwm_3_fade_reverser/pwm_3_fade_reverser.ino @@ -61,4 +61,4 @@ Soluzioni: 2. Due cicli IF annidiati che verificano due condizioni in sucessione -/* +*/ diff --git a/basic/pwm/pwm_4_analog_input/pwm_4_analog_input.ino b/basic/pwm/pwm_4_analog_input/pwm_4_analog_input.ino index e31396e..5e9f83d 100644 --- a/basic/pwm/pwm_4_analog_input/pwm_4_analog_input.ino +++ b/basic/pwm/pwm_4_analog_input/pwm_4_analog_input.ino @@ -2,6 +2,8 @@ Analog PWM Impostare la frequenza del PWM tramite un input analogico. + +- Schema: http://lab.piffa.net/schemi/arduino-pwm-diagram.png */ diff --git a/oggi/button_1/button_1.ino b/oggi/button_1/button_1.ino deleted file mode 100644 index f409028..0000000 --- a/oggi/button_1/button_1.ino +++ /dev/null @@ -1,45 +0,0 @@ -/* - Input Condizionale - - Accensione e spegnimanto di un LED utilizzando un pin come input. - - Utilizzare un jumper per collegare il PIN Input - alternativamente a +5 o GND . - -Schema: -- http://lab.piffa.net/schemi/led_condizionale.png - - */ - -// Pin 13 has an LED connected on most Arduino boards. -// give it a name: -int led = 12; -int input = 2; - -// the setup routine runs once when you press reset: -void setup() { - // initialize the digital pin as an output. - pinMode(led, OUTPUT); // Il PIN e' attivato come output - pinMode(input, INPUT); // Il PIN e' attivato come output -} - -// the loop routine runs over and over again forever: -void loop() { - if (digitalRead(input) == HIGH) { // Verifica se il PIN input e' +5V - digitalWrite(led, HIGH); - } - if (digitalRead(input) == LOW) { // Verifica se il PIN input e' 0V - digitalWrite(led, LOW); - } -} - -/* Domande: - 1. Invertire il programma facendo in modo che il led si spenga - quando il bottone e' premuto. Considerare come ottenere lo stesso risultato - modificando il circuito. - 2. Modificare il programma per far brillare il led cinque volte al secondo - quando il bottone e' premuto. - 3. Si potrebbe usare un ciclo iterativo while invece che - un ciclo condizonale if? Che differenza c'e' tra il ciclo while, if e for? - 4. Domanda: cosa succede se il jumper input non e' collegato ne al +5 ne al ground? - */ diff --git a/oggi/button_2_serial_debug/button_2_serial_debug.ino b/oggi/button_2_serial_debug/button_2_serial_debug.ino deleted file mode 100644 index 5dbcf80..0000000 --- a/oggi/button_2_serial_debug/button_2_serial_debug.ino +++ /dev/null @@ -1,50 +0,0 @@ -/* - Input serial debug - - - Accensione e spegnimanto di un LED utilizzando un pin come input. - Utilizzare un bottone momentaneo per attivare il LED. - - Schemi del circuito per bottone in pull down: - - http://lab.piffa.net/schemi/button_1_bb.png - - http://lab.piffa.net/schemi/button_1_schem.png - -Tutorial: -- - */ - -int led = 12; -int input = 2; - -// the setup routine runs once when you press reset: -void setup() { - pinMode(led, OUTPUT); // Il PIN e' attivato come output - pinMode(input, INPUT); // Il PIN e' attivato come output - - Serial.begin(9600); // Attivazione seriale -} - -// the loop routine runs over and over again forever: -void loop() { - if (digitalRead(input) == HIGH) { // Verifica se il PIN input e' +5v - digitalWrite(led, HIGH); - Serial.println("Bottone premuto: circuito chiuso"); // Debug seriale - delay(200); - } - else { // Alterativa: se non e' +5v - digitalWrite(led, LOW); - Serial.println("Bottone libero: circuito aperto"); // Debug seriale - delay(200); - } -} - -/* Domande: - 1. invertire il programma facendo in modo che il led si spenga - quando il bottone e' premuto. Consoderare come ottenere lo stesso risultato - modificando il circuito. - 2. Modificare il programma per far brillare il led cinque volte al secondo - quando il bottone e' premuto. - 3. Si potrebbe usare un ciclo iterativo while invece che - un ciclo condizonale if? Che differenza c'e' tra il ciclo while e for? - 4. Domanda: cosa succede se il jumper input non e' collegato ne al +5 ne al gound? - */ diff --git a/oggi/operator_1_basic/operator_1_basic.ino b/oggi/operator_1_basic/operator_1_basic.ino deleted file mode 100644 index 1a8bd6b..0000000 --- a/oggi/operator_1_basic/operator_1_basic.ino +++ /dev/null @@ -1,63 +0,0 @@ -/* - Operatori base - - */ - -int a = 5; -int b = 10; -int c = 20; - -void setup() // run once, when the sketch starts -{ - Serial.begin(9600); // set up Serial library at 9600 bps - - Serial.println("Here is some math: "); - - Serial.print("a = "); - Serial.println(a); - Serial.print("b = "); - Serial.println(b); - Serial.print("c = "); - Serial.println(c); - - Serial.print("a + b = "); // add - Serial.println(a + b); - - Serial.print("a * c = "); // multiply - Serial.println(a * c); - - Serial.print("c / b = "); // divide - Serial.println(c / b); - - Serial.print("b - c = "); // subtract - Serial.println(b - c); - - Serial.print("b modulo a = "); // Calculates the remainder when one integer is divided by another. - Serial.println(b % a); - - Serial.print("8 modulo 3 = "); // Calculates the remainder when one integer is divided by another. - Serial.println(8 % 3); - - Serial.print("a incrementato ++ = "); // Increments - Serial.println(a++); // Increments AFTER the call - Serial.print("valore attuale di a: "); - Serial.println(a); - Serial.print("++a incrementato = "); - Serial.println(++a); // Increments BEFORE the call - - - Serial.print("b decrementato -- = "); // Decrement - Serial.println(b--); - Serial.print("valore attuale di b: "); - Serial.println(b); - Serial.print("--b decrementato = "); - Serial.println(--b); - -} - -void loop() // we need this to be here even though its empty -{ -} - - - diff --git a/oggi/operator_2_comparison/operator_2_comparison.ino b/oggi/operator_2_comparison/operator_2_comparison.ino new file mode 100644 index 0000000..7900d9e --- /dev/null +++ b/oggi/operator_2_comparison/operator_2_comparison.ino @@ -0,0 +1,47 @@ +/* + Operatori comparativi binari + Comparison operators, binary + + */ + +int a = 5; +int b = 10; +int c = 20; + +void setup() // run once, when the sketch starts +{ + Serial.begin(9600); // set up Serial library at 9600 bps + + Serial.println("Here is some math: "); + + Serial.print("a = "); + Serial.println(a); + Serial.print("b = "); + Serial.println(b); + Serial.print("c = "); + Serial.println(c); + + Serial.print("a > b = "); // maggiore + Serial.println(a > b); + + Serial.print("a < b = "); // minore + Serial.println(a < b); + + Serial.print("a == b -> "); // stesso valore + Serial.println(a == b); + + Serial.print("a != b -> "); // valore diverso + Serial.println(a != b); + + Serial.print("a <= b ->"); // minore uguale + Serial.println(a <= b); + + Serial.print("a >= b -> "); // maggiore uguale + Serial.println(a >= b); +} + +void loop() // we need this to be here even though its empty +{ +} + + diff --git a/oggi/pwm_0_stati/pwm_0_stati.ino b/oggi/pwm_0_stati/pwm_0_stati.ino new file mode 100644 index 0000000..3863c4a --- /dev/null +++ b/oggi/pwm_0_stati/pwm_0_stati.ino @@ -0,0 +1,37 @@ +/* + PWM Stati + + PWM per un LED: impostare i valori di luminosita' di un LED. + 4 stati di luminosita' per un LED collegato a un PIN PWM + + */ + +const int led = 9 ; // Il pin ~9 e' abilitato al PWM +byte brightness = 255; // Valore iniziale per il PWM del LED +const int pausa = 2000; // Pausa tra uno stato e l'altro + +void setup() { + pinMode(led, OUTPUT); // Il PIN nove va dichiarato come un OUTPUT +} + +void loop() { + // OUTPUT al 100% : 255 + analogWrite(led, brightness) ; + delay(pausa); + + // OUTPUT al 75% : 191 + analogWrite(led, brightness * 0.75) ; + delay(pausa); + + // OUTPUT al 50% : 127 + analogWrite(led, brightness * 0.5) ; + delay(pausa); + + // OUTPUT al 25%: 63 + analogWrite(led, brightness * 0.25 ) ; + delay(pausa); + + // OUTPUT al 0% + analogWrite(led, brightness * 0) ; + delay(pausa); +} diff --git a/oggi/pwm_1_soluzione_doppio_while_byte/pwm_1_soluzione_doppio_while_byte.ino b/oggi/pwm_1_soluzione_doppio_while_byte/pwm_1_soluzione_doppio_while_byte.ino new file mode 100644 index 0000000..19f8d07 --- /dev/null +++ b/oggi/pwm_1_soluzione_doppio_while_byte/pwm_1_soluzione_doppio_while_byte.ino @@ -0,0 +1,42 @@ +/* + Fade sali e scendi + + PWM per un LED: aumentare progressivamente la luminosita'. + Aumenta e diminuisce la luminostia' usando un ciclo while + + Schema: http://lab.piffa.net/schemi/led_single_bb.png + Usare un PIN abilitato per il PWM. + */ + +byte led = 9 ; // Il pin ~9 e' abilitato al PWM +byte brightness = 0; // Valore iniziale per il PWM del LED + +// the setup routine runs once when you press reset: +void setup() { + pinMode(led, OUTPUT); // Il PIN nove va dichiarato come un OUTPUT +} + +void loop() { + while (brightness < 255) { + analogWrite(led, brightness);// La funziona analogWrite utilizza il PWM + // a 8 bit integrato nel MCU: simula un serie di valori intermedi + // nell'intervallo discreto con minimo 0 (spento) e massimo 255 (acceso). + delay(10); + brightness = brightness + 1; // Incrementiamo la luminosita' + } + + while (brightness > 0) { + analogWrite(led, brightness);// La funziona analogWrite utilizza il PWM + delay(10); + brightness = brightness - 1; // Decrementiamo la luminosita' + } + + +} +/* Note: + +- basic/pwm/pwm_3_fade_reverser/pwm_3_fade_reverser.ino + + E molto piu' snello utilizzando il solo ciclo loop come iteratore + e una condizione per cambiare l'incremento. +*/ diff --git a/oggi/pwm_1_while_byte/pwm_1_while_byte.ino b/oggi/pwm_1_while_byte/pwm_1_while_byte.ino new file mode 100644 index 0000000..dc09234 --- /dev/null +++ b/oggi/pwm_1_while_byte/pwm_1_while_byte.ino @@ -0,0 +1,33 @@ +/* + Fade + + PWM per un LED: aumentare progressivamente la luminosita' + utilizzando un ciclo while e l'overflow di un byte. + + Schema: http://lab.piffa.net/schemi/led_single_bb.png + (Cambiare PIN) + */ + +const byte led = 9 ; // Il pin ~9 e' abilitato al PWM +byte brightness = 0; // Valore iniziale per il PWM del LED + // Perche' brightness non e' una costante? + +// the setup routine runs once when you press reset: +void setup() { + pinMode(led, OUTPUT); // Il PIN nove va dichiarato come un OUTPUT +} + +void loop() { + analogWrite(led, brightness); // La funziona analogWrite utilizza il PWM + // a 8 bit integrato nel MCU: simula un serie di valori intermedi + // nell'intervallo discreto con minimo 0 (spento) e massimo 255 (acceso). + delay(10); + brightness = brightness + 1; // Incrementiamo la luminosita' +} + +/* Domande: + +1. Come fare a invertire la dissolvenza diminuendo la luminosita'? +2. Provare a far salire e poi scendere la luminosita' + +*/ diff --git a/oggi/pwm_2_for_loop/pwm_2_for_loop.ino b/oggi/pwm_2_for_loop/pwm_2_for_loop.ino new file mode 100644 index 0000000..610d302 --- /dev/null +++ b/oggi/pwm_2_for_loop/pwm_2_for_loop.ino @@ -0,0 +1,66 @@ +/* + LED for PWM + + PWM per un LED: aumentare progressivamente la luminosita'. + Utilizzo di un ciclo iterativo: for loop + + */ + +int led = 9; // Pin per il PWM +int pausa = 5; + +void setup() +{ + pinMode(led, OUTPUT); +} + +void loop() +{ + for (int i = 0; i < 255 ; i++) { // Operatore ternario, 3 argomenti: + /* 1. definizione iteratore + 2. limite iteratore + 3. incremento operatore + */ + analogWrite(led, i) ; + delay(pausa); + } + // Ora l'inverso + for (int c = 255; c > 0 ; c--) { // Domanda: 1. avrei potuto usare come + // variabile di nuovo i ? + analogWrite(led, c) ; + delay(pausa); + } +} + +/* Domande: + 2. I due loop sembrano molto simili: e' possibile accorparli? + + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + - Risposte: + 1. Si, le variabili i e c esistono solo nello scopo degli iteratori + in cui sono dichiarate. + 2. Vedi es. suciessivo. + */ + + + + diff --git a/oggi/pwm_3_fade_reverser/pwm_3_fade_reverser.ino b/oggi/pwm_3_fade_reverser/pwm_3_fade_reverser.ino new file mode 100644 index 0000000..70bc48b --- /dev/null +++ b/oggi/pwm_3_fade_reverser/pwm_3_fade_reverser.ino @@ -0,0 +1,64 @@ +/* +Fade + + This example shows how to fade an LED on pin 9 + using the analogWrite() function. + This example code is in the public domain. + From Arduino for dummies. + */ + +const int led = 9; // LED con PWM +byte brightness = 0; // Luminosita' +const int fadeAmount = 5; // Step di modifica luminosita' +const int pause = 30; // Pausa tra incrementi + + +void setup() { + pinMode(led, OUTPUT); // declare pin 9 to be an output: +} + +void loop() { + + analogWrite(led, brightness); + brightness = brightness + fadeAmount; + + if (brightness == 0 || brightness == 255) { + // Invertire incremento ai valori limiti + fadeAmount = -fadeAmount ; + } + // wait for 30 milliseconds to see the dimming effect + delay(pause); +} + + +/* Domande: + 1. Che rapporto c'e' tra un OR e due cicli IF ? + 2. E tra un AND e due cicli IF ? +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +Soluzioni: + 1. Due cicli IF sequenziali con: + - Condizioni diverse + - stessa conseguenza + + 2. Due cicli IF annidiati che verificano due condizioni in sucessione + +*/ diff --git a/oggi/pwm_4_analog_input/pwm_4_analog_input.ino b/oggi/pwm_4_analog_input/pwm_4_analog_input.ino new file mode 100644 index 0000000..5e9f83d --- /dev/null +++ b/oggi/pwm_4_analog_input/pwm_4_analog_input.ino @@ -0,0 +1,31 @@ +/* + Analog PWM + + Impostare la frequenza del PWM tramite un input analogico. + +- Schema: http://lab.piffa.net/schemi/arduino-pwm-diagram.png + + */ + +int inputPin = A0; // set input pin for the potentiometer +int inputValue = 0; // potentiometer input variable +int ledPin = 3; // output pin, deve avere il PWM + +void setup() { + // declare the ledPin as an OUTPUT: + pinMode(ledPin, OUTPUT); +} + +void loop() { + // read the value from the potentiometer: + inputValue = analogRead(inputPin); + + // send the square wave signal to the LED: + analogWrite(ledPin, inputValue/4); + // la lettura analogica e' a 10 bit (0-1024) + // Il PWM invece e' a 8 bit (0-255) + // Circa 1024 / 4 ~= 255 + + // Domanda: dovrebbe esserci un delay()? +} + diff --git a/oggi/serial_hello_world/serial_hello_world.ino b/oggi/serial_hello_world/serial_hello_world.ino deleted file mode 100644 index 7f8e814..0000000 --- a/oggi/serial_hello_world/serial_hello_world.ino +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Hello World! - * - * This is the Hello World! for Arduino. - * It shows how to send data to the computer trough the serial connection - */ - -void setup() -{ - Serial.begin(9600); // Inposta la seriale a 9600 bps - // Se Arduino manda 9600 bit per secondo e devi manandare 12 Bytes di dati - // quanto tempo serve per mandare i dati? - - // Try to change bond rate in the monitor - - Serial.println("Hello World!"); // scrive hello world e ritorna a capo - - -// Serial.print("Il mio nome e': "); // Scrive senza ritorno a capo -// Serial.println("Andrea"); // Scrive con ritorno a capo -// Serial.flush(); // Assicura che tutto il testo venga scritto - -} - -void loop() -{ - // Provate a mettere i Serial.printl() qui, magari con un delay() -} - - - - diff --git a/oggi/switch_test_serial/switch_test_serial.ino b/oggi/switch_test_serial/switch_test_serial.ino deleted file mode 100644 index 9fa2b7d..0000000 --- a/oggi/switch_test_serial/switch_test_serial.ino +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Switch test program - */ - -int switchPin = 2; // Switch connected to digital pin 2 - -void setup() // run once, when the sketch starts -{ - Serial.begin(9600); // set up Serial library at 9600 bps - pinMode(switchPin, INPUT); // sets the digital pin as input to read switch -} - - -void loop() // run over and over again -{ - Serial.print("Read switch input: "); - Serial.println(digitalRead(switchPin)); // Read the pin and display the value - delay(200); -}