Arduino Due - bricht noch vor der Schleife ab

int start = 20; // Ab hier beginnen die Digitalen Ausgänge
int stufen = 16; // Anzahl der Stufen und somit der benutzten Ausgänge
bool stufenStatus; // Check ob die Stufen An sind oder Aus sind

int zeit_1; // Zeit zwischen den einzelnen Stufen
int zeit_2; // Zeit zwischen dem Ein- und Ausschalten

int poti_1 = 4;
int poti_2 = 5;

int helligkeit = 0; // Helligkeitssensor (Analog 0 / 1023)
int helligkeitStatus;

int potiHell = 1; // Poti zum einstellen der Helligkeitsgrenze (Analog 0 / 1023)
int potiHellStatus;

int melderUnten = 52; // Bewegungsmelder unten (Digital on / off)
int melderUntenStatus;

int melderOben = 53; // Bewegungsmelder unten (Digital on / off)
int melderObenStatus;

void setup() {
Serial.begin(9600);
delay(20);
Serial.println(F("Serielle verbindung hergestellt"));
for (int i = start; i <= (start + stufen); i ++) // Ausgang 10 bis 10 * Stufen anzahl
{
pinMode(i, OUTPUT);
Serial.print(F("Pin "));
Serial.print(i);
Serial.println(F(" als OUTPUT gesetzt"));
delay(20);
}

Serial.println(F("Alle ausgänge gesetzt"));
pinMode(poti_1, INPUT);
pinMode(poti_2, INPUT);
pinMode(helligkeit, INPUT);
pinMode(potiHell, INPUT);
pinMode(melderUnten, INPUT);
pinMode(melderOben, INPUT);
Serial.println(F("Poti_1, Poti_2, Helligkeit, PotiHell, Melder unten, Melder oben als INPUT gesetzt"));
}

void loop() {
// Serialausgabe
Serial.print(F("\tHelligkeitssensor = "));
helligkeitStatus = analogRead(helligkeit);
Serial.print(helligkeitStatus);
Serial.print(F("\tPotentiometer (Helligkeit) = "));
potiHellStatus = analogRead(potiHell);
Serial.print(potiHellStatus);
Serial.print(F("\tBewegungsmelder Unten = "));
melderUntenStatus = digitalRead(melderUnten);
Serial.print(melderUntenStatus);
Serial.print(F("\tBewegungsmelder Oben = "));
melderObenStatus = digitalRead(melderOben);
Serial.print(melderObenStatus);
Serial.print(F("\n"));

zeit_1 = 250; //* (analogRead(poti_1)/1023);
zeit_2 = 1000; //* (analogRead(poti_2)/1023);

// Logic steuerung
// Melder unten (Bewegungsmelder unten schaltet ein oben ist aus und der Helligkeitssensort gibt grünes Licht)
if(stufenStatus == false && helligkeitStatus <= potiHellStatus && melderUntenStatus == HIGH && melderObenStatus == LOW)
{
fadeInUnten();
}
if(stufenStatus == true && melderObenStatus == HIGH && melderUntenStatus == LOW)
{
delay(zeit_2);
fadeOutUnten();
}

// Melder oben (Bewegungsmelder oben schaltet ein oben ist aus und der Helligkeitssensort gibt grünes Licht)
if(stufenStatus == false && helligkeitStatus <= potiHellStatus && melderUntenStatus == LOW && melderObenStatus == HIGH)
{
fadeInOben();
}
if(stufenStatus == true && melderObenStatus == LOW && melderUntenStatus == HIGH)
{
delay(zeit_2);
fadeOutOben();
}

}

void fadeInUnten()
{
for (int i=start; i<= start+stufen; i ++)
{
digitalWrite(i, HIGH); // Stufe einschalten
delay(zeit_1); // 0,5 Sec. warten bis die nächste Stufe angeht
}
stufenStatus = true;
}

void fadeOutUnten()
{
for (int i=start; i<= start+stufen; i ++)
{
digitalWrite(i, LOW); // Stufe ausschalten
delay(zeit_1); // 0,5 Sec. warten bis die nächste Stufe angeht
}
stufenStatus = false;
}

