Italia
Offline
Newbie
Karma: 0
Posts: 45
|
 |
« on: December 14, 2012, 02:05:49 pm » |
ho un problema con il codice...vorrei che un led si accendesse quando c'e` luce e che si spegnesse quando non c'e ne e che un'altro led si accendesse quando non c'e` luce e si spegnesse quando c'e` int sensorValue; int sensorLow = 0; int sensorHigh = 1023;
void setup() { pinMode(12, OUTPUT); pinMode(13, OUTPUT); }
void loop() { sensorValue = analogRead(A0); if (sensorValue < 1023 ) { digitalWrite(12, HIGH); digitalWrite(13,LOW); } else digitalWrite(13,HIGH); digitalWrite(12,LOW); } sono un principiante quindi non so` benissimo come fare per impostarle il codice,e se riuscite datemi anche una spiegazione. grazie mille 
|
|
|
|
« Last Edit: December 15, 2012, 05:27:48 am by UweFederer »
|
Logged
|
|
|
|
|
Offline
Sr. Member
Karma: 7
Posts: 293
|
 |
« Reply #1 on: December 14, 2012, 02:27:29 pm » |
1023 è il massimo valore raggiungibile dall'analog read quindi avrai pressochè sempre l'esecuzione del test < 1023... il ramo else ce l'hai solo se metti proprio 5 volt sul pinanalogico... hai fatto un po' di partitore di tensione? prova a mettere 512 anzichè 1023 e coprire la fotoresistenza... occhio anche alle parentesi del else che sono da mettere... void loop() { sensorValue = analogRead(A0); if (sensorValue < 512 ) { digitalWrite(12, HIGH); digitalWrite(13,LOW); } else { digitalWrite(13,HIGH); digitalWrite(12,LOW); } ; //end else } //end loop
|
|
|
|
« Last Edit: December 15, 2012, 05:28:48 am by UweFederer »
|
Logged
|
|
|
|
|
Italia
Offline
Newbie
Karma: 0
Posts: 45
|
 |
« Reply #2 on: December 14, 2012, 02:32:38 pm » |
adesso si accende l'altro led. ma se copro la fotoresistenza cambia niente
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Sr. Member
Karma: 7
Posts: 293
|
 |
« Reply #3 on: December 14, 2012, 02:35:19 pm » |
adesso si accende l'altro led. ma se copro la fotoresistenza cambia niente
bisogna capire quanti volt stai mettendo dentro su questo piedino A0.... che resistenze hai usato? fatto bene il collegamento? hai un tester per vedere quanti volt hai sul piedino a0? 512 corrisponde in teoria a 2.5 volt...
|
|
|
|
|
Logged
|
|
|
|
|
Italia
Offline
Newbie
Karma: 0
Posts: 45
|
 |
« Reply #4 on: December 14, 2012, 02:38:10 pm » |
riesci a vedere il file che ho allegato?
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Sr. Member
Karma: 7
Posts: 293
|
 |
« Reply #5 on: December 14, 2012, 02:46:05 pm » |
riesci a vedere il file che ho allegato?
nisba... però tu basta che mi misuri con l'ohmetro che resistenze hai messo...
|
|
|
|
|
Logged
|
|
|
|
|
Italia
Offline
Newbie
Karma: 0
Posts: 45
|
 |
« Reply #6 on: December 14, 2012, 02:55:25 pm » |
10 kilohm
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Sr. Member
Karma: 7
Posts: 293
|
 |
« Reply #7 on: December 14, 2012, 03:00:46 pm » |
10 kilohm
10K tra a0 e massa? e quanto ti fa la fotoresistenza tra 5v e a0? ... di media...
|
|
|
|
|
Logged
|
|
|
|
|
Italia
Offline
Newbie
Karma: 0
Posts: 45
|
 |
« Reply #8 on: December 14, 2012, 03:04:22 pm » |
si, tra a0 e la ho collegata direttamente alla massa non so quanto faccia la fotoresistenza...
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Sr. Member
Karma: 7
Posts: 293
|
 |
« Reply #9 on: December 14, 2012, 03:28:49 pm » |
si, tra a0 e la ho collegata direttamente alla massa non so quanto faccia la fotoresistenza...
imho 10 k sono un po' troppi perchè la fotoresistenza che ho io è dai 1 ai 4 k... in ogni caso sono andato di zucca e non ti ho dato la soluzione semplice: dopo sensorValue = analogRead scrivi Serial.println (sensorValue); delay(200); ....nel setup void setup(void) { // We'll send debugging information via the Serial monitor Serial.begin(9600); } e poi apri il monitor seriale dell'ide....leggerai i valori in input, copri e scopri la resistenza e vedi come sei.
|
|
|
|
« Last Edit: December 14, 2012, 03:36:10 pm by qsecofr »
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 226
Posts: 17011
Don't know what I do
|
 |
« Reply #10 on: December 14, 2012, 05:07:27 pm » |
@steveborty: qsecofr sta cercando di spiegarti che la situazione in cui da un pin analogico leggi 1023 può capitare solo se hai tarato bene la resistenza accoppiata alla fotoresistenza. In allegato una coppia di schemi di collegamento: sono equivalenti, solo si inverte la logica. Poi questo link: http://it.wikipedia.org/wiki/Partitore_di_tensionecosì capisci il partitore e come calcolare il valore letto dal pin. Infine ti consiglio di fare un po' di sperimentazione spedendo sulla seriale la lettura analogica per capire cos'è che "vede" l'Arduino sul pin analogico.
|
|
|
|
|
Logged
|
|
|
|
|
Italia
Offline
Newbie
Karma: 0
Posts: 45
|
 |
« Reply #11 on: December 15, 2012, 01:04:54 am » |
non trovo l'allegato
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 226
Posts: 17011
Don't know what I do
|
 |
« Reply #12 on: December 15, 2012, 01:19:27 am » |
Non me l'ha preso. Eccolo.
|
|
|
|
|
Logged
|
|
|
|
|
Italia
Offline
Newbie
Karma: 0
Posts: 45
|
 |
« Reply #13 on: December 15, 2012, 06:52:45 am » |
// variable to hold sensor value int sensorValue; // variable to calibrate low value int sensorLow = 0; // variable to calibrate high value int sensorHigh = 1023;
void setup() { Serial.begin(9600); pinMode(12, OUTPUT); pinMode(13, OUTPUT); }
void loop() { //read the input from A0 and store it in a variable sensorValue = analogRead(A0); Serial.print(sensorValue); delay(200);
if (sensorValue < 512 ) { digitalWrite(12, HIGH); digitalWrite(13,LOW); } else digitalWrite(13,HIGH); digitalWrite(12,LOW); } ho messo un po' a posto il codice... il serial.begin serve? quando copro la fotoresistenza la luce (pin 13) si spegne (e fin qua` tutto ok) ma l'altra luce (pin 12) non si accende bene,cioe` si accende pochissimo e lampeggia...ma si vede appena che lampeggia. come mai?
|
|
|
|
« Last Edit: December 15, 2012, 07:02:37 am by UweFederer »
|
Logged
|
|
|
|
|
BZ (I)
Offline
Brattain Member
Karma: 172
Posts: 16143
+39 349 2158303
|
 |
« Reply #14 on: December 15, 2012, 07:10:13 am » |
quando copro la fotoresistenza la luce (pin 13) si spegne (e fin qua` tutto ok) ma l'altra luce (pin 12) non si accende bene, cioe` si accende pochissimo e lampeggia...ma si vede appena che lampeggia. come mai? Ti aveva giá risposto qsecofr: ... occhio anche alle parentesi del else che sono da mettere... void loop() { sensorValue = analogRead(A0); if (sensorValue < 512 ) { digitalWrite(12, HIGH); digitalWrite(13,LOW); } else { digitalWrite(13,HIGH); digitalWrite(12,LOW); } ; //end else } //end loop
Spiegazione dettagliata: if (sensorValue < 512 ) { ... } else digitalWrite(13,HIGH); digitalWrite(12,LOW); Questo pezzo di codice fa eseguire la funzione digitalWrite(13,HIGH); in dipendenza del if - else ma igitalWrite(12,LOW); viene eseguito sempre. Devi aggiungere delle parentesi graffe: if (sensorValue < 512 ) { ... } else { digitalWrite(13,HIGH); digitalWrite(12,LOW); } Il serial.begin() serve per attivare l'nterfaccia seriale con la quale trasmetti i valori letti dal entrata analogica con Serial.print(sensorValue); al PC
|
|
|
|
« Last Edit: December 15, 2012, 07:21:52 am by uwefed »
|
Logged
|
|
|
|
|
|