Problema display 7 segmenti + fotoresistore

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);
 }

Scrivi molto complicato.

vedo alcuni problemi:

  • perché colleghi il display a 3,3V? hai messo resistenze tra display e uscite Arduino?
    collegalo a 5V e metti resistenze da 470 Ohm
  • non capisco come lo hai collegato: "poi ho collegato il fotoresistore a +5v e all'input analogico a0 e a massa." Spiega meglio o mada una foto. Grazie
  • non capisco neanche questo: "Il pulsante l'ho collegato ad un input,e sempre a +5v e a massa mettendolo in serie con il fotoresistore."

Che modello di Arduino hai?

Ciao Uwe

Ho l'arduino uno...ma quando dici di mettere resistenze da 470 ohm intendi ai led del display a 7 segmenti?

Il problema non è quello...il fatto è che lasciando invariato lo sketch ma staccando l'alimentazione che ora ho messo a 5v al display i valori del fotoresistore sono giusti mentre mi basta attaccare all'alimentazione il display che i valori del fotoresistore si sballano...ho anche notato che l'arduino scalda molto

Arduino o il regolatore id arduino ???

Ripeto: hai messo resistenza sul display 7 segmenti???

Ciao Uwe

Ho provato a inserire resistenze da 220 ohm anzichè 470 perchè avevo solo quelle e adesso funziona perfettamente...grazie mille!

Ciao marco_993
congratulazioni!!

Meglio 2 resistenze da 220 in serie per ogni segmento del display, senó la somma della corrente é troppo alta per Arduino.

LED hanno sempre bisogno di qualcosa che limita la corrente perché senó fanno corto.
Questo qualcosa puó essere una resistenza o circuiti predisposti per questo. Per esempio il MAX7219 ( pilota una matrice 8x8 di LED oppure 8 display a 7 segmenti) oppure il TLC5940 (pilota LED con PWM) o alimentatori per LED limitano la correnete e non hanno bisogno di resistenze.
Ciao Uwe