void fadeInOben()
{
for (int i=start+stufen; i>= start; i --)
{
digitalWrite(i, HIGH); // Stufe einschalten
delay(zeit_1); // 0,5 Sec. warten bis die nächste Stufe angeht
}
stufenStatus = true;
}

void fadeOutOben()
{
for (int i=start+stufen; i>= start; i --)
{
digitalWrite(i, LOW); // Stufe ausschalten
delay(zeit_1); // 0,5 Sec. warten bis die nächste Stufe angeht
}
stufenStatus = false;
}

int start = 20;      // Ab hier beginnen die Digitalen Ausgänge
int stufen = 16;      // Anzahl der Stufen und somit der benutzten Ausgänge
bool stufenStatus;    // Check ob die Stufen An sind oder Aus sind
int zeit_1;           // Zeit zwischen den einzelnen Stufen
int zeit_2;           // Zeit zwischen dem Ein- und Ausschalten
int poti_1 = 4;
int poti_2 = 5;
int helligkeit = 0;   // Helligkeitssensor (Analog 0 / 1023)
int helligkeitStatus;
int potiHell = 1;     // Poti zum einstellen der Helligkeitsgrenze (Analog 0 / 1023)
int potiHellStatus;
int melderUnten = 52; // Bewegungsmelder unten (Digital on / off)
int melderUntenStatus;
int melderOben = 53;  // Bewegungsmelder unten (Digital on / off)
int melderObenStatus;
void setup() {
  Serial.begin(9600);
  delay(20);
  Serial.println(F("Serielle verbindung hergestellt"));
  for (int i = start; i <= (start + stufen); i ++)    // Ausgang 10 bis 10 * Stufen anzahl
  {
    pinMode(i, OUTPUT);
    Serial.print(F("Pin "));
    Serial.print(i);
    Serial.println(F(" als OUTPUT gesetzt"));
    delay(20);
  }
  Serial.println(F("Alle ausgänge gesetzt"));
  pinMode(poti_1, INPUT);
  pinMode(poti_2, INPUT);
  pinMode(helligkeit, INPUT);
  pinMode(potiHell, INPUT);
  pinMode(melderUnten, INPUT);
  pinMode(melderOben, INPUT);
  Serial.println(F("Poti_1, Poti_2, Helligkeit, PotiHell, Melder unten, Melder oben als INPUT gesetzt"));
}
void loop() {
  // Serialausgabe
  Serial.print(F("\tHelligkeitssensor = "));
  helligkeitStatus = analogRead(helligkeit);
  Serial.print(helligkeitStatus);
  Serial.print(F("\tPotentiometer (Helligkeit) = "));
  potiHellStatus = analogRead(potiHell);
  Serial.print(potiHellStatus);
  Serial.print(F("\tBewegungsmelder Unten = "));
  melderUntenStatus = digitalRead(melderUnten);
  Serial.print(melderUntenStatus);
  Serial.print(F("\tBewegungsmelder Oben = "));
  melderObenStatus = digitalRead(melderOben);
  Serial.print(melderObenStatus);
  Serial.print(F("\n"));
  zeit_1 = 250;  //* (analogRead(poti_1)/1023);     
  zeit_2 = 1000; //* (analogRead(poti_2)/1023);  
  // Logic steuerung
  // Melder unten (Bewegungsmelder unten schaltet ein oben ist aus und der Helligkeitssensort gibt grünes Licht)
  if(stufenStatus == false && helligkeitStatus <= potiHellStatus && melderUntenStatus == HIGH && melderObenStatus == LOW)
  {
    fadeInUnten();
  }
  if(stufenStatus == true && melderObenStatus == HIGH && melderUntenStatus == LOW)
  {
    delay(zeit_2);
    fadeOutUnten();
  }
  // Melder oben (Bewegungsmelder oben schaltet ein oben ist aus und der Helligkeitssensort gibt grünes Licht)
  if(stufenStatus == false && helligkeitStatus <= potiHellStatus && melderUntenStatus == LOW && melderObenStatus == HIGH)
  {
    fadeInOben();
  }
  if(stufenStatus == true && melderObenStatus == LOW && melderUntenStatus == HIGH)
  {
    delay(zeit_2);
    fadeOutOben();
  }
}
void fadeInUnten()
{
  for (int i=start; i<= start+stufen; i ++)
  {
    digitalWrite(i, HIGH);              // Stufe einschalten
    delay(zeit_1);                         // 0,5 Sec. warten bis die nächste Stufe angeht
  }
  stufenStatus = true;
}
void fadeOutUnten()
{
  for (int i=start; i<= start+stufen; i ++)
  {
    digitalWrite(i, LOW);              // Stufe ausschalten
    delay(zeit_1);                        // 0,5 Sec. warten bis die nächste Stufe angeht
  }
  stufenStatus = false;
}
void fadeInOben()
{
  for (int i=start+stufen; i>= start; i --)
  {
    digitalWrite(i, HIGH);              // Stufe einschalten
    delay(zeit_1);                         // 0,5 Sec. warten bis die nächste Stufe angeht
  }
  stufenStatus = true;
}
void fadeOutOben()
{
  for (int i=start+stufen; i>= start; i --)
  {
    digitalWrite(i, LOW);              // Stufe ausschalten
    delay(zeit_1);                        // 0,5 Sec. warten bis die nächste Stufe angeht
  }
  stufenStatus = false;
}

13:37:13.038 -> Pin 20 als OUTPUT gesetzt
13:37:13.078 -> Pin 21 als OUTPUT gesetzt
13:37:13.119 -> Pin 22 als OUTPUT gesetzt
13:37:13.119 -> Pin 23 als OUTPUT gesetzt
13:37:13.158 -> Pin 24 als OUTPUT gesetzt
13:37:13.193 -> Pin 25 als OUTPUT gesetzt
13:37:13.243 -> Pin 26 als OUTPUT gesetzt
13:37:13.243 -> Pin 27 als OUTPUT gesetzt
13:37:13.278 -> Pin 28 als OUTPUT gesetzt
13:37:13.313 -> Pin 29 als OUTPUT gesetzt
13:37:13.348 -> Pin 30 als OUTPUT gesetzt
13:37:13.348 -> Pin 31 als OUTPUT gesetzt
13:37:13.398 -> Pin 32 als OUTPUT gesetzt
13:37:13.433 -> Pin 33 als OUTPUT gesetzt
13:37:13.433 -> Pin 34 als OUTPUT gesetzt
13:37:13.483 -> Pin 35 als OUTPUT gesetzt
13:37:13.533 -> Pin 36 als OUTPUT gesetzt
13:37:13.533 -> Alle ausgänge gesetzt

getested mit einem Arduino MEGA

Ok alles andere, was ich geschrieben habe, scheint weg zu sein also noch mal.

Das da oben ist mein Code.

Ich möchte Treppenstufen beleuchten (eine nach einander). Dafür habe ich das Arduino Due Bord genommen, weil ich Probleme mit 2 schiebe Register habe.

Leider hängt sich das Programm scheinbar bei dem Setzen der Pin als OUTPUT auf (zusehen in dem Bild darunter).

Ich habe jetzt schon versucht ein delay von 20 ms in die Schleife einzubauen, habe mehrfach versucht die Baud rate zu ändern, habe das Setzen der Pins versucht, ohne schleife zu realisieren und habe beim Serial.print() das F() eingefügt. Ich verstehe nicht, woran das liegen kann. Vielleicht findet ja jemand meinen Fehler.

Dein Fehler liegt hier:

int helligkeit = 0;   // Helligkeitssensor (Analog 0 / 1023)
int helligkeitStatus;

int potiHell = 1;     // Poti zum einstellen der Helligkeitsgrenze (Analog 0 / 1023)
int potiHellStatus;

....

  pinMode(helligkeit, INPUT);
  pinMode(potiHell, INPUT);

Analogeingänge brauchst/darfst Du nicht als INPUT setzen. Wenn Du 0/1 für die Analogeingänge verwendest erst recht nicht, denn das pinMode setzt dann die Digitaleingänge 0/1 als Input - und das ist der Programming Port ( =Serial ). Wenn Du A0 bzw A1 verwendest, macht es nichts aus, denn das sind dann digital die gleichen Pins wie analog.
pinMode ist nur für die digitale Nutzung von Pins.

P.S. das F-Makro macht auf dem DUE keinen Sinn.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.