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);
}
In loop() fehlen hinter Matrix die Klammern. Grüsse
Gast
#3048232
Florian Daßler schrieb: > Sketchgröße 724Bytes. Ganzschöm klein, oder? Das liegt wahrscheinlich daran, dass Matrix() und shiftout() wegoptimiert werden. Probier mal:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
Gast
#3048239
Und eigentlich sollte das hier auch nicht funktionieren:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
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
Gast
#3048284
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.
Damals war ich 11. Ich habe das Problem selber gelößt. Danke!!
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.