Siebensegmentanzeige ansteuern

OP #4703298
Hallo.
Immer wenn ich diesen Sketch auf meinen Arduino Uno hochladen will, 
erscheint mir eine Fehler Meldung beim Kompilieren :

#define LED 8
byte segments[] = {
  B01111110,
  B00110000,
  B01101101,
  B01111001,
  B00110011,
  B01011011,
  B01011111,
  B01110000,
  B01111111,
  B01111011};

void setup()
{
  pinMode (LED, OUTPUT);
  for (int i=0 ; i <=7; i++){
    pinMode (i, OUTPUT);
  }
}

void loop(int h)
{
  digitalWrite (LED, HIGH);
 PORTD = segments[h];
}


oder hat vielleicht jemand Noch andere Tipps eine Siebensegmentanzeige 
einfach über den Arduino anzusteuern?

Vg. mili
Habt gedult M. schrieb:
> void loop(int h)

Hast du den int h auch im Funktionsprototypen der Loop Funktion 
definiert und übergibst du beim Aufruf von der Loop Funktion auch ein 
Wert für h?

Wieso verwendest du teilweise die Arduino Portfunktionen und teilweise 
direkten Registerzugriff um den Port anzusteuern?

Es währe natürlich einfacher dir zu helfen wenn wir wüssten was in der 
Fehlermeldung steht.
Gast
Christian M. schrieb:
> Hast du den int h auch im Funktionsprototypen der Loop Funktion
> definiert und übergibst du beim Aufruf von der Loop Funktion auch ein
> Wert für h?

Er hat überhaupt nichts programmiert sondern einen
Sketch genommen (übernommen) und versucht ihn zu laden.
Gast
Habt gedult M. schrieb:
> also ich habe ihn von dieser Seite :
>
> http://tronixstuff.com/2011/10/22/tutorial-arduino-port-manipulation/

Wenn man nichtmal richtig abschreiben kann... tut es dann schon wirklich 
richtig weh. Und richtig schmerzen tut es dann... wenn derjenige noch 
mit der Nase reingedrückt wird, und reagiert nichtmal drauf.

Echt...! Setz dich mit dem Thema programmieren auseinander. Egal ob C, 
C++, Basic oder dieser ArduinoQuark. Mit Zeilen zusammenschnippeln, das 
auch noch falsch, wirst du nicht weit kommen.
(Firma: matzetronics)
In der Arduino Welt kann man loop() kein Argument übergeben, das ist 
das, was wir anderen C Programmierer die Hauptschleife nennen.

Du bastelst dir am besten eine Unterroutine, die das Schreiben aufs 
7-Segment übernimmt. Das kann z.B. so aussehen:
1
void Wr_7Seg(uint8_t number, uint8_t LEDState) {
2
  PORTD = segments[number];
3
  if (LEDState) PORTD |= 0b10000000; 
4
  else PORT &= 0b01111111;
5
}
6

7
void loop(void) {
8
uint8_t n,state = 0;
9
for (n=0;n<10;n++) {
10
    Wr_7Seg(n,state);
11
    _delay_ms(500);
12
    state = 1 - state;
13
   }
14
}
Ich kenne den Dialekt von Arduino nicht so, aber gültiges C sollte es 
sein.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.