Pages: 1 [2]   Go Down
Author Topic: arduino segnala errori senza senso, forse  (Read 1647 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Edison Member
*
Karma: 28
Posts: 2031
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

"Due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi..." Albert Einstein

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 134
Posts: 9649
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 269
Posts: 21839
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
 
Logged

Gaiarine
Offline Offline
Newbie
*
Karma: 1
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: October 15, 2012, 09:04:05 am by andre98 » Logged

Offline Offline
Edison Member
*
Karma: 28
Posts: 2031
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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  smiley-wink 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-wink smiley-mr-green
« Last Edit: October 15, 2012, 09:48:13 am by Madwriter » Logged

"Due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi..." Albert Einstein

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 114
Posts: 7179
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Basta basta... torniamo al programma..

Code:
#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à.
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 269
Posts: 21839
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Gaiarine
Offline Offline
Newbie
*
Karma: 1
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Code:
#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
Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 114
Posts: 7179
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Prova così
Code:
#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.  smiley-grin smiley-mr-green
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Pages: 1 [2]   Go Up
Jump to: