Il progetto iniziale prevedeva di "leggere" la quantità di luce presente con un fotoresistore e in base alla quantità di luce accendere un numero prestabilito di led.
Ho collegato i 4 led con le relative resistenza come input e poi ho collegato il fotoresistore a +5v e all'input analogico a0 e a massa.
Fino a qui nessun problema e lo sketch funzionava perfettamente.
Allora ho deciso di aggiungere un pulsante per decidere o meno l'attivazione dei led, tipo acceso-spento, sempre passando poi dal fotoresistore. Il pulsante l'ho collegato ad un input,e sempre a +5v e a massa mettendolo in serie con il fotoresistore.
E anche qui nessun problema.Lo sketch funzionava perfettamente.
Ho deciso poi di aggiungere un display led a 7 segmenti per visualizzare sul display il numero di led accesi.
Ho collegato il display a 3.3v e i suoi piedini come input per accendere ogni singolo led.
Qui sorge il mio grosso problema.
Per verificare sempre il corretto funzionamento ho sempre scritto sulla seriale il valore ricevuto in ingresso tramite analogRead dal fotoresistore.
Solo che collegando il display all'arduino i valori ricevuti sono completamente sballati e non funziona più.
Mi basta scollegare l'alimentazione del display per far tornare tutto normale.
Come posso risolvere il problema?
#define LED1 5
#define LED2 4
#define LED3 3
#define LED4 2
#define A 6
#define B 8
#define C 9
#define D 10
#define E 11
#define F 12
#define G 13
#define SENSOR 0
#define BUTTON 7
int val_button=0;
int val_button_old=0;
int val=0;
int flag=0;
int state=0;
void setup()
{
pinMode(LED1,OUTPUT);
pinMode(LED2,OUTPUT);
pinMode(LED3,OUTPUT);
pinMode(LED4,OUTPUT);
pinMode(A,OUTPUT);
pinMode(B,OUTPUT);
pinMode(C,OUTPUT);
pinMode(D,OUTPUT);
pinMode(E,OUTPUT);
pinMode(F,OUTPUT);
pinMode(G,OUTPUT);
pinMode(BUTTON,INPUT);
Serial.begin(9600);
}
void loop()
{
val=analogRead(SENSOR);
val_button=digitalRead(BUTTON);
if((val_button==HIGH)&&(val_button_old==LOW))
{
state=1-state;
delay(150);
}
if(state==1)
{ if(val<200)
flag=4;
else
if(val<400)
flag=3;
else
if(val<650)
flag=2;
else
if(val<900)
flag=1;
else
flag=0;
switch(flag)
{
case 4: digitalWrite(LED4,HIGH);
case 3: digitalWrite(LED3,HIGH);
case 2: digitalWrite(LED2,HIGH);
case 1: digitalWrite(LED1,HIGH);
}
switch(flag)
{
case 0: digitalWrite(A,LOW);
digitalWrite(B,LOW);
digitalWrite(C,LOW);
digitalWrite(D,LOW);
digitalWrite(E,LOW);
digitalWrite(F,LOW);
break;
case 1:
digitalWrite(C,LOW);
digitalWrite(D,LOW);
break;
case 2:
digitalWrite(A,LOW);
digitalWrite(B,LOW);
digitalWrite(D,LOW);
digitalWrite(E,LOW);
digitalWrite(G,LOW);
break;
case 3:
digitalWrite(A,LOW);
digitalWrite(B,LOW);
digitalWrite(C,LOW);
digitalWrite(D,LOW);
digitalWrite(G,LOW);
break;
case 4:
digitalWrite(F,LOW);
digitalWrite(G,LOW);
digitalWrite(C,LOW);
}
Serial.println(val);
delay(10);
digitalWrite(LED1,LOW);
digitalWrite(LED2,LOW);
digitalWrite(LED3,LOW);
digitalWrite(LED4,LOW);
digitalWrite(A,HIGH);
digitalWrite(B,HIGH);
digitalWrite(C,HIGH);
digitalWrite(D,HIGH);
digitalWrite(E,HIGH);
digitalWrite(F,HIGH);
digitalWrite(G,HIGH);
}
else
{
Serial.println("Premi il pulsante");
digitalWrite(A,LOW);
digitalWrite(B,LOW);
digitalWrite(C,LOW);
digitalWrite(D,LOW);
digitalWrite(E,LOW);
digitalWrite(F,LOW);
digitalWrite(G,HIGH);
}
val_button_old=val_button;
//delay(500);
}