Programm läuft nicht korrekt mit ext. Stromversorgung, nur direkt am Rechner

Hallo zusammen.
Bin hier sehr neu.

Ich habe folgendes Problem und verstehe nicht, wo ich ansetzen muss...

Vorhanden: Arduino Nano mit einigen LEDs und einem PIR Sensor in einem Gehäuse verbaut.
Das ganze soll Rechner-unabhängig laufen, Stromversorgung über Akku oder Netzteil.

Das Programm funktioniert an sich. Allerdings nur! wenn es am USB Port am Rechner angeschlossen ist. Es funktioniert nicht, wenn ich es per Netzteil an der Steckdose anschließe - die LEDs blinken dann ununterbrochen, so als würde das Sensor Input permanent 1 sein.

Meine Frage: wo muss ich ansetzen? Ist es irgendwas im Code oder eher die Hardware? Ich verstehe es einfach nicht - vllt hat ja jemand ne Idee.

Das Wäre der Code:

#include <LedFlasher.h>
#include <LedFader.h>

LedFlasher weiss (9,50,50);
LedFader rot1 (5, 10, 200, 500);
LedFader rot2 (6, 10, 200, 500);
const int PIRPin = 2;
bool PIRoutput = false;
int PIRstate = LOW;

void setup() {
 
pinMode(PIRPin, INPUT);
weiss.begin ();
rot1.begin ();
rot2.begin ();
digitalWrite(9, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
}

void loop() {

int val = digitalRead(PIRPin);  
 if (val == HIGH) {
   if (PIRstate == LOW) {
       PIRstate = HIGH;
 PIRoutput = true;   
   } 
 } else {
   if (PIRstate == HIGH) {
 PIRstate = LOW;
 PIRoutput = false;
   }
   delay(50);
 }

 if (PIRoutput == true) {   
    weiss.update ();
    rot1.update ();
    rot2.update ();
 } else {
     digitalWrite(9, LOW);
     digitalWrite(5, LOW);
     digitalWrite(6, LOW);
 }
}

Setze Deinen Code bitte in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).
Dann ist er auch auf mobilen Geräten besser lesbar.
Das kannst Du auch noch nachträglich ändern.

Gruß Tommy

Du musst deine Code-Tags nochmal überarbeiten.
Tommy hatte geschrieben, ohne die Sterne (*).

Und was für ein Netzteil hast du wo angeschlossen ?

Ahh, Uwe hat deine Arbeit übernommen.

digitalWrite(9, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);

Braucht es keine pinMode()?
Uwe

So, sollte nun hinhauen mit dem Code. (Danke!!)

Netzteil: also am Arduino ist ein Mini-USB... ich hänge da einfach ein Handy-Ladenetzteil dran. Hab auch verschiedene probiert mit verschiedenen Leistungsmerkmalen.

uwefed:

digitalWrite(9, LOW);

digitalWrite(5, LOW);
digitalWrite(6, LOW);



Braucht es keine pinMode()?
Uwe

Hallo Uwe,
ähm... könntest Du die Frage so umformulieren, dass ich verstehe auf was Du hinaus willst?
Meinst Du, sie müssten noch als Outputs definiert werden? Welcher Vorteil liegt darin bzw. was macht es dann anders, denn wie gesagt, am Rechner angeschlossen funktioniert es so?!

kpester:
Netzteil: also am Arduino ist ein Mini-USB... ich hänge da einfach ein Handy-Ladenetzteil dran. Hab auch verschiedene probiert mit verschiedenen Leistungsmerkmalen.

Hast Du es auch schon einmal mit Energieversorgung per Batterie probiert?

Spicke den Code auch einmal mit Kontrollausgaben/Serial.print(), damit Du siehst, wo welche Werte gelesen werden und ob auch wirklich der gesamte Code abgearbeitet wird.

Mit Steckernetzteilen hatte ich bislang nie Probleme. Evtl. wird irgendwo mal kurz zu viel Strom gezogen, so dass die Spannung zusammenbricht und der Arduino zurückgesetzt wird (wieder von vorne anfängt).

Gruß

Gregor

PS: Mach' das mit den Pinmode-Befehlen, auch wenn es ohne funktioniert. Dann stimmt's zumindest vom Stil her :slight_smile:

Es kann auch sein, dass die begin()-Methoden das mit machen. Ohne Link zu den beiden Libs bleibt es aber raten.

Gruß Tommy

kpester:
ähm... könntest Du die Frage so umformulieren, dass ich verstehe auf was Du hinaus willst?
Meinst Du, sie müssten noch als Outputs definiert werden? Welcher Vorteil liegt darin bzw. was macht es dann anders, denn wie gesagt, am Rechner angeschlossen funktioniert es so?!

Einen Ausgang nusst du auch als solchen definieren, z.B.

pinMode(9, OUTPUT);

Hi

Wenn Du einen Pin NICHT als Ausgang einstellst, schaltet digitalWrite NUR den PullUP-Widerstand an und aus.
DAS KANN KLAPPEN - wenn z.B. nur eine Elektronik den Pegel an Ihrem Eingang braucht.
MUSS ABER NICHT - da dieser Pegel nahezu nicht belastbar ist - bei zu großer Belastung bricht der Pegel ein und die angesteuerte Logik sieht LOW, obwohl Du ein HIGH haben willst.

Wenn die Library Das übernimmt - unschön für's Programm, zumindest Funktion für Dich.

MfG

(Intern ist Das das gleiche Register, Welches den Ausgangstreiber oder den PullUP schaltet - je nach 'Richtung' des Pin wird der PullUP oder eben die Push-Pull-Stufe aktiviert.)