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); }
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 | }
|
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.
Verwirrter Anfänger schrieb: > > shiftOut() erwartet 3 Argumente, und du übergibst der Funktion 4. Das sollte der Compiler aber an der Signatur merken. Warum tut er das nicht? Und der Schreiber des Programmes möge sich mal mit assert vertraut machen. Das hilft ungemein!! Gruss Robert
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.