Go Down

Topic: Segment Leds (Zahlen) steuern (Read 3 times) previous topic - next topic

vedel26

Ja aber ich verstehe nicht wie man das Steuert mit dem Arduino ich bin ein totaler noob bei diesen LEDs. Ich will das es von zb: 10 auf 0 runter zählt aber ich weiß nicht wie man das Steuern soll^^

ich will das diese LED runter zählt:
http://www.pollin.de/shop/downloads/D120212D.PDF
Ich wuerde so gerne die Welt veraendern, doch Gott gibt mir den Quelltext nicht

Marcus W

Du kannst also schon einmal 7-Segmente ansteuern.
Pack dir jetzt die Beschaltung für jede der Ziffern in ein Feld eines Arrays und dann geh nur noch das Array durch (vorwärts, rückwärts, wie auch immer).


vedel26

ja aber die anderen funktionieren anders. Ich weiß nicht wie man GND steuern soll -.-*
Ich wuerde so gerne die Welt veraendern, doch Gott gibt mir den Quelltext nicht

Marcus W

#13
Apr 21, 2011, 07:05 pm Last Edit: Apr 21, 2011, 07:09 pm by Marcus W Reason: 1
Die einfachste Möglichkeit ist hierbei über einen entsprechenden Treiber-IC zu steuern. z.B. der MAX7219 oder auch der TLC5940... oder du baust dir mit Transistoren eine entsprechende Schaltung auf.

Robdeflop

Hi

Nein, brauchst du nicht ;)
Ich habe einen 4 Stelligen Tacho mit lediglich 2 doppel-7-segment-anzeigen und 2 Widerständen gebaut. Hatten auch gemeinsame Anode, also muss man "nur" die anderen Pins auf Masse setzen.

Code: [Select]
int za[] = {1,2,3,4,5,6,7};
int z0[] = {1,2,3,4,5,6};
int z1[] = {2,3};
int z2[] = {1,2,4,5,7};
int z3[] = {1,2,3,4,7};
int z4[] = {2,3,6,7};
int z5[] = {1,3,4,6,7};
int z6[] = {1,3,4,5,6,7};
int z7[] = {1,2,3};
int z8[] = {1,2,3,4,5,6,7};
int z9[] = {1,2,3,4,6,7};
int zE[] = {1,4,5,6,7};
int zr[] = {5,7};

int anzeige[] = {13,12,11,10};

void Anzeigen(int wert)
{
  if(wert < 1000)
  {
    char buffer[3];
    itoa(wert, buffer, 10);
    zeigean(buffer[0], 0);
    zeigean(buffer[1], 1);
    zeigean(buffer[2], 2);
  }
  else
  {
    zeigean(10, 0);
    zeigean(11, 1);
    zeigean(11, 2);
  }
}

void zeigean(char w, int a)
{
  pinMode(anzeige[a], OUTPUT);
  digitalWrite(anzeige[a], HIGH);
 
  for(int i=0;i<7;i++)
  {                     
    pinMode(za[i]-1, INPUT);
  }
 
  switch(w)
  {
  case '0':
    for(int i = 0; i < 6; i++)
    {
      pinMode(z0[i]-1, OUTPUT);
      delay(2);
    }
    break;
  case '1':
    for(int i = 0; i < 2; i++)
    {
      pinMode(z1[i]-1, OUTPUT);
    }
    break;
  case '2':
    for(int i = 0; i < 5; i++)
    {
      pinMode(z2[i]-1, OUTPUT);
    }
    break;
  case '3':
    for(int i = 0; i < 5; i++)
    {
      pinMode(z3[i]-1, OUTPUT);
    }
    break;
  case '4':
    for(int i = 0; i < 4; i++)
    {
      pinMode(z4[i]-1, OUTPUT);
    }
    break;
  case '5':
    for(int i = 0; i < 5; i++)
    {
      pinMode(z5[i]-1, OUTPUT);
    }
    break;
  case '6':
    for(int i = 0; i < 6; i++)
    {
      pinMode(z6[i]-1, OUTPUT);
    }
    break;
  case '7':
    for(int i = 0; i < 3; i++)
    {
      pinMode(z7[i]-1, OUTPUT);
    }
    break;
  case '8':
    for(int i = 0; i < 7; i++)
    {
      pinMode(z8[i]-1, OUTPUT);
    }
    break;
  case '9':
    for(int i = 0; i < 6; i++)
    {
      pinMode(z9[i]-1, OUTPUT);
    }
    break;
  case 10:
    for(int i = 0; i < 5; i++)
    {
      pinMode(zE[i]-1, OUTPUT);
    }
    break;
  case 11:
    for(int i = 0; i < 2; i++)
    {
      pinMode(zr[i]-1, OUTPUT);
    }
    break;
  }
 
  for(int i=0;i<7;i++)
  {                     
    pinMode(za[i]-1, INPUT);
  }
  //digitalWrite(anzeige[a],LOW);
  pinMode(anzeige[a], INPUT);
}


Is aber "nur" der code für ne dreistellige Anzeige

Müsstest nur die Pins anpassen.
Pin 13: Anzeige 1, Anode
Pin 12: Anzeige 1, Anode
Pin 11: Anzeige 1, Anode
Pin 10: Anzeige 1, Anode

Die Pins 0 - 6 sind die Kathoden von a - g.

Den Code solltest du eig sehr leicht verstehen, is wirklich sehr einfach aufgebaut ;)

MFG, Robdeflop®

Go Up