Ciao a tutti, sto facendo il progetto 7 del project book dello starter kit... le domande sono scritte nel codice che allego... vi sarei molto grato se riusciste a spiegarmi ciò che sto leggendo, poiché viene spiegato nel project book, ma mi sorgono ancora alcuni dubbi. grazie mille.
/*
Domande:
1. la formazione di un array: ho cercato un po su internet, ma non ho trovato molto...
2. come mai nella prima riga viene dato un valore di 6 (quindi 7 valori, contando lo 0), se io ho solo 4 bottoni?
3. perchè viene dato il valore di 2 al primo bottone (0)?
4. come mai i valoi di keyVal (variabile) vanno da 0 a 1023, se un bottone può essere solo HIGH o LOW?
*/
int buttons[6]; // perchè l'array ha un valore di 6 se io ho solo 4 bottoni?
int buttons[0] = 2; // perchè va ad assegnare questo valore al primo bottone (0)?
int notes[] = {262, 294, 330, 349}; // frenquenze del piezo
void setup() {
Serial.begin(9600);
}
void loop() {
int keyVal = analogRead(A0); // per la variabile leggi il pin A0
Serial.println(keyVal); // scrivi il valore della variabile nel monitor seriale
if(keyVal == 1023){ // se il valore della variabile è 1023...
tone(8, notes[0]); // ... sul pin 8 suona la nta 0 (262Hz)
} else if(keyVal >= 990 && keyVal <= 1010){ // se il valore è compreso tra 990 e 1010...
tone(8, notes[1]); // ... sul pin 8 suona la nota 1 (294Hz)
} else if(keyVal >= 505 && keyVal <= 515){ // se il valore è compreso tra 505 e 515...
tone(8, notes[2]); // ...sul pin 8 suona la nota 2 (330Hz)
} else if(keyVal >= 5 && keyVal <= 10){ // se il valore è compreso tra 5 e 10...
tone(8, notes[3]); // ... sul pin 8 suona la nota 3 (349Hz)
}
else{ // altrimenti se la variabile non ha valore...
noTone(8); // non suonare
}
}
come si può vedere ho scritto tutti i commenti, così da cercare di capire meglio, ma soprattutto le prime due righe del codice non riesco a capirle, ma è tutto scritto nel commento all'inizio del codice. grazie ancora
non ho il "project book" e quindi non so cosa sia spiegato al progetto 7...ad ogni modo:
nel momento in cui crei un array indichi di quanti elementi è fomrato; quindi se trovi:
int buttons[6];
il tuo array sarà "lungo" 6 int che conterai da 0 a 5.
alla seconda riga del tuo codice crei un altro array dello stesso nome e di lunghezza zero...a cui tenti di dare un valore...ma ti compila sto pezzo di codice?
ad ogni modo non usi mai nessuno elementii di quelle array...forse per questo il compilatore evidenzierà solo dei warnings...che forse non vedi per basso livello dettagli compilazione impostati nelle preferenze in merito alla compilazione...verifica.
all'inizio del loop() vai a leggere un ingresso analogico (pin A0) che, tranne qualche scheda, avendo una risoluzione di 10 bit ti ritorna valori da 0 a 1023
immagino che al pin A0 ci siano collegati in parallelo questi pulsanti che hai...ad ogni pulsante è abbinata una resisteza "x" per variare la tensione in uscita dal bottone..e anche che tutti i bottoni siano collegati ai 5 volt dell'alimentazione...giusto?
se è così non ti serve un array di bottoni...che non controlli/usi mai...
Ad un pin Arduino se leggi con digitalRead otterrai 0 o 1, LOW o HIGH.
Se leggi da un "pin analogico" Ax puoi usare analogRead ed ottieni un valore tra 0 e 1023 (Arduino uno) . Se usi digitalRead da un analogico leggi 0 o 1.
Ad un pin digitale puoi collegare un qualcosa tipo un pulsante/interruttore che può essere LOW o HIGH (0 o 5volt)
Un "pin analogico" puoi usarlo come un pin digitale ma puoi anche leggere ad esempio da un potenziometro valori diversi di tensione tra 0 e 5volt convertiti dal Adc interno in valori tra 0 e 1023
Non esistono "pin analogici": sono tutti pin I/O, di cui solo alcuni hanno accesso all'ADC (che è uno e li legge uno per volta). Quindi su tutti puoi usare digitalRead e digitalWrite, ma solo su alcuni puoi usare analogRead.
digitalRead restituisce 0 (LOW) o diverso da 0 (HIGH). È stato fissato HIGH=1, ma non è una regola fissa: altrove (o in futuro...) potrebbe essere 255 o altro.
Le righe relative all'array buttons sono un errore del testo, sono un refuso, non fanno parte del codice del progetto 7, infatti nel resto del programma l'array non viene usato.
Il commento altrimenti se la variabile non ha valore... non è esatto, la variabile ha sempre un valore.