stop programma

Buonasera a tutti, come ho già scritto quando mi sono presentato, mi sono avvicinato al mondo di Arduino in quanto mia figlia ha una disabilità che non le permette di premere dei pulsanti e ha la mobilità solo del dito indice e grazie ai sensori capacitivi sono riuscito a modificare diversi giochi per farla divertire.
Adesso ho un altro progetto un telecomando per una macchinina però sto avendo problemi per lo sketch.
Praticamente vorrei fare 4 led che in sequenza si accendono e attribuire a ogni led un relè che chiuderà il contatto del telecomando.
Per esempio si accende il primo led, non preme il pulsante non succede niente.
Si accende il secondo led, preme il pulsante la macchinina va a destra e affinchè tiene premuto la macchinina cammina a destra, nel momento in cui lascia la macchina si ferma e i led ricominciano la sequenza.
Ho provato questo sketch ma il programma non si ferma una volta che preme il pulsante.
Come faccio a bloccare il programma su quello stato? fino al rilascio del pulsante?

#define led1 2
#define led2 3
#define led3 4
#define led4 5
#define button 6
#define rele1 7
#define rele2 8
#define rele3 9
#define rele4 10
#define pausa 500 //imposta velocità
unsigned long istantePausa = 0;
int pos = 0;
int val = 0;


void setup() {
  pinMode (led1, OUTPUT);
  pinMode (led2, OUTPUT);  
  pinMode (led3, OUTPUT);
    pinMode (led4, OUTPUT);
    pinMode (button, OUTPUT);
    pinMode (rele1, OUTPUT);
    pinMode (rele2, OUTPUT);
    pinMode (rele3, OUTPUT);
    pinMode (rele4, OUTPUT);
}

void loop()

 {

  switch (pos) {
    case 0:
digitalWrite (led1, HIGH);
digitalWrite (led4, LOW);
val=digitalRead(button);
if (val == HIGH) {
  digitalWrite (rele1, HIGH);
}
else {
  digitalWrite (rele1, LOW);
}

      break;
      case 1:
digitalWrite (led2, HIGH);
digitalWrite (led1, LOW);
val=digitalRead(button);
if (val == HIGH) {
  pos==1;
  digitalWrite (rele2, HIGH);
}
else {
  digitalWrite (rele2, LOW);
  pos==2;
}
      break;
    case 2:
  digitalWrite (led3, HIGH);
  digitalWrite (led2, LOW);
  val=digitalRead(button);
if (val == HIGH) {
  digitalWrite (rele3, HIGH);
}
else {
  digitalWrite (rele3, LOW);
}
      break;
    case 3:
digitalWrite (led4, HIGH);
digitalWrite (led3, LOW);
val=digitalRead(button);
if (val == HIGH) {
  digitalWrite (rele4, HIGH);
}
else {
  digitalWrite (rele4, LOW);
}
      break;
  }
  if ((millis() - istantePausa) >= pausa) {
    istantePausa = millis();
    pos++;
    if (pos == 4) {
    pos = 0;
  }

  }
 }

grazie a chi mi aiuterà

Ciao. Non ho ancora visto tutto, ma la pinMode sul button l'hai messa in output... Credo vada in input.
Magari non risolve ma è un problema in meno.

Edit: altra cosa poco chiara è quel pos==1; nel case 1. Scritto così non ha senso, il doppio uguale è un confronto.

pinmode corretto ma non va.
ho messo quel pos perchè pensavo che leggesse la posizione e rimaneva nel case 1

La pinMode è meglio che sia corretta anche se non risolve.
Dovrei guardare meglio lo sketch sul pc invece che sul telefono, ma così a prima vista direi che ci sono 2 soluzioni:

  • riscrivere tutto con una logica diversa che non preveda situazioni bloccanti
  • sostituire if (val == HIGH) con while (val == HIGH) in modo che rimanga fermo in quel punto finché non viene rilasciato il pulsante. Poi però si aprono altri potenziali problemi

ho risolto, grazie comunque.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.