Pages: [1] 2   Go Down
Author Topic: problema con codice  (Read 1148 times)
0 Members and 1 Guest are viewing this topic.
Italia
Offline Offline
Newbie
*
Karma: 0
Posts: 48
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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`

Code:
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   smiley
« Last Edit: December 15, 2012, 05:27:48 am by UweFederer » Logged

Offline Offline
Sr. Member
****
Karma: 8
Posts: 293
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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...
Code:
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 Offline
Newbie
*
Karma: 0
Posts: 48
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

adesso si accende l'altro led. ma se copro la fotoresistenza cambia niente
Logged

Offline Offline
Sr. Member
****
Karma: 8
Posts: 293
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Newbie
*
Karma: 0
Posts: 48
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

riesci a vedere il file che ho allegato?

* Luci con Fotoresistenza.fzz (4.12 KB - downloaded 14 times.)
Logged

Offline Offline
Sr. Member
****
Karma: 8
Posts: 293
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Newbie
*
Karma: 0
Posts: 48
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

10 kilohm
Logged

Offline Offline
Sr. Member
****
Karma: 8
Posts: 293
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

10 kilohm

10K tra a0 e massa?  e quanto ti fa la fotoresistenza tra 5v e a0? ... di media...
Logged

Italia
Offline Offline
Newbie
*
Karma: 0
Posts: 48
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

si, tra a0 e la ho collegata direttamente alla massa
non so quanto faccia la fotoresistenza...
Logged

Offline Offline
Sr. Member
****
Karma: 8
Posts: 293
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 333
Posts: 22973
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

@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_tensione
così 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 Offline
Newbie
*
Karma: 0
Posts: 48
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

non trovo l'allegato
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 333
Posts: 22973
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Non me l'ha preso. Eccolo.



* photores.jpg (8.22 KB, 350x280 - viewed 20 times.)
Logged


Italia
Offline Offline
Newbie
*
Karma: 0
Posts: 48
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
// 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 Offline
Brattain Member
*****
Karma: 271
Posts: 21872
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
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...
Code:
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:
Code:
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:
Code:
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

Pages: [1] 2   Go Up
Jump to: