Simulazione 7 segment

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:

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)

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.

7_segment_display_labeled.svg.png

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

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

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

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)

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);
}

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