Go Down

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

Madwriter

ah era per me?ma io stavo solo dando una mano ti ho corretto il codice ti ho evidenziato gli errori e ho fatto una battuta di spirito visto che facevi tanto il superiore mah vai a fare del bene  :smiley-mr-green:
"Due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi..." Albert Einstein

astrobeed


non era rivolto a te, mi sono dimenticato di quotare comunque scusa se ti sei offeso


Ho capito benissimo che era per Madwriter, ma questo non cambia la sostanza, hai offeso senza motivo una persona che ha cercato di aiutarti.

uwefed

In C tutte le righe devono essere terminate con un ";" eccetto i FOR,IF, While e Switch-Case, e i #define e #include.

Non é simpatico che se Ti danno un consiglio di correggere un errore Tu rispondi che non é giusto. Nel Tuo caso concreto avevi fatto 3 errori diversi. Se chi ti aiuta non ha la disponibilitá di compilare lo sketch non li trova tutti anche perché non pensa che hai fatto cosí tanti differenti errori.

Informazioni sulla sintassi corretta trovi su http://arduino.cc/en/Reference/HomePage o in un libro o tutorial sul C.

Ciao Uwe


andre98

#18
Oct 15, 2012, 04:02 pm Last Edit: Oct 15, 2012, 04:04 pm by andre98 Reason: 1
1° io non facevo il superiore, davo solo per scontata la correzione degli errori da voi consigliata
2° mi scuso se non ho capito il tono che hai usato

comunque il programma è apposto, apparte che non fa quello che deve fare

comunque l'intento non era di offendere: dire di non tirarsela non è offendere

Madwriter

#19
Oct 15, 2012, 04:36 pm Last Edit: Oct 15, 2012, 04:48 pm by Madwriter Reason: 1

1° io non facevo il superiore, davo solo per scontata la correzione degli errori da voi consigliata
2° mi scuso se non ho capito il tono che hai usato

comunque il programma è apposto, apparte che non fa quello che deve fare

comunque l'intento non era di offendere: dire di non tirarsela non è offendere

dire di non tirarsela ovviamente equivale a dire te la stai tirando,io ho solo indicato cosa era errato,vabbè fa niente è stato un malintesto  ;) se ci dici cosa ti aspettavi che quel codice facesse magari ti diamo una mano  :smiley-mr-green:
ps questo è un topic da sezione software,questa è la sezione generale adatta solo per postare eventi,fiere o topic non coerenti con le 3 sezioni.
Per ora penserà un moderatore(Uwe) a spostare il topic per le prossime volte presta più attenzione  ;) :smiley-mr-green:
"Due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi..." Albert Einstein

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à.

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:

Go Up