Forum: Mikrocontroller und Digitale Elektronik Problem bei Arduino-Programm


von Florian D. (floriano)


Lesenswert?

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);
}

von Markus M. (mark_m)


Lesenswert?

In loop() fehlen hinter Matrix die Klammern.

Grüsse

von Verwirrter Anfänger (Gast)


Lesenswert?

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
}

von Verwirrter Anfänger (Gast)


Lesenswert?

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.

von R. F. (rfr)


Lesenswert?

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

von Verwirrter Anfänger (Gast)


Lesenswert?

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.

von Florian D. (floriano)


Lesenswert?

Damals war ich 11. Ich habe das Problem selber gelößt. Danke!!

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
Noch kein Account? Hier anmelden.