Advertisement
webtronico

Arduino - Sketch 8 relè

May 11th, 2024 (edited)
805
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Arduino 2.33 KB | Software | 0 0
  1. const int relePin[8] = {3, 4, 5, 6, 7, 8, 9, 10}; // Array per i pin dei relè
  2. const int pulsanteAntirimbalzo = 2; // Pin del pulsante antirimbalzo
  3.  
  4. int statoSequenza = 0; // Stato sequenza (0: spento, 1: acceso, 2: inversione)
  5. int releAttivo = 0; // Indice del relè attivo
  6. unsigned long tempoRitardo = 3000; // Tempo di ritardo in millisecondi (3 secondi)
  7. unsigned long tempoAttivazione = 0; // Memorizza il tempo di attivazione dell'ultimo relè
  8.  
  9. void setup() {
  10.   for (int i = 0; i < 8; i++) {
  11.     pinMode(relePin[i], OUTPUT); // Configura i pin dei relè come output
  12.   }
  13.   pinMode(pulsanteAntirimbalzo, INPUT_PULLUP); // Configura il pin del pulsante come input con pullup interno
  14. }
  15.  
  16. void loop() {
  17.   // Controllo del pulsante antirimbalzo
  18.   if (digitalRead(pulsanteAntirimbalzo) == LOW) {
  19.     delay(50); // Debounce del pulsante
  20.     if (digitalRead(pulsanteAntirimbalzo) == LOW) {
  21.       // Pulsante premuto, gestisci la sequenza
  22.       if (statoSequenza == 0) {
  23.         attivaSequenza();
  24.         statoSequenza = 1;
  25.       } else if (statoSequenza == 1) {
  26.         invertiSequenza();
  27.         statoSequenza = 2;
  28.       } else {
  29.         disattivaSequenza();
  30.         statoSequenza = 0;
  31.       }
  32.     }
  33.   }
  34.  
  35.   // Controllo tempo di attivazione relè
  36.   if ((statoSequenza == 1 || statoSequenza == 2) && millis() - tempoAttivazione >= tempoRitardo) {
  37.     gestisciReleSuccessivo(); // Gestisci il relè successivo
  38.   }
  39. }
  40.  
  41. void attivaSequenza() {
  42.   releAttivo = 0;
  43.   tempoAttivazione = millis();
  44.   attivaRele();
  45. }
  46.  
  47. void invertiSequenza() {
  48.   releAttivo = 7;
  49.   tempoAttivazione = millis();
  50.   attivaRele();
  51. }
  52.  
  53. void disattivaSequenza() {
  54.   releAttivo = 7;
  55.   tempoAttivazione = millis();
  56.   disattivaRele();
  57. }
  58.  
  59. void attivaRele() {
  60.   digitalWrite(relePin[releAttivo], HIGH);
  61.  
  62.   // Incrementa l'indice del relè attivo
  63.   releAttivo = (releAttivo + 1) % 8;
  64.  
  65.   // Aggiorna il tempo di attivazione
  66.   tempoAttivazione = millis();
  67. }
  68.  
  69. void disattivaRele() {
  70.   digitalWrite(relePin[releAttivo], LOW);
  71.  
  72.   // Decrementa l'indice del relè attivo
  73.   releAttivo = (releAttivo - 1 + 8) % 8; // Modulo con offset per gestire l'indice in modo negativo
  74.  
  75.   // Aggiorna il tempo di attivazione
  76.   tempoAttivazione = millis();
  77. }
  78.  
  79. void gestisciReleSuccessivo() {
  80.   if (statoSequenza == 1) {
  81.     attivaRele();
  82.   } else {
  83.     disattivaRele();
  84.   }
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement