Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const int relePin[8] = {3, 4, 5, 6, 7, 8, 9, 10}; // Array per i pin dei relè
- const int pulsanteAntirimbalzo = 2; // Pin del pulsante antirimbalzo
- int statoSequenza = 0; // Stato sequenza (0: spento, 1: acceso, 2: inversione)
- int releAttivo = 0; // Indice del relè attivo
- unsigned long tempoRitardo = 3000; // Tempo di ritardo in millisecondi (3 secondi)
- unsigned long tempoAttivazione = 0; // Memorizza il tempo di attivazione dell'ultimo relè
- void setup() {
- for (int i = 0; i < 8; i++) {
- pinMode(relePin[i], OUTPUT); // Configura i pin dei relè come output
- }
- pinMode(pulsanteAntirimbalzo, INPUT_PULLUP); // Configura il pin del pulsante come input con pullup interno
- }
- void loop() {
- // Controllo del pulsante antirimbalzo
- if (digitalRead(pulsanteAntirimbalzo) == LOW) {
- delay(50); // Debounce del pulsante
- if (digitalRead(pulsanteAntirimbalzo) == LOW) {
- // Pulsante premuto, gestisci la sequenza
- if (statoSequenza == 0) {
- attivaSequenza();
- statoSequenza = 1;
- } else if (statoSequenza == 1) {
- invertiSequenza();
- statoSequenza = 2;
- } else {
- disattivaSequenza();
- statoSequenza = 0;
- }
- }
- }
- // Controllo tempo di attivazione relè
- if ((statoSequenza == 1 || statoSequenza == 2) && millis() - tempoAttivazione >= tempoRitardo) {
- gestisciReleSuccessivo(); // Gestisci il relè successivo
- }
- }
- void attivaSequenza() {
- releAttivo = 0;
- tempoAttivazione = millis();
- attivaRele();
- }
- void invertiSequenza() {
- releAttivo = 7;
- tempoAttivazione = millis();
- attivaRele();
- }
- void disattivaSequenza() {
- releAttivo = 7;
- tempoAttivazione = millis();
- disattivaRele();
- }
- void attivaRele() {
- digitalWrite(relePin[releAttivo], HIGH);
- // Incrementa l'indice del relè attivo
- releAttivo = (releAttivo + 1) % 8;
- // Aggiorna il tempo di attivazione
- tempoAttivazione = millis();
- }
- void disattivaRele() {
- digitalWrite(relePin[releAttivo], LOW);
- // Decrementa l'indice del relè attivo
- releAttivo = (releAttivo - 1 + 8) % 8; // Modulo con offset per gestire l'indice in modo negativo
- // Aggiorna il tempo di attivazione
- tempoAttivazione = millis();
- }
- void gestisciReleSuccessivo() {
- if (statoSequenza == 1) {
- attivaRele();
- } else {
- disattivaRele();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement