Pages: [1]   Go Down
Author Topic: [RISOLTO] Display 7 Segmenti + potenziometro + motore 3V  (Read 429 times)
0 Members and 1 Guest are viewing this topic.
Roma
Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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();}
  }
« Last Edit: November 28, 2012, 02:57:13 pm by gabm88 » Logged

Tuscany
Offline Offline
Edison Member
*
Karma: 37
Posts: 1478
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

non è un' uguaglianza, quella è un'assegnazione
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21624
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

non è un' uguaglianza, quella è un'assegnazione
Stavo per scriverlo io.
Ci vuole il doppio uguale: "=="
Logged


Offline Offline
God Member
*****
Karma: 8
Posts: 691
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged


Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...

Roma
Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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!  smiley-lol  smiley-lol  smiley-lol
Logged

Pages: [1]   Go Up
Jump to: