Go Down

Topic: [RISOLTO] Display 7 Segmenti + potenziometro + motore 3V (Read 668 times) previous topic - next topic

gabm88

Nov 28, 2012, 06:02 pm Last Edit: Nov 28, 2012, 08:57 pm by gabm88 Reason: 1
Ciao ragazzi, questo è il mio primo thread! Premetto che sono alle prime armi sia di programmazione che di elettronica.
Ho acquistato da meno di un mese Arduino UNO rev3 e mi sto dilettando nei primi "esperimenti".

Tramite tutorial ho fatto il classico progetto del motore che varia velocità tramite potenziometro. Successivamente ho provato a collegare un display a 7 segmenti ad anodo positivo (Quindi con il positivo comune), che mostri la velocità del motore da 0 a 9. Dopo varie prove e qualche display bruciato (??!) sono riuscito nell'impresa, ma c'è una cosa che non capisco. Perchè il display, a Slider sullo "0", non mi visualizza 0? Ecco il codice, sicuramente pieno di errori...


int G=2;
int F=3;
int A=4;
int B=5;
int DP=6;
int C=7;
int D=8;
int E=9;
int Val_PWM = 0; //Valore per PWM (0-255)
int Val_Slider = 0;  //Valore Slider
const int SLIDER = A1;    //Slider 5 kohm
const int MOTORE =  11;  //Motore


void setup(){
 Serial.begin(9600);  
 Serial.println("system startup");
 pinMode(SLIDER, INPUT);  //Impostazione PIN come ingresso
 pinMode(MOTORE, OUTPUT);  //Impostazione PIN come uscita
 pinMode(G, OUTPUT);
 pinMode(F, OUTPUT);
 pinMode(A, OUTPUT);
 pinMode(B, OUTPUT);
 pinMode(E, OUTPUT);
 pinMode(D, OUTPUT);
 pinMode(C, OUTPUT);
 pinMode(DP, OUTPUT);
}

void zero(){
 digitalWrite(G, HIGH);
 digitalWrite(F, LOW);
 digitalWrite(A, LOW);
 digitalWrite(B, LOW);
 digitalWrite(E, LOW);
 digitalWrite(D, LOW);
 digitalWrite(C, LOW);
 digitalWrite(DP, HIGH);
}
void uno(){
 digitalWrite(G, HIGH);
 digitalWrite(F, HIGH);
 digitalWrite(A, HIGH);
 digitalWrite(B, LOW);
 digitalWrite(E, HIGH);
 digitalWrite(D, HIGH);
 digitalWrite(C, LOW);
 digitalWrite(DP, HIGH);
}
void due(){
 digitalWrite(G, LOW);
 digitalWrite(F, HIGH);
 digitalWrite(A, LOW);
 digitalWrite(B, LOW);
 digitalWrite(E, LOW);
 digitalWrite(D, LOW);
 digitalWrite(C, HIGH);
 digitalWrite(DP, HIGH);
}
void tre(){
 digitalWrite(G, LOW);
 digitalWrite(F, HIGH);
 digitalWrite(A, LOW);
 digitalWrite(B, LOW);
 digitalWrite(E, HIGH);
 digitalWrite(D, LOW);
 digitalWrite(C, LOW);
 digitalWrite(DP, HIGH);
}
void quattro(){
 digitalWrite(G, LOW);
 digitalWrite(F, LOW);
 digitalWrite(A, HIGH);
 digitalWrite(B, LOW);
 digitalWrite(E, HIGH);
 digitalWrite(D, HIGH);
 digitalWrite(C, LOW);
 digitalWrite(DP, HIGH);
}
void cinque(){
 digitalWrite(G, LOW);
 digitalWrite(F, LOW);
 digitalWrite(A, LOW);
 digitalWrite(B, HIGH);
 digitalWrite(E, HIGH);
 digitalWrite(D, LOW);
 digitalWrite(C, LOW);
 digitalWrite(DP, HIGH);
}
void six(){
 digitalWrite(G, LOW);
 digitalWrite(F, LOW);
 digitalWrite(A, LOW);
 digitalWrite(B, HIGH);
 digitalWrite(E, LOW);
 digitalWrite(D, LOW);
 digitalWrite(C, LOW);
 digitalWrite(DP, HIGH);
}
void sette(){
 digitalWrite(G, HIGH);
 digitalWrite(F, HIGH);
 digitalWrite(A, LOW);
 digitalWrite(B, LOW);
 digitalWrite(E, HIGH);
 digitalWrite(D, HIGH);
 digitalWrite(C, LOW);
 digitalWrite(DP, HIGH);
}
void otto(){
 digitalWrite(G, LOW);
 digitalWrite(F, LOW);
 digitalWrite(A, LOW);
 digitalWrite(B, LOW);
 digitalWrite(E, LOW);
 digitalWrite(D, LOW);
 digitalWrite(C, LOW);
 digitalWrite(DP, HIGH);
}
void nove(){  
 digitalWrite(G, LOW);
 digitalWrite(F, LOW);
 digitalWrite(A,LOW);
 digitalWrite(B, LOW);
 digitalWrite(E, HIGH);
 digitalWrite(D, LOW);
 digitalWrite(C, LOW);
 digitalWrite(DP, HIGH);
}

void loop(){
 Val_Slider = analogRead(SLIDER);  //Lettura valore Slider
 Serial.print("Valore Slider: ");
 Serial.println(Val_Slider, DEC);
 Serial.print("Valore PWM: ");
 Serial.println(Val_PWM, DEC);  
 Val_PWM = Val_Slider;
 Val_PWM = Val_PWM / 4;  //L'analogico lavora fino a 1024, ovvero 4 volte in più del PWM, quindi adatto i valori
 analogWrite(MOTORE, Val_PWM);  //Imposto velocità
 delay(100);  //Attesa
 if (Val_Slider >= 1 && Val_Slider <= 113){
 uno();}
 if (Val_Slider >= 114 && Val_Slider <= 227){
 due();}
 if (Val_Slider >= 228 && Val_Slider <= 341){
   tre();}
 if (Val_Slider >= 342 && Val_Slider <= 454){
   quattro();}
 if (Val_Slider >= 455 && Val_Slider <= 568){
  cinque();}
 if (Val_Slider >= 569 && Val_Slider <= 682){
   six();}
 if (Val_Slider >= 683 && Val_Slider <= 795){
   sette();}
 if (Val_Slider >= 796 && Val_Slider <= 909){
   otto();}
 if (Val_Slider >= 910 && Val_Slider <= 1024){
   nove();}
 if (Val_Slider = 0){
   zero();}
 }

Brunello

if (Val_Slider = 0){
    zero();}

non è un' uguaglianza, quella è un'assegnazione
"C' è chi legge Guerra & Pace e non ci capisce un tubo vuoto; c'è chi legge l'etichetta delle patatine fritte e ci trova la spiegazione del mondo" (J.S. S. architetto napoletano)

leo72


if (Val_Slider = 0){
   zero();}

non è un' uguaglianza, quella è un'assegnazione

Stavo per scriverlo io.
Ci vuole il doppio uguale: "=="

gingardu


Ciao ragazzi,
  if (Val_Slider = 0){
    zero();}[/b][/i]
  }


devi mettere  < 1  al posto dell = 0
anzi aggiusterei il tutto che se il valore e al di sotto di 5-6  segna zero  e verificherei che lettura da lo slider tutto chiuso (magari da 11 e non lo sai)

di solito beccare un valore preciso con un analogRead  è impossibile  a meno che non adoperi un potenziometro dieci giri di marca
Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...

gabm88



Ciao ragazzi,
  if (Val_Slider = 0){
    zero();}[/b][/i]
  }


devi mettere  < 1  al posto dell = 0
anzi aggiusterei il tutto che se il valore e al di sotto di 5-6  segna zero  e verificherei che lettura da lo slider tutto chiuso (magari da 11 e non lo sai)

di solito beccare un valore preciso con un analogRead  è impossibile  a meno che non adoperi un potenziometro dieci giri di marca


Ho gia verificato con la porta seriale e quando è chiuso da 0!

Grazie ragazzi! so che il programma non è scritto benissimo (sono proprio imbranato!), comunque grazie a voi ho risolto,
GRAZIE MILLE!  XD  XD  XD

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy