Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unsigned long intervallo_led1 = 1000;
- unsigned long tempo_led1;
- byte ciclo_led1 = 0;
- byte a = 0;
- byte a1 = 10;
- #define pin_led1 8
- void setup() {
- Serial.begin(9600);
- pinMode(pin_led1, OUTPUT);
- }
- void loop() {
- if (a != a1) {
- Serial.print(F("Cambio"));
- }
- a1 = a;
- if (Serial.available() > 0) {
- char state = Serial.read();
- if (state == '+' ) {
- Serial.print(F("+ "));
- a = 1;
- }
- }
- if (millis() - tempo_led1 >= intervallo_led1) {
- tempo_led1 = millis();
- if (a == 1) {
- play_led1();
- if (ciclo_led1 < 7) {
- Serial.print(a);
- ++ciclo_led1;
- }
- else {
- ciclo_led1 = 0;
- tempo_led1 = millis();
- }
- }
- }
- }
- void play_led1() {
- //Con valore contenuto in ciclo_led1 esegue le istruzioni corrette ogni volta che viene chiamata la funzione play_led1
- switch (ciclo_led1) {
- case 0: // visto che si parte da zero questa è la prima cosa che deve fare la nostra funzione play_led1, e quindi accende il led1
- digitalWrite(pin_led1, HIGH);
- break;
- case 1: //il programma inizia con una pausa di 1000mS, poi accende il led per altri 1000mS e adesso lo spegne ma....
- digitalWrite(pin_led1, LOW);
- intervallo_led1 = 700; //...per la prossima pausa invece di 1000mS impostiamo un intervallo di 700mS, così da avere un lampeggio un po' più veloce. Quindi nel nostro ciclo_led
- //di cose da fare non siamo bloccati ad avere un intervallo di tempo sempre uguale, ma possiamo per ogni step decidere un tempo diverso
- break;
- case 2: //dopo che il led è stato spento per 700mS lo riaccende
- digitalWrite(pin_led1, HIGH);
- break;
- case 3: //anche qua, sempre dopo 700mS esegue quanto segue, spegne il led e...
- digitalWrite(pin_led1, LOW);
- intervallo_led1 = 350; //...cambiamo di nuovo la durata dell'intervallo, da 700mS a 350mS, il led lampeggia più veloce
- break;
- case 4: //accende per 350mS
- digitalWrite(pin_led1, HIGH);
- break;
- case 5: //spegne per 350mS
- digitalWrite(pin_led1, LOW);
- intervallo_led1 = 100; //sempre più veloce
- break;
- case 6: //accende per 100mS
- digitalWrite(pin_led1, HIGH);
- break;
- case 7: //spegne per 100mS
- digitalWrite(pin_led1, LOW);
- intervallo_led1 = 1000; //arrivati alla fine del ciclo si ricomincia daccapo, essendo partiti con un tempo di 1000mS riassegnamo ad intervallo_led1 un secondo di tempo
- Serial.println(F(" fine"));
- a = 0;
- break;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement