Hallo die Runde, ich habe einen Sketch für einen Arduino Uno geschrieben (steuert LED in 2 bestimmten Frequenzen, umschaltbar über Switch Pin ), funktioniert beim Uno tadellos, beim Nano every nicht. WARUM? Bin Anfänger LG aus Kärnten
Hallo, so kann man dir nicht helfen.. paar mehr Details wären hilfreich ;) Kannst du mal den Code Posten ? bzw. den Schaltplan? Funktioniert das Übertragen nicht ? Richtiges Board ausgewählt ? Nach jedem Befehl mal eine Serial Ausgabe gemacht wo der "hängen" bleibt ? Der Uno läuft auf 5V, der Nano Every auf 3.3V! irgendwo ein Pullup auf 5V statt 3.3V liegen? Gruß
Also das ist der Sketch wie geschrieben beim uno funktioniert er, beim nano habe ich dauerleuchten. // Source zum Demonstrator vom 30. Juni 2020 int switch_pin = 12; int led_pinI = 10; int led_pinH = 9; int led_pinG = 8; int led_pinF = 7; int led_pinE = 6; int led_pinD = 5; int led_pinC = 4; int led_pinB = 3; int led_pinA = 2; int blinkRate; byte leds = 0; void setup() { Serial.begin ( 115200); pinMode(switch_pin, INPUT); pinMode(led_pinA, OUTPUT); pinMode(led_pinB, OUTPUT); pinMode(led_pinC, OUTPUT); pinMode(led_pinD, OUTPUT); pinMode(led_pinE, OUTPUT); pinMode(led_pinF, OUTPUT); pinMode(led_pinG, OUTPUT); pinMode(led_pinH, OUTPUT); pinMode(led_pinI, OUTPUT); } void loop() { if (digitalRead(switch_pin) == HIGH) { blinkRate=12; } if (digitalRead(switch_pin) == LOW) { blinkRate=50; } digitalWrite(led_pinA, HIGH); digitalWrite(led_pinB, HIGH); digitalWrite(led_pinC, HIGH); digitalWrite(led_pinD, HIGH); digitalWrite(led_pinE, HIGH); digitalWrite(led_pinF, HIGH); digitalWrite(led_pinG, HIGH); digitalWrite(led_pinH, HIGH); digitalWrite(led_pinI, HIGH); delay(blinkRate) ; digitalWrite(led_pinA, LOW); digitalWrite(led_pinB, LOW); digitalWrite(led_pinC, LOW); digitalWrite(led_pinD, LOW); digitalWrite(led_pinE, LOW); digitalWrite(led_pinF, LOW); digitalWrite(led_pinG, LOW); digitalWrite(led_pinH, LOW); digitalWrite(led_pinI, LOW); delay(blinkRate); Serial.println(blinkRate); }
Hallo, also hast du beim draufspielen schonmal keine Probleme, dass doch gut. blinkRate ist bissel irreführend gewählt besser wäre Verzögerung. blinkRate = 1 / (2*Verzögerung) Wenn der switch_pin == HIGH ist hast du eine "blinkRate"(Verzögerung) = 12 also 12ms x 2 -> 0,024s -> 1/0,024 ~ 42. also 42 mal pro Sekunde wäre deine blinkRate.. das kannst du auf ein Oszilloskop sehen aber für dein Auge ist das eine nicht ganz so stark leuchtende LED. Wenn der switch_pin == LOW hast du immerhin ne Verzögerung von 50. --> 1 / 2x0,05 = 10. -> blinkRate 10x die Sekunde. Das kann das menschliche Auge noch unterscheiden. Änder mal die Bezeichnung und nehme mal größere Werte zum Testen dann kannst du das auch mit dein Augen sehen ;) Gruß
gewöhn dich gleich mal an ohne delay zu programmeiren
1 | bool status=0; |
2 | |
3 | void loop() { |
4 | if (digitalRead(switch_pin) == HIGH) { |
5 | veroegerung=12; |
6 | }
|
7 | |
8 | if (digitalRead(switch_pin) == LOW) { |
9 | veroegerung=50; |
10 | }
|
11 | |
12 | static long ntime = 0; |
13 | |
14 | if(millis-ntime >= veroegerung){ |
15 | status = status^1; |
16 | |
17 | digitalWrite(led_pinA, status); |
18 | digitalWrite(led_pinB, status); |
19 | digitalWrite(led_pinC, status); |
20 | digitalWrite(led_pinD, status); |
21 | digitalWrite(led_pinE, status); |
22 | digitalWrite(led_pinF, status); |
23 | digitalWrite(led_pinG, status); |
24 | digitalWrite(led_pinH, status); |
25 | digitalWrite(led_pinI, status); |
26 | |
27 | ntime = millis(); |
28 | }
|
29 | |
30 | }
|
da interessieren mich aber sketch schrieb: > es gibt schöne sketche mit Ingrid Steeger Da interessieren mich aber nicht die Sketche!;-)
Danke erstmal @ essenistlecker, Problem gelöst, nach langem nachdenken ist mir eingefallen, dass ich dieses Problem ja schon einmal bei einem Uno gehabt habe und zwar zum Test nur 1 LED verwendet, dann spielt die Platine verrückt. Fährt man mit der Handfläche drüber, hört die LED auf zu blinken und leuchtet durch. Bei voller Belegung, also alle 9 LED, funzt es. Es handelt sich dabei um Infrarot LED, die als Therapie eingesetzt werden. zei Blinkfrequenzen 10 und 40 hertz. Also danke an alle und ein schönes Wochenende Christian
Hallo, @ TO: Du arbeitest laut Sketch mit offenen Eingang, da muss das Teil zwangsweise verrückt spielen. Du benötigst entweder den internen Pullup oder einen Externen. @ essenistlecker Übrigens arbeitet ein Nano Every ganz normal mit 5V. Und dein Code Bsp. ist leider auch zum scheitern verurteilt, weil ntime den falscher Datentyp. bool negieren geht einfacher mit '!'. https://www.arduino.cc/reference/en/language/structure/boolean-operators/logicalnot/ Ich kann das nicht so stehen lassen. Ich denke das hier ist besser. Weitere Leds können ergänzt werden. Den Taster kann auch auch noch in eine Funktion auslagern mit bool Rückgabewert.
1 | const byte pinSwitch {12}; |
2 | unsigned long refreshRate; |
3 | |
4 | void setup (void) |
5 | {
|
6 | Serial.begin(250000); |
7 | Serial.println("\nµC Reset ### ### ###"); |
8 | pinMode(pinSwitch, INPUT_PULLUP); |
9 | pinMode(LED_BUILTIN, OUTPUT); |
10 | }
|
11 | |
12 | void loop (void) |
13 | {
|
14 | if (digitalRead(pinSwitch) ) { |
15 | refreshRate = 50; |
16 | }
|
17 | else { |
18 | refreshRate = 500; |
19 | }
|
20 | |
21 | heartbeat(refreshRate); |
22 | |
23 | seriellerMonitor(1000, refreshRate); |
24 | }
|
25 | |
26 | |
27 | // ****** Funktionen ******
|
28 | void heartbeat (const unsigned long interval) |
29 | {
|
30 | static unsigned long lastMillis {0}; |
31 | const unsigned long ms {millis() }; |
32 | static bool state {false}; |
33 | |
34 | if (ms - lastMillis >= interval) { |
35 | lastMillis = ms; |
36 | state = !state; |
37 | digitalWrite(LED_BUILTIN, state); |
38 | }
|
39 | }
|
40 | |
41 | void seriellerMonitor (const unsigned long interval, const unsigned long &data) |
42 | {
|
43 | static unsigned long lastMillis {0}; |
44 | const unsigned long ms {millis()}; |
45 | |
46 | if (ms - lastMillis >= interval) { |
47 | lastMillis = ms; |
48 | Serial.println(data); |
49 | }
|
50 | }
|
essenistlecker schrieb: > Der Uno läuft auf 5V, Ja. > der Nano Every auf 3.3V! Nein! https://store.arduino.cc/arduino-nano-every: An Improved Arduino Nano If you used Arduino Nano in your projects in the past, the Nano Every is a pin-equivalent substitute. Your code will still work, and you will NOT need to re-wire those motors you planned in your original design.
@ essenistlecker Übrigens arbeitet ein Nano Every ganz normal mit 5V. Und dein Code Bsp. ist leider auch zum scheitern verurteilt, weil ntime den falscher Datentyp. bool negieren geht einfacher mit '!'. https://www.arduino.cc/reference/en/language/structure/boolean-operators/logicalnot/ Der Code funktioniert einwandfrei(!), ist bei 20 Geräten in Verwendung, Uno und Mega. Beim Every habe ich das Problem, dass ich die Platine angreifen muss damit das Programm läuft, lasse ich die Platine los DAUERLEUCHTEN. Kennt jemand dieses Phänomen?
Titze C. schrieb: > Der Code funktioniert einwandfrei(!) Offensichtlich nicht. Veit D. schrieb: > Du arbeitest laut Sketch mit offenen Eingang, da muss das Teil > zwangsweise verrückt spielen. Du benötigst entweder den internen Pullup > oder einen Externen. Um das zu bestätigen, brauchen wir einen Schaltplan. Also, her damit!
Titze C. schrieb: > Es handelt sich dabei um Infrarot LED, die als Therapie > eingesetzt werden. zei Blinkfrequenzen 10 und 40 hertz. Ich vermute eine Alu-Hut Anwendung ;-) Da wird es keine Schaltung geben.
nur noch eine Frage eines Unwissenden... Warum funktioniert es mit den anderen Boards???
Titze C. schrieb: > kann ein Foto schicken hilft das? Lass es uns probieren. Gerne. Titze C. schrieb: > nur noch eine Frage eines Unwissenden... Warum funktioniert es mit den > anderen Boards??? Purer Zufall. Betreibe die Boards mal an einem anderen Ort, mit anderer Spannungsversorgung o.ä. und es wird bestimmt wieder "spinnen".
Hallo, ohne Schaltplan kommen wir hier nicht weiter. Meine Logik sagt mir auch das es Zufall ist das es mit einem Uno/Mega funktioniert wenn es an einem Nano Every nicht funktioniert. Denn bei gleichen Code bedeutet das rückwärts betrachtet das keine externen Pullups/Pulldowns vorhanden sind. Es reicht schon ein Steckbrett und der Nano Every verhält sich mit offenen Eingängen anders. Das liegt aber nicht am Nano Every.
@ Veit D danke für den Tipp, habe tatsächlich Versuchsweise über ein Steckbrett den Every probiert, werde heute im Original versuchen!
Hallo, die Erkenntnis die du daraus mitnehmen musst ist, dass du keine offenen Eingänge haben darfst. Sprich keine undefinierten Pegel. Wenn du, was ich annehme, einen mechanischen Taster angeschlossen hast, dann benötigst du mittels externen Pullup/down oder internen Pullup immer einen definierten Spannungswert. Das kannst du auch auf dem Steckbrett ausprobieren.
@Veit D. und jetzt wird kompliziert für mich. Das Teil wird mit einer Powerbank betrieben der die Stromversorgung übernimmt. um die Blinkfrequenzen zu ändern verwende ich einen Kippschalter, Switch pin
Falls das eine Frage war, formuliere sie nochmal anders, zeige den Schaltplan und benenne die verwendeten Produkte. "Irgendein" Kippschalter ist zu ungenau.
Titze C. schrieb: > @Veit D. und jetzt wird kompliziert für mich. Das Teil wird mit > einer > Powerbank betrieben der die Stromversorgung übernimmt. um die > Blinkfrequenzen zu ändern verwende ich einen Kippschalter, Switch pin Ich empfinde es als irrational, dass du mit keinem Piep auf die doch recht klare Pullup Ansage eingehst.
Hallo, so langsam weiß ich auch nicht was ich davon halten soll ...
Veit D. schrieb: > Hallo, > > so langsam weiß ich auch nicht was ich davon halten soll ... Ich würde Abstand halten.
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.