Go Down

Topic: 7-Segment [SA 40-19 RT] - Anschließen - und ansteuern (Read 499 times) previous topic - next topic

HotSystems

Man kann das Bild leider immer erst mit dem Editoren des Beitrages einstellen :-(
Daher dauert das immer einen Kleinen augenblick, da warst du schneller als ich. :-).

Die sind alle klein bei mir :-)

Puhh, da bin ich aber froh, das das mit dem Bild doch noch geklappt hat, ;-) *Spaß*

Ok, 1/4W also 0,25W, somit würden die ausreichen :-) die ich habe für das was ich sie benötige.

DANKE.

Alles klar, ich war wohl zu schnell. ;)  ;)
Kommt aber selten vor.
I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)
Gruß Dieter

Muecke

So ich habe die 7 Segmente bekommen und wie auf dem Bild angeschlossen.



Zum testen habe ich mir jetzt den Code mal zusammen gebastelt.

Jetzt möchte ich mir eine Funktion schreiben, mit der ich die Ziffern entsprechende aufrufen kann.
Das Teil sieht echt Cool aus, und ist verdammt groß :-).

Code: [Select]
int a = 7;
  int b = 8;
  int c = 4;
  int d = 3;
  int e = 2;
  int f = 6;
  int g = 5;


void setup() {
 
  pinMode(a, OUTPUT);
  pinMode(b, OUTPUT);
  pinMode(c, OUTPUT);
  pinMode(d, OUTPUT);
  pinMode(e, OUTPUT);
  pinMode(f, OUTPUT);
  pinMode(g, OUTPUT);
  
// Ausgabe 0
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, LOW);
delay(1000); // warten für 1 sekunden

// Ausgabe 1
  digitalWrite(a, LOW);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, LOW);
  digitalWrite(e, LOW);
  digitalWrite(f, LOW);
  digitalWrite(g, LOW);
delay(1000); // warten für 1 sekunden

// Ausgabe 2
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, LOW);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, LOW);
  digitalWrite(g, HIGH);
delay(1000); // warten für 1 sekunden

// Ausgabe 3
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, LOW);
  digitalWrite(f, LOW);
  digitalWrite(g, HIGH);
delay(1000); // warten für 1 sekunden

// Ausgabe 4
  digitalWrite(a, LOW);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, LOW);
  digitalWrite(e, LOW);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
delay(1000); // warten für 1 sekunden

// Ausgabe 5
  digitalWrite(a, HIGH);
  digitalWrite(b, LOW);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, LOW);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
delay(1000); // warten für 1 sekunden

// Ausgabe 6
  digitalWrite(a, HIGH);
  digitalWrite(b, LOW);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
delay(1000); // warten für 1 sekunden

// Ausgabe 7
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, LOW);
  digitalWrite(e, LOW);
  digitalWrite(f, HIGH);
  digitalWrite(g, LOW);
delay(1000); // warten für 1 sekunden

// Ausgabe 8
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
delay(1000); // warten für 1 sekunden

// Ausgabe 9
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, LOW);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
delay(1000); // warten für 1 sekunden
}

void loop() { }



Gruß Mücke



- Anfänger in allen Hinsicht - Bilder sichtbar einstellen
1  Bild Hochladen (Attachements); 2 Beitrag Save; 3 Anhang rechter Mausklick; "Adresse des Links kopieren"; 4 Beitrag „Modify"; 5 img-Tags mit dem kopierten Link einfügen; 6 Beitrag Save
DANKE

agmue

Jetzt möchte ich mir eine Funktion schreiben, mit der ich die Ziffern entsprechende aufrufen kann.
Kleine Anregung von mir. Ob die Bits an der richtigen Stelle sind, kann ich mangels 7-Segmentanzeige nicht testen.

Code: [Select]
//                   a  b  c  d  e  f  g
const byte pins[] = {7, 8, 4, 3, 2, 6, 5};
const byte digits[] = {
  //gfedcba
  0b0111111, // 0
  0b0000110, // 1
  0b1011011, // 2
  0b1001111, // 3
  0b1100110, // 4
  0b1101101, // 5
  0b1111101, // 6
  0b0100111, // 7
  0b1111111, // 8
  0b1101111  // 9
};
void ausgabe(byte zahl)
{
  zahl = zahl % 10; // um die Feldgrenzen nicht zu überschreiten
  byte d = digits[zahl];
  for (byte j = 0; j < sizeof(pins); j++)
  {
    bool hl = d & 1 << j;
    digitalWrite(pins[j], hl);
  }
}

void setup() {
  for (byte j = 0; j < sizeof(pins); j++)
  {
    pinMode(pins[j], OUTPUT);
  }
}

void loop()
{
  for (byte j = 0; j < 10; j++)
  {
    ausgabe(j);
    delay(1000);
  }
}

Muecke

@agmue: Das ist ein sehr Interessantes Programm.
Jedoch muss ich mich da mal mit etwas mehr zeit dran setzen, um das richtig nachvollziehen zu können.

Was ich auf Anhieb verstanden habe ist das du die Pins in ein Array gesteckt hast, das dann wider aufgerufen wird beim Pin Deklarieren als  OUTPUT.

Den Rest muss ich mir genauer anschauen, denn ich möchte das schon verstehen. Was ich da mache.

ich hätte das zwar etwas anders gelöst, bin aber für neue Dinge immer Offen ;-).

Danke dir.

Gruß Mücke
- Anfänger in allen Hinsicht - Bilder sichtbar einstellen
1  Bild Hochladen (Attachements); 2 Beitrag Save; 3 Anhang rechter Mausklick; "Adresse des Links kopieren"; 4 Beitrag „Modify"; 5 img-Tags mit dem kopierten Link einfügen; 6 Beitrag Save
DANKE

agmue


ElEspanol

Studier und versteh den Sketch von agmue, ist gut und effizient gemacht

Muecke

Löse es, wie Du magst :)
Öm, ja, so dass ich den Code auch in ein Paar Wochen noch verstehe zumindest.

Studier und versteh den Sketch von agmue, ist gut und effizient gemacht
Das habe ich vor.

Jedoch zuerst meine Version, wie ich es vorhatte.

Code: [Select]
int a = 7;
  int b = 8;
  int c = 4;
  int d = 3;
  int e = 2;
  int f = 6;
  int g = 5;

void setup()
{
  pinMode(a, OUTPUT);
  pinMode(b, OUTPUT);
  pinMode(c, OUTPUT);
  pinMode(d, OUTPUT);
  pinMode(e, OUTPUT);
  pinMode(f, OUTPUT);
  pinMode(g, OUTPUT);
}

void loop()
{
  for (int j = 0; j < 11; j++)
    {
      Segment(j);
      delay(1000);
    } 
}

void Segment(int Zahl)
{
  switch (Zahl)
  {
  case 0:
    digitalWrite(a, HIGH);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, HIGH);
    digitalWrite(e, HIGH);
    digitalWrite(f, HIGH);
    digitalWrite(g, LOW);
    break;
  case 1:
    digitalWrite(a, LOW);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, LOW);
    digitalWrite(e, LOW);
    digitalWrite(f, LOW);
    digitalWrite(g, LOW);
    break;
  case 2:
      digitalWrite(a, HIGH);
      digitalWrite(b, HIGH);
      digitalWrite(c, LOW);
      digitalWrite(d, HIGH);
      digitalWrite(e, HIGH);
      digitalWrite(f, LOW);
      digitalWrite(g, HIGH);
      break;
  case 3:
    digitalWrite(a, HIGH);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, HIGH);
    digitalWrite(e, LOW);
    digitalWrite(f, LOW);
    digitalWrite(g, HIGH);
    break;
  case 4:
    digitalWrite(a, LOW);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, LOW);
    digitalWrite(e, LOW);
    digitalWrite(f, HIGH);
    digitalWrite(g, HIGH);
    break;
  case 5:
    digitalWrite(a, HIGH);
    digitalWrite(b, LOW);
    digitalWrite(c, HIGH);
    digitalWrite(d, HIGH);
    digitalWrite(e, LOW);
    digitalWrite(f, HIGH);
    digitalWrite(g, HIGH);
    break;
  case 6:
    digitalWrite(a, HIGH);
    digitalWrite(b, LOW);
    digitalWrite(c, HIGH);
    digitalWrite(d, HIGH);
    digitalWrite(e, HIGH);
    digitalWrite(f, HIGH);
    digitalWrite(g, HIGH);
    break;
  case 7:
    digitalWrite(a, HIGH);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, LOW);
    digitalWrite(e, LOW);
    digitalWrite(f, HIGH);
    digitalWrite(g, LOW);
    break;
  case 8:
    digitalWrite(a, HIGH);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, HIGH);
    digitalWrite(e, HIGH);
    digitalWrite(f, HIGH);
    digitalWrite(g, HIGH);
    break;
  case 9:
    digitalWrite(a, HIGH);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, HIGH);
    digitalWrite(e, LOW);
    digitalWrite(f, HIGH);
    digitalWrite(g, HIGH);
    break;
  default:
    digitalWrite(a, LOW);
    digitalWrite(b, LOW);
    digitalWrite(c, LOW);
    digitalWrite(d, LOW);
    digitalWrite(e, LOW);
    digitalWrite(f, LOW);
    digitalWrite(g, LOW); 
  }
}


jetzt muss ich mir, das von agmue genauer anschauen, denn das macht das selbe, nur deutlich schlanker :-)
ein Paar Sachen verstehe ich auf Anhieb, bei einigen Dingen muss ich erst nachschlagen und schauen was das eigendlich ist, und wie das funktioniert.
- Anfänger in allen Hinsicht - Bilder sichtbar einstellen
1  Bild Hochladen (Attachements); 2 Beitrag Save; 3 Anhang rechter Mausklick; "Adresse des Links kopieren"; 4 Beitrag „Modify"; 5 img-Tags mit dem kopierten Link einfügen; 6 Beitrag Save
DANKE

ElEspanol

Du hast z.B. viele Kopien des im Prinzip identischen Codes in der switch/case.
Sowas lagert man in Funktionen (oder Klassen) aus und übergibt nur die entsprechenden Variablen, die jeweils anders sind.
Auch packt man idealerweise gleichartige Variablen in Arrays, da kann man schön drüber iterieren. Sprich for-Schleife und nur 1 x PinMode anstatt 8 Mal pinmode

Nur so als Anregung zum verstehen von agmues Sketch.

Go Up