allora, sotto c'e' il codice, spiego lo schema del circuito
4 display 7 segmanti con gnd in comune
tutti collegati in parallelo (i segmenti) con una resistenza da 1k per segmento (fa poca luce ma basta)
ogni display viene acceso singolarmente mandando a massa il gnd del display indicato
su analogread 0 leggo una tensione che converto in 0 / 9999 e vorrei visualizzare il numero ottenuto
tutto funzionava con 2 digit, ho allargato a 4 digit e non funziona piu' bene, ci son caratteri senza senso o accesi parzialmente
mi controllate il codice? io ormai non ci capisco + nulla, mi sembra giusto ma e' instabile nella visualizzazione, serve una correzzione professionale ![]()
/*
digit 1 digit 2 digit 3 digit 4
1=LOW 1=HIGH 1=HIGH 1=HIGH
2=HIGH 2=LOW 2=HIGH 2=HIGH
3=HIGH 3=HIGH 3=LOW 3=HIGH
4=HIGH 4=HIGH 4=HIGH 4=LOW
Pin 10
_______
| |
Pin 11 | | Pin 9
|_______|
| 12 |
Pin 8 | | Pin 6
|_______|
Pin 7 # punto pin 5
*/
int i=0;
unsigned int digit1;
unsigned int digit2;
unsigned int digit3;
unsigned int digit4;
unsigned int numero;
void setup() {
pinMode(1, OUTPUT); //gnd display 1
pinMode(2, OUTPUT); //gnd display 2
pinMode(3, OUTPUT); //gnd display 3
pinMode(4, OUTPUT); //gnd display 4
pinMode(5, OUTPUT); //led punto decimale
pinMode(6, OUTPUT); //led segmento
pinMode(7, OUTPUT); //led segmento
pinMode(8, OUTPUT); //led segmento
pinMode(9, OUTPUT); //led segmento
pinMode(10, OUTPUT); //led segmento
pinMode(11, OUTPUT); //led segmento
pinMode(12, OUTPUT); //led segmento
}
void loop()
{
unsigned int numero = analogRead(0); //leggo analog read pot da 10k tra gnd e +5v
numero = map(numero, 0, 1023, 0, 9999); //cosi' ho un numero tra 0 e 9999
//gnd dei display sono 1, 2, 3, e 4
// 1 LOW = primo numero
// 2 LOW = secondo numero
// 3 LOW = terzo numero
// 4 LOW = quardto numero
//qui c'e' casino, deve darmi le cifre, sembra giusto...
digit1 = (numero/1000); //deve essere la cifra delle migliaia
digit2 = ((numero - (digit1 * 1000))/100); //deve essere la cifra delle centinaia
digit3 = (((numero - (digit1 * 1000)) - (digit2 * 100))/10); //deve essere le decine
digit4 = (((numero - (digit1 * 1000)) - (digit2 * 100)) - (digit3 * 10)); //deve essere le unita'
//numero 1 acceso
digitalWrite(1,LOW);
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
letterfunction(digit1);
//numero 2 acceso
digitalWrite(1,HIGH);
digitalWrite(2,LOW);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
letterfunction(digit2);
//numero 3 acceso
digitalWrite(1,HIGH);
digitalWrite(2,HIGH);
digitalWrite(3,LOW);
digitalWrite(4,HIGH);
letterfunction(digit3);
//numero 4 acceso
digitalWrite(1,HIGH);
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,LOW);
letterfunction(digit4);
}
void letterfunction(unsigned char var){
if (var==1){
digitalWrite(9,HIGH); //qui scrivo 1 sul display
digitalWrite(6,HIGH);
delay(5);
for(i=1;i<12;i++){
digitalWrite(i,LOW);
}
}
if (var==2){
digitalWrite(10,HIGH); //qui scrivo 2 sul display
digitalWrite(9,HIGH);
digitalWrite(12,HIGH);
digitalWrite(8,HIGH);
digitalWrite(7,HIGH);
delay(5);
for(i=1;i<12;i++){
digitalWrite(i,LOW);
}
}
if (var==3){
digitalWrite(10,HIGH);
digitalWrite(9,HIGH);
digitalWrite(12,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
delay(5);
for(i=1;i<12;i++){
digitalWrite(i,LOW);
}
}
if (var==4){
digitalWrite(11,HIGH);
digitalWrite(9,HIGH);
digitalWrite(12,HIGH);
digitalWrite(6,HIGH);
delay(5);
for(i=1;i<12;i++){
digitalWrite(i,LOW);
}
}
if (var==5){
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
digitalWrite(12,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
delay(5);
for(i=1;i<12;i++){
digitalWrite(i,LOW);
}
}
if (var==6){
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
digitalWrite(12,HIGH);
digitalWrite(8,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
delay(5);
for(i=1;i<12;i++){
digitalWrite(i,LOW);
}
if (var==7){
digitalWrite(10,HIGH);
digitalWrite(9,HIGH);
digitalWrite(6,HIGH);
delay(5);
for(i=1;i<12;i++){
digitalWrite(i,LOW);
}
}
if (var==8){
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
digitalWrite(9,HIGH);
digitalWrite(12,HIGH);
digitalWrite(8,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
delay(5);
for(i=1;i<12;i++){
digitalWrite(i,LOW);
}
}
if (var==9){
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
digitalWrite(9,HIGH);
digitalWrite(12,HIGH);
digitalWrite(6,HIGH);
delay(5);
for(i=1;i<12;i++){
digitalWrite(i,LOW);
}
}
if (var==0){
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
digitalWrite(9,HIGH);
digitalWrite(8,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
delay(5);
for(i=1;i<12;i++){
digitalWrite(i,LOW);
}
}
}
}