Fotoresistenza e led

Buongiorno a tutti, sono nuovo qui sul forum, chiedo scusa in anticipo per la banalità della domanda e la poca esperienza.
Sto realizzando una piccola casetta domotica, che, per ora, dovrà simulare le luci di casa e in funazione alla quantità di luce che c'è fuori regolarle.
Conosco le basi di Arduino, dunque, per ora, sono riuscito a fare in modo che, i led si accendano quando la fotoresistenza riceve luminosità, ma non viceversa.
Ovvero, sono riuscito a farlo con due condizioni if, ma è troppo banale, nel senso che le luci erano spente quando avevo valori della fotoresistenza sopra i 150 e accese quando erano sotto i 150.
Sostanzialmente quanto fuori c'è il sole le luci dovranno essere spente quando c'è poco sole dovranno essere poco luminose e quando c'è nuvoloso dovranno essere accese.
Per ora, mi accontento di farlo con un led, e una fotoresistenza, ma, in futuro, vorrei farlo con 4 fotoresistenze e quattro led.
Qualcuno, sarebbe così gentile, da postarmi uno sketch dal quale prendere esempio? e magari, spiegarmi anche le parti più complesse?
Grazie mille, spero di essere stato chiaro.

Ciao,
essendo il tuo primo post, ti chiederei di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto :wink:) e di leggere con attenzione il REGOLAMENTO ... Grazie.

Guglielmo

ciao

per poter regolare la luminosità di un led si deve comandare in PWM tramite il comando AnalogWrite.
Per adattare il valore in ingresso alle tue esigenze puoi usare la funzione Map.

ciao
pippo72

pippo72:
per poter regolare la luminosità di un led si deve comandare in PWM tramite il comando DigitalWrite.

... attento, NON digitalWrite(), ma il PWM lo controlli con analogWrite() !!!

Guglielmo

gpb01:
Ciao,
essendo il tuo primo post, ti chiederei di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto :wink:) e di leggere con attenzione il REGOLAMENTO ... Grazie.

Guglielmo

Ciao e grazie, chiedo scusa se non mi sono presentato, non trovavo la sezione presentazioni :D.

gpb01:
... attento, NON digitalWrite(), ma il PWM lo controlli con analogWrite() !!!

Guglielmo

Inanzitutto grazie ad entrambi, forse non mi sono spiegato bene.
Il mio problema per ora è che non

pippo72:
ciao

per poter regolare la luminosità di un led si deve comandare in PWM tramite il comando DigitalWrite.
Per adattare il valore in ingresso alle tue esigenze puoi usare la funzione Map.

ciao
pippo72

Inanzitutto grazie al entrambi, forse non mi sono speigato bene.
Conosco le funzioni analogiche, il mio problema è che con un ciclo if il codice si allungherebbe parecchio, ovvero, dovrei dire che,per esempio, ogni volte che il valore della foto si alza di 30 l'output analogico del led scende di 20.
Inoltre per quanto riguarda il ciclo if non riesco a fare in modo che esso sia valido solo tra 100 e 200, per esempio, e non sotto 200 o sotto 300...
io ho provato così:

int led = 3;
int fotoresistenza;
int foto = A0;
void setup()
{
pinMode(foto,INPUT);
pinMode(3,OUTPUT);
Serial.begin(9600);
}

void loop()
{
fotoresistenza = analogRead(foto);
Serial.println(fotoresistenza);

if (fotoresistenza>300){
analogWrite(led,0);}
else if (fotoresistenza>200){
analogWrite(led,100);}
else if (fotoresistenza<50){
analogWrite(led,255);}

}

Per la funzione map non sono sicuro di aver capito bene, da ciò che ho capito, posso dire a Arduino che i valori della fotoresistenza, che sono da 0 a 1023, si salveranno nella variabile da 0 a 255, ovvero come un analogico.
Così facendo però quando la fotoresistenza riceve luminosità il led si accende e viceversa, a me serve il contrario, se lo mappassi così otterrei ciò che voglio ?

val = map(val, 0, 1023, 255, 0;

Grazie mille, mi scuso per la poca esperienza.

Non conosco bene come funziona la map(), peró puoi fare la stessa cosa con
255 - valore
Cosí inverti la logica

ciao

pippo72:
... deve comandare in PWM tramite il comando DigitalWrite.

Accidenti... ho scritto una ca__ata! :frowning:

Per quanto riguarda la funzione map:

A=map(B,0,1023,0,255)

se B varia da 0 a 1023 A varia proporzionalmente da 0 a 255

A=map(B,0,1023,255,0)

B varia sempre da 0 a 1023 mentre A questa volta varia proporzionalmente da 255 a 0.

ciao
pippo72