Go Down

Topic: arduino segnala errori senza senso, forse (Read 1 time) previous topic - next topic

PaoloP

Basta basta... torniamo al programma..

Code: [Select]
#define pulsante1 7
#define pulsante2 6
#define pulsante3 5
#define LED 13
int pausa = 1000;
int pausa2 = 3000;
int stato;

void setup()
{
  pinMode(pulsante1, INPUT);
  pinMode(pulsante2, INPUT);
  pinMode(pulsante3, INPUT);
  pinMode(LED, OUTPUT);
}

void loop()
{
  if(pulsante1 == HIGH)
  {
    stato = 1;
  }
  else
  {
    if(pulsante2 == HIGH)
    {
      stato = 2;
    }
    else
    {
      if(pulsante3 == HIGH)
      {
        stato = 3;
      }
      else
      {
        stato = 0;
      }
    }
  }

  switch (stato)
  {
  case 1:
    digitalWrite(LED, HIGH);
    delay(pausa);
    digitalWrite(LED, LOW);
    delay(pausa2);
    break;

  case 2:
    digitalWrite(LED, HIGH);
    delay(pausa);
    digitalWrite(LED, LOW);
    delay(pausa);
    digitalWrite(LED, HIGH);
    delay(pausa);
    digitalWrite(LED, LOW);
    delay(pausa2);
    break;

  case 3:
    digitalWrite(LED, HIGH);
    delay(pausa);
    digitalWrite(LED, LOW);
    delay(pausa);
    digitalWrite(LED, HIGH);
    delay(pausa);
    digitalWrite(LED, LOW);
    delay(pausa);
    digitalWrite(LED, HIGH);
    delay(pausa);
    digitalWrite(LED, LOW);
    delay(pausa2);
    break;

  case 0:
    digitalWrite(LED, LOW);
    break;
  }
}


Credo dovresti mettere un delay nel loop. Il ciclo così fatto è velocissimo. Per farlo funzionare dovresti tenere premuto il pulsante.
Inoltre dovresti inserire il delay anche come funzione debounce (anti-rimbalzo)

Per il debug, inizializza la seriale nel setup e metti qualche print qua e là.
Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

uwefed

forse il codice funzionerebbe, se da qualche parte verrebbe letto lo stato dei pulsanti.
Manca il digitalRead(pulsante1) ecc

con 

Quote

#define pulsante1 7
...
if(pulsante1 == HIGH)


controlli solo se "7 == HIGH"
visto che il preprocessore (Una delle cose che vengono chiamate quando schiacci l'icona "verfy" nel IDE) sostituisce la stringa "pulsante1" con la stringa "7".

Ciao Uwe

andre98

il debug è apposto.
dato che non funzionava ho inserito il contenuto dei vari "case" dentro loop

Code: [Select]

#define pulsante1 7
#define pulsante2 6
#define pulsante3 5
#define LED 13
int pausa = 1000;
int pausa2 = 3000;
int stato;

void setup()
{
  pinMode(pulsante1, INPUT);
  pinMode(pulsante2, INPUT);
  pinMode(pulsante3, INPUT);
  pinMode(LED, OUTPUT);
}

void loop()
{
  stato = 0;
 
  if(pulsante1 == HIGH)
  {
    stato = 1;
  }
  else
  {
    if(pulsante2 == HIGH)
    {
      stato = 2;
    }
    else
    {
      if(pulsante3 == HIGH)
      {
        stato = 3;
      }
      else
      {
        stato = 0;
      }
    }
  }
 
  switch (stato)
  {
    case 1:
      loop()
      ;{
        digitalWrite(LED, HIGH);
        delay(pausa);
        digitalWrite(LED, LOW);
        delay(pausa2);
        break;
      }
     
    case 2:
      loop()
      ;{
        digitalWrite(LED, HIGH);
        delay(pausa);
        digitalWrite(LED, LOW);
        delay(pausa);
        digitalWrite(LED, HIGH);
        delay(pausa);
        digitalWrite(LED, LOW);
        delay(pausa2);
        break;
      }
     
    case 3:
      loop()
      ;{
        digitalWrite(LED, HIGH);
        delay(pausa);
        digitalWrite(LED, LOW);
        delay(pausa);
        digitalWrite(LED, HIGH);
        delay(pausa);
        digitalWrite(LED, LOW);
        delay(pausa);
        digitalWrite(LED, HIGH);
        delay(pausa);
        digitalWrite(LED, LOW);
        delay(pausa2);
        break;
      }
     
    case 0:
      digitalWrite(LED, LOW);
      break;
  }
}


solo che se non inserisco il ; prima di loop mi da errore

comunque quello che devo fare è in sostanza un buzzer (come quello per ps3) in cui appare con una sequenza di "accendi spegni" del led quale pulsante è stato premuto prima

ad arduino sono collegati tre pulsanti (7, 6, 5) e un led(13)

ps grazie per aver spostato, mi sono accorto dopo delle sottosezioni

PaoloP

Prova così
Code: [Select]
#define pulsante1 7
#define pulsante2 6
#define pulsante3 5
#define LED 13

int pausa = 1000;
int pausa2 = 3000;
int stato;

void setup()
{
  pinMode(pulsante1, INPUT);
  pinMode(pulsante2, INPUT);
  pinMode(pulsante3, INPUT);
  pinMode(LED, OUTPUT);
  stato = 0;
}

void loop()
{
  if(digitalRead(pulsante1) == HIGH)
  {
    stato = 1;
  }
  else if(digitalRead(pulsante2) == HIGH)
  {
    stato = 2;
  }
  else if(digitalRead(pulsante3) == HIGH)
  {
    stato = 3;
  }
  else
  {
    stato = 0;
  }

  switch(stato)
  {
  case 0:
    digitalWrite(LED, LOW);
    break;

  case 1:
    digitalWrite(LED, HIGH);
    delay(pausa);
    digitalWrite(LED, LOW);
    delay(pausa2);
    break;

  case 2:
    digitalWrite(LED, HIGH);
    delay(pausa);
    digitalWrite(LED, LOW);
    delay(pausa);
    digitalWrite(LED, HIGH);
    delay(pausa);
    digitalWrite(LED, LOW);
    delay(pausa2);
    break;

  case 3:
    digitalWrite(LED, HIGH);
    delay(pausa);
    digitalWrite(LED, LOW);
    delay(pausa);
    digitalWrite(LED, HIGH);
    delay(pausa);
    digitalWrite(LED, LOW);
    delay(pausa);
    digitalWrite(LED, HIGH);
    delay(pausa);
    digitalWrite(LED, LOW);
    delay(pausa2);
    break;

  default:;
    //
  }
}


Ciao.  :D :smiley-mr-green:
Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Go Up