problema con codice

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 :slight_smile:

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

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

steveborty:
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...

riesci a vedere il file che ho allegato?

Luci con Fotoresistenza.fzz (4.12 KB)

steveborty:
riesci a vedere il file che ho allegato?

nisba... però tu basta che mi misuri con l'ohmetro che resistenze hai messo...

10 kilohm

steveborty:
10 kilohm

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

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

steveborty:
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.

@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:

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.

non trovo l'allegato

Non me l'ha preso. Eccolo.

photores.jpg

// 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?

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:

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

ok,tutto funziona perfettamente adesso! ultima domanda: come mai nel monitor seriale i dati mi vengono visualizzati orizzontalmente e non verticalmente?

grazie mille per le risposte e per la pazienza che avete! XD

steveborty:
ok,tutto funziona perfettamente adesso! ultima domanda: come mai nel monitor seriale i dati mi vengono visualizzati orizzontalmente e non verticalmente?

grazie mille per le risposte e per la pazienza che avete! XD

il serial print non invia il carriage return... non va a capo... usa il println.... che stampa quello che gli dici e poi va a capo riga.

ah, un'altra cosa ma non centra con questo codice...sul software di arduino funziona l'apple script o ha un codice diverso?

cos'é apple script?
Se trovi un compilatore che converte apple script in codice macchina AVR per il ATmega328 allora funziona. :wink: :wink: :wink: :wink:
Ciao Uwe

l'apple script e` il codice che usano i computer apple da quello che ho capito...ma puoi anche aprire uno sketch in cui scrivi un codice da usare sul computer.