Advertisement
pippero

lampeggio

Mar 7th, 2023
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.66 KB | None | 0 0
  1. unsigned long intervallo_led1 = 1000;
  2. unsigned long tempo_led1;
  3. byte ciclo_led1 = 0;
  4. byte a = 0;
  5. byte a1 = 10;
  6. #define pin_led1 8
  7. void setup() {
  8. Serial.begin(9600);
  9. pinMode(pin_led1, OUTPUT);
  10. }
  11.  
  12. void loop() {
  13. if (a != a1) {
  14. Serial.print(F("Cambio"));
  15. }
  16. a1 = a;
  17. if (Serial.available() > 0) {
  18. char state = Serial.read();
  19. if (state == '+' ) {
  20. Serial.print(F("+ "));
  21. a = 1;
  22. }
  23. }
  24. if (millis() - tempo_led1 >= intervallo_led1) {
  25. tempo_led1 = millis();
  26. if (a == 1) {
  27. play_led1();
  28. if (ciclo_led1 < 7) {
  29. Serial.print(a);
  30. ++ciclo_led1;
  31. }
  32. else {
  33. ciclo_led1 = 0;
  34. tempo_led1 = millis();
  35. }
  36. }
  37. }
  38. }
  39. void play_led1() {
  40. //Con valore contenuto in ciclo_led1 esegue le istruzioni corrette ogni volta che viene chiamata la funzione play_led1
  41. switch (ciclo_led1) {
  42. 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
  43. digitalWrite(pin_led1, HIGH);
  44. break;
  45. case 1: //il programma inizia con una pausa di 1000mS, poi accende il led per altri 1000mS e adesso lo spegne ma....
  46. digitalWrite(pin_led1, LOW);
  47. 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
  48. //di cose da fare non siamo bloccati ad avere un intervallo di tempo sempre uguale, ma possiamo per ogni step decidere un tempo diverso
  49. break;
  50. case 2: //dopo che il led è stato spento per 700mS lo riaccende
  51. digitalWrite(pin_led1, HIGH);
  52. break;
  53. case 3: //anche qua, sempre dopo 700mS esegue quanto segue, spegne il led e...
  54. digitalWrite(pin_led1, LOW);
  55. intervallo_led1 = 350; //...cambiamo di nuovo la durata dell'intervallo, da 700mS a 350mS, il led lampeggia più veloce
  56. break;
  57. case 4: //accende per 350mS
  58. digitalWrite(pin_led1, HIGH);
  59. break;
  60. case 5: //spegne per 350mS
  61. digitalWrite(pin_led1, LOW);
  62. intervallo_led1 = 100; //sempre più veloce
  63. break;
  64. case 6: //accende per 100mS
  65. digitalWrite(pin_led1, HIGH);
  66. break;
  67. case 7: //spegne per 100mS
  68. digitalWrite(pin_led1, LOW);
  69. 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
  70. Serial.println(F(" fine"));
  71. a = 0;
  72. break;
  73. }
  74. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement