Fehler

hi ich bin noch neuling und versuche mich derzeit an einfachen code `s nur häng ich jetzt schon ne weile an einem code fest!

kann mir eine sagen wo hier mein fehler liegt ? were klasse wenn ihn jemand findet und mir erklären könnte was ich ich zukunft anders machen muss ?

int led[4] = { 10,11,12,13};
int oldVal = 0;
int counter = 0;
int taster = 2;
void setup() {
  for (int i = 0; i<4; i++) {
  pinMode(led[i], OUTPUT);
  }
  void setLED(int ledNr) {
    for (int i = 0;i<4;i++) {
      if (i == ledNr) {
        digitalWrite(led[i], HIGH);
    }
    else {
      digitalWrite(led[i], LOW);
    }
  }
}
int setCounter(int counter) {
  if (counter == 3 {
    counter = 0;
  }
  else {
    counter++;
  }
  return counter;
}
void loop()
{
  int val = digitalRead(taster);
  if (val != oldVal && val == HIGH) {
    counter = setCounter();
    setLED(counter);
    delay(10);
  }
  oldVal = val;
}

lg dekat

Bitte ein bißchen Einsatz. Einfach den Code posten und sagen "da ist ein Fehler" geht nicht. Bitte erklähre was nicht geht und wie das Programm funktionieren sollte. Grüße Uwe

Schätze, Du hast ein paar Klammerfehler: Nach der ersten FOR-Schleife fehlt eine "}", und nach dem "counter == 3" fehlt eine ")".

Oh, und beim "setCounter()"-Aufruf im loop() fehlt ein Parameter.

hi,

sind 3 fehler die ich gefunden habe:

  • void setup wird nicht geschlossen bevor du mit void setLed anfängst.
  • irgendwo hat ne runde Klammer zu gefehlt
  • und du rufst deine Funktion setCounter ohne Argument auf obwohl sie eins verlangt.

So kompiliert es:

int led[4] = { 10,11,12,13};
int oldVal = 0;
int counter = 0;
int taster = 2;
void setup() {
  for (int i = 0; i<4; i++) {
  pinMode(led[i], OUTPUT);
  }
}
  void setLED(int ledNr) {
    for (int i = 0;i<4;i++) {
      if (i == ledNr) {
        digitalWrite(led[i], HIGH);
    }
    else {
      digitalWrite(led[i], LOW);
    }
  }
}
int setCounter(int counter) {
  if (counter == 3 ){
    counter = 0;
  }
  else {
    counter++;
  }
  return counter;
}
void loop()
{
  int val = digitalRead(taster);
  if (val != oldVal && val == HIGH) {
    counter = setCounter(counter);
    setLED(counter);
    delay(10);
  }
  oldVal = val;
}

ich glaube so war es auch gedacht.

Jan

edit: doh, war zu spät

edit2: und Uwe hat recht, mir war nur grad langweilig.

edit2: und Uwe hat recht, mir war nur grad langweilig.

Dito. ;D

  • void setup wird nicht geschlossen bevor du mit void setLed anfängst.
  • irgendwo hat ne runde Klammer zu gefehlt

das kann net sein habe den code jetzt 1 zu 1 aus dem buch übertragen und da fehlt keine klammer

und zum lesten das war wohl mein fehler danke ^^

@Lifthanger und Joghurt Und ich war zu faul zu versuchen das Programm zu analysieren. ;)

@dekat Auch in Büchern sind Fehler; Murphys läßt grüßen.

Wenn Du mit dem Kursor im IDE eine Klammer markierst, siehst Du die dazugehörige Klammer angezeigt. So kannst Du sehen wo eine Klammer auf - bzw zu geht.

Beim Abschreiben verfehlt man sich schon mal und läßt was aus ecc.

Grüße Uwe

genau, in dem Fall steht das falsch im Buch. Wenn du eine Funktion innerhalb einer anderen deklarierst, dann platzt dem Compiler leider der Kopf. :)

tut es denn jetzt was es sollte?

Dekat hat mich per PM kontaktiert, da er der Annahme war, dass ich der Autor dieses Codes bin.

Ich bin aber der Autor vom Buch “Arduino Praxiseinstieg”. Soweit ich prüfen konnte, stammt der in diesem Thread besprochene Code aus dem O’Reilly-Buch “Arduino Physical Computing…”.

Ich habe Dekat empfohlen den Code von der Buchwebsite runterzuladen.

Gruss
Thomas

sind 3 fehler die ich gefunden habe:

Genau, mit den von Lifthanger erwähnten Korrekturen, ist der Code compilierbar.

Auf die Interseite des Verlags zu schauen ist einen gute Idee; oft kann man da die Beispielprogramme gerunterladen und auch Fehlerkorrekturen finden. Grüße Uwe

Die Kommentare unter den Downloadlinks sprechen Bände für sich: