Go Down

Topic: Simulazione 7 segment (Read 392 times) previous topic - next topic

gpsd

Vorrei simulare con 7 led il display a 7 segmenti, aiutatemi a finire il codice e amodificarlo se c'è ne bisogno(sicuramente :))
il codice è il seguente:
Code: [Select]

int top = 13;
int topl= 12;
int topr = 11;
int cent = 10;
int lowl = 9;
int lowr = 8;
int low = 7;

int num_1[] = {1, 0, 0, 1, 0, 0, 1};
void setup()
{
  pinMode(top, OUTPUT);
  pinMode(topl, OUTPUT);
  pinMode(topr, OUTPUT);
  pinMode(cent, OUTPUT);
  pinMode(lowl, OUTPUT);
  pinMode(lowr, OUTPUT);
  pinMode(low, OUTPUT);
 
}

void loop()
{
  digitalWrite(num_1[], HIGH);
}


top equivale al led più alto
topl equivale al led alto a sinistra
topr equivale al led alto a destra
cent equivale al led centrale
lowl equivale al led basso a sinistra
lowr equivale al led basso a destra
low equivale al led piu basso

num_1 crea il numero 1 utilizzando solo i led centrali
num_2 crea il numero 2 utilizzando il led più alto quello alto-destra quello centrale quello in basso a sinistra e quello più in basso...
...e così via...

_    -->led piu alto  (top)
|_|  -->led alto sinistra, centrale, alto a destra (topl , center , topr)
|_|  -->led basso sinistra, basso, basso destra (lowl , lowr , low)

spero che sia esauriente, grazie anticipatamente... 8)

leo72

Ti consiglio di adeguarti alla disposizione tradizionale dei segmenti in un display, altrimenti poi ti potresti incasinare se volessi convertire del codice scritto per un vero display a 7 segmenti.

Il primo led è quello in alto (A), a seguire non c'è quello in alto a sinistra ma quello in alto a destra, e così via. Attento anche al consumo: ricordati che da ogni porta non possono uscire più di un centinaio di mA, se fai scorrere troppa corrente potresti danneggiare l'Arduino. Siccome stai usando 6 pin della porta B (da D13 a D8), potresti avere problemi.

gpsd

si è solo una mia convenzione, ma si puo cambiare facilmente, sto cercando qualcuno che mi aiuti a finire il codice!!!

leo72

I segmenti sono 7, puoi benissimo memorizzarli in una variabile di tipo byte sotto forma di singoli bit. La posizione del bit nel byte corrisponde così al segmento/led da accendere: 1° bit (posizione 0)=1° led, ecc..
Lo stato di acceso/spento corrisponde quindi al valore del bit: 1=acceso, 0=spento.

Per gestire i bit puoi usare le funzioni di Arduino che manipolano i singoli bit:
http://arduino.cc/en/Reference/Bit

pablos

Magari è superfluo dirtelo, ma lo sai che un display a 1 o più cifre lo puoi gestire con 4 pin (invece di 7) + n display con i driver BCD serie SN o 40
ciao
no comment

gpsd

Ecco il codice finito: (ci sono pure le convenzioni che mi avete consigliato nel forum) ho messo pure la possibilità di un punto che un vero schermo!!!  8) 8) 8)
Code: [Select]

byte seven_seg_digits[10][7] = {
//Arduino pin: 2,3,4,5,6,7,8
             { 1,1,1,1,1,1,0 },  // = 0
             { 0,1,1,0,0,0,0 },  // = 1
             { 1,1,0,1,1,0,1 },  // = 2
             { 1,1,1,1,0,0,1 },  // = 3
             { 0,1,1,0,0,1,1 },  // = 4
             { 1,0,1,1,0,1,1 },  // = 5
             { 1,0,1,1,1,1,1 },  // = 6
             { 1,1,1,0,0,0,0 },  // = 7
             { 1,1,1,1,1,1,1 },  // = 8
             { 1,1,1,0,0,1,1 }   // = 9
                               };

void setup() {               
  pinMode(2, OUTPUT);   
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  writeDot(0);  // start with the "dot" off
}

void writeDot(byte dot) {
  digitalWrite(9, dot);
}
   
void sevenSegWrite(byte digit) {
  byte pin = 2;
  for (byte segCount = 0; segCount < 7; ++segCount) {
    digitalWrite(pin, seven_seg_digits[digit][segCount]);
    ++pin;
  }
}

void loop() {
  for (byte count = 10; count > 0; --count) {
   delay(1000);
   sevenSegWrite(count - 1);
  }
  delay(5000);
}

gingardu


il vero "problema"   dei display a 7 segmenti non e farli accendere ma il "protocollo"    per farli accendere

es se ho un ternometro che butta FUORI 25,7 GRADI     e tenemdo a mente che puo segnare da -10 a piu 40
far visualizzare quel numero in automatico diventa un impresa
ho provato con numeri interi e numeri negativi fino a 7-9 cifre  sembra che ci sono riusciuto

invece con numeri a virgola mobile per il momento ho abbandonato

ci sono tanti particolari da risolvere es se un numero occupa 2 cifre e hai 8 display devi spegnere in automatico   i display che non usi   etc
Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...

Go Up