Go Down

Topic: [RISOLTO] Display 7 Segmenti + potenziometro + motore 3V (Read 601 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

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