Starter kit

Salve a tutti
Sono nuovo di arduino e per imparare ad usarlo e conoscerlo meglio ho acquistato lo starter kit.
Sono al secondo progettino del libro e già le prime difficoltà, non per la parte elettronica ma per quella del codice.
Ho scritto tutto per bene il listato del programmino che c'è sul libro ma quando vado a verificare mi dà sempre un errore che non riesco a risolvere.
Quello sotto è come l'hò scritto io, vorrei sapere da voi dove sbaglio visto che mi dice che

;In function 'void loop()':
9:error: 'switcState' wasnot declared in this scope'
24.error:expected ')' before ';' token
 int switchstate=0;
 void setup() {
 pinMode(3,OUTPUT);
 pinMode(4,OUTPUT); 
 pinMode(5,OUTPUT);
 pinMode(2,INPUT);
 }
 void loop (){
    switchState = digitalRead (2);
// questo è un commento
if (switchState == LOW) {
// il pulsante non è premuto
digitalWrite(3,HIGH); // LED verde
digitalWrite(4,LOW); // LED rosso
digitalWrite(5,LOW); // LED rosso
}
else { // il pulsante è premuto
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,HIGH);
delay(250); //aspetta un quarto di secondo
// cambia gli stati dei led
digitalWrite(4,HIGH);
digitalWrite(5,LOW;
delay(250); // aspetta un quarto di secondo
}
} // torna indietro all'inizio del loop

Grazie a tutti

Ciao,
prima di tutto cortesemente, riedita il tuo post e, come da Regolamento, punto 7, racchiudilo tra i TAG "code".

Poi ... in C le maiuscole e le minuscole sono significative ...

... tu hai dichiarato la variabile come :

 int switchstate=0;

ma poi, nel loop(), cerchi di usarla con il nome :

switchState = digitalRead (2);

... e ... quella S maiuscola ... è diversa dalla s minuscola con cui l'avevi dichiarata ! :slight_smile:

Guglielmo

l'altro errore, invece, è la mancanza della ) in:

digitalWrite(5,LOW;

che ovviamente dovrebbe essere:

digitalWrite(5,LOW);

se leggi i messaggi di errore, hai anche indicazioni su cosa fare.

Quando ti dice che una variabile

 ... ... ... ... not declared in this scope

vuol dire che non hai dichiarato la variabile, o come in questo caso hai scritto in modo diverso la variabile rispetto alla dichiarazione, o che la dichiarazione della variabile non è visibile da quella sezione di codice (differenza fra variabili globali e variabili locali).

Grazie mille, vi prego abbiate passienza... :slight_smile:

Non ti demoralizzare io ho iniziato un anno fa da zero proprio con lo starter kit, sai quante ore perse per cose come queste!!!!!!

E quante altre ne perderai per dei classici errori... quando inizierai a scrivere i tuoi programmi...

come:

  • dimenticare un ;

  • scrivere if (a=1) invece di if(a==1)

  • dimenticare di mettere il pinmode e chiedersi come mai il LED non si accende...

Non c'è niente di strano, ci siamo passati un po' tutti.

Ho un problema analogo,sto facendo gli esperimenti dello starter kit e sono arrivato allo 07 tastiera musicale,ho copiato lo sketch,controllando molte volte se avevo sbagliato qualcosa ma non ho trovato niente di anomalo ma il software mi da questo errore:

Arduino:1.6.3 (Mac OS X), Scheda:“Arduino Uno”

Opzioni di compilazione cambiate, ricompilo tutto
Tastiera_Musicale.ino:2:15: error: conflicting declaration 'int buttons [ 0 ] ’
Tastiera_Musicale.ino:1:5: error: ‘buttons’ has a previous declaration as 'int buttons [ 6 ] ’
Errore durante la compilazione

Ecco quello che ho scritto io:

int buttons [6];
int buttons [ 0 ] = {2};
int notes[] = {262,294,330,349};

void setup() {
  Serial.begin(9600);
}

void loop() {
  int keyVal=analogRead(A0);
  Serial.println(keyVal);
  
  if(keyVal==1023){
    tone(8,notes[0]);
  }
  else if(keyVal>=990&&keyVal<=1010){
    tone(8,notes[1]);
  }
  else if(keyVal>=505&&keyVal<=515){
    tone(8,notes[2]);
  }
  else if(keyVal>=5&&keyVal<=10){
    tone(8,notes[3]);
  }
  else{
    noTone( 8 );
  }
}

Scusate il disturbo ma non riesco proprio a venirne a capo.
Diego

O sul libro c'e' un errore oppure hai copiato male.
Questo non ha senso:

int buttons [6];
int buttons [ 0 ] = {2};

non puoi dichiarare 2 volte la stessa variabile.

La seconda riga ha un ulteriore errore, dichiari un vettore/array di 0 elementi, ma gli passi 1 elemento.
Un vettore di 0 elementi non ha senso. Verifica quella seconda riga.

E' quello che ho pensato io,ma è proprio scritto così!
Quindi secondo te cosa dovrei fare?
Tolgo la seconda riga?
O devo modificarla?

Ho tolto la seconda riga e sembra funzionare,ma secondo Voi perché hanno messo quella riga sul libro?
Come posso segnalare che c'è un errore sul libro a tutti gli altri?

Puoi togliere anche la prima riga... "int buttons" non è usato in quello sketch...

Perché le hanno inserite allora?Non capisco proprio,scusatemi del disturbo!

Non abbiamo facoltá telepatiche o sfere di cristallo.

Non so dirti perché hanno fatto un errore. Sfiga, toppo poca attenzione, disorganizzati, si sono fidati di uno che doveva controllare e non l’ ha fatto, fatto i controlli e poi stampato la versione non corretta ecc

Ciao Uwe

Comunque, senza nulla togliere al fatto che il copia e incolla non serve a niente ( ma anche copiare da un libro è la stessa cosa ), vi ricordo che negli examples dell'IDE ci sono già gli sketch dello starter kit

Brunello:
Comunque, senza nulla togliere al fatto che il copia e incolla non serve a niente ( ma anche copiare da un libro è la stessa cosa ), vi ricordo che negli examples dell'IDE ci sono già gli sketch dello starter kit

Azz, vero, non ci avevo fatto caso. L'ultimo dei vari example ha tutti i progetti del kit numerati

Jackal1977:
Ho tolto la seconda riga e sembra funzionare,ma secondo Voi perché hanno messo quella riga sul libro?
Come posso segnalare che c'è un errore sul libro a tutti gli altri?

Non c'è nessun errore! È solo un'introduzione agli array. Le due righe...

int buttons [6];
int buttons [ 0 ] = {2};

...Puoi anche non inserirle e lo sketch funziona lo stesso! :smiley:

nid69ita:

int buttons [6];

int buttons [ 0 ] = {2};



non puoi dichiarare 2 volte la stessa variabile.

La seconda riga ha un ulteriore errore, dichiari un vettore/array di 0 elementi, ma gli passi 1 elemento.
Un vettore di 0 elementi non ha senso. Verifica quella seconda riga.

Quello non è un vettore di 0 elementi. La seconda riga assegna alla posizione 1 (gli elementi degli array partono da 0!) dell'array buttons il numero 2.

serpico:
Quello non è un vettore di 0 elementi. La seconda riga assegna alla posizione 1 (gli elementi degli array partono da 0!) dell'array buttons il numero 2.

@Serpico, invece è proprio un errore, anzi due.
Se c'e' davanti int è una dichiarazione e quindi quello tra parentesi quadre è la dichiarazione della dimensione.
E' corretta l'assegnazione se lo spezzi in due:

int  buttons[10];
...
buttons[0]=2;

Inoltre il 2 tra graffe non serve a nulla nell'assegnazione. Vale solo per elencare gli elementi in fase di dichiarazione del vettore:

int buttons[]={4,2,3,5};  // 4 elementi da 0 a 3 come indice

nid69ita:
@Serpico, invece è proprio un errore, anzi due.
Se c'e' davanti int è una dichiarazione e quindi quello tra parentesi quadre è la dichiarazione della dimensione.
E' corretta l'assegnazione se lo spezzi in due:

int  buttons[10];

...
buttons[0]=2;




Inoltre il 2 tra graffe non serve a nulla nell'assegnazione. Vale solo per elencare gli elementi in fase di dichiarazione del vettore:


int buttons={4,2,3,5};  // 4 elementi da 0 a 3 come indice

Si. Hai ragione. Sono 2 esempi diversi! pensavo fosse sottinteso dato che è un introduzione alla programmazione... Il topic è "starterkit". Pardon!