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
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);
}
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.
*/
/*
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
2. Due cicli IF annidiati che verificano due condizioni in sucessione
-/*
+*/
Analog PWM
Impostare la frequenza del PWM tramite un input analogico.
+
+- Schema: http://lab.piffa.net/schemi/arduino-pwm-diagram.png
*/
+++ /dev/null
-/*
- 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?
- */
+++ /dev/null
-/*
- 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?
- */
+++ /dev/null
-/*
- 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
-{
-}
-
-
-
--- /dev/null
+/*
+ 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
+{
+}
+
+
--- /dev/null
+/*
+ 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);
+}
--- /dev/null
+/*
+ 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.
+*/
--- /dev/null
+/*
+ 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'
+
+*/
--- /dev/null
+/*
+ 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.
+ */
+
+
+
+
--- /dev/null
+/*
+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
+
+*/
--- /dev/null
+/*
+ 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()?
+}
+
+++ /dev/null
-/*
- * 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()
-}
-
-
-
-
+++ /dev/null
-/*
- * 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);
-}