Problem bei Arduino-Programm

OP #3048218
Bei diesem Programm f. Arduino (zur Ansteuerung d. Pinpong-Platine)
zeigt die Arduino-Software nach den Kompillieren folgendes an: 
Sketchgröße
724Bytes. Ganzschöm klein, oder?
nach den übertragen macht das Programm nichts.
Wieso? (fragen z. Programm hier hin:)

int Leds[12];
int cnt;
void setup() {
  for(int p=2;p<10;p++) {
    pinMode(p, OUTPUT);
  }
}
void loop() {
  Matrix;
  for(int i=1;i<12;i++) {
  Leds[i]=512+i;
  }
}
void Matrix(void) {
  cnt++;
  if(cnt==13) cnt=1;
  if(cnt==1) digitalWrite(2, 0); else digitalWrite(2, 1);
  digitalWrite(3, 1);
  digitalWrite(3, 0);
  digitalWrite(4, 1);
  digitalWrite(4, 0);
  shiftOut(5, 6, 7, Leds[cnt]%256);
  int wert=Leds[cnt]/256;
  digitalWrite(9, wert%2);
  digitalWrite(8, (wert/2)%2);
}

void shiftOut(int myDataPin, int myClockPin, byte myDataOut) {
  int i=0;
  int pinState;
  pinMode(myClockPin, OUTPUT);
  pinMode(myDataPin, OUTPUT);
  digitalWrite(myDataPin, 0);
  digitalWrite(myClockPin, 0);
  for (i=7; i>=0; i--)  {
    digitalWrite(myClockPin, 0);
    if ( myDataOut & (1<<i) ) {
      pinState= 1;
    }
    else {
      pinState= 0;
    }
    digitalWrite(myDataPin, pinState);
    digitalWrite(myClockPin, 1);
    digitalWrite(myDataPin, 0);
  }
  digitalWrite(myClockPin, 0);
}
Gast
Florian Daßler schrieb:
> Sketchgröße 724Bytes. Ganzschöm klein, oder?

Das liegt wahrscheinlich daran, dass Matrix() und shiftout() 
wegoptimiert werden.

Probier mal:
1
void loop() {
2
  Matrix(); // wichtig soll als Funktion aufgerufen werden!
3
  for(int i=1;i<12;i++) {
4
  Leds[i]=512+i;
5
  }
6
}
Gast
Und eigentlich sollte das hier auch nicht funktionieren:
1
void Matrix(void) {
2
  // ...
3
  shiftOut(5, 6, 7, Leds[cnt]%256);
4
  // ...
5
}
6

7
void shiftOut(int myDataPin, int myClockPin, byte myDataOut) {
8
  // ...
9
}

shiftOut() erwartet 3 Argumente, und du übergibst der Funktion 4.
Gast
R. Freitag schrieb:
> Das sollte der Compiler aber an der Signatur merken. Warum tut er das
> nicht?


Meine reine Bauchvermutung wäre:

- shiftOut() ist nach Matrix() definiert, einen Prototyp gibts auch 
nicht, dadurch fällt der Fehler nicht sofort auf.
- Bevor der gcc merkt, dass die Signaturen nicht zusammen passen, wurde 
Matrix bereits wegoptimiert.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 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.