Darf ich etwas fragen, ohne gleich furchtbar ausgelacht zu werden? Ich habe die Pins im Source-Code so abgeändert, dass das Spielzeug (7-Segment-Würfel) autonom auf einer "selbstgeschnitzten" Platine laufen soll, aber ich komme nicht drauf, warum es zwar auf der UNO-Platine läuft und da nicht. Platine ist korrekt und garantiert fehlerfrei. // Sieben Segment Würfel autonom auf separater Platine int segmente[10][7] = { {1,1,1,1,1,1,0}, // 0 {0,1,1,0,0,0,0}, // 1 {1,1,0,1,1,0,1}, // 2 {1,1,1,1,0,0,1}, // 3 {0,1,1,0,0,1,1}, // 4 {1,0,1,1,0,1,1}, // 5 {1,0,1,1,1,1,1}, // 6 {1,1,1,0,0,0,0}, // 7 {1,1,1,1,1,1,1}, // 8 {1,1,1,1,0,1,1}}; // 9 int pinArray[] = {14, 15, 5, 6, 11, 13, 12}; int buttonPin = 18; void setup() { pinMode (pinArray[5,6,11,12,13,14,15], OUTPUT); pinMode(buttonPin, INPUT); randomSeed(analogRead(0)); } void loop() { if (digitalRead(buttonPin)==1) { for (int i=0; i<40; i++) { showDigit(random(1,7)); delay(i); } } } void showDigit(int num) { for (int j=0; j<7; j++) { if (segmente[num][j]==1) { digitalWrite(pinArray[j], HIGH); } else { digitalWrite(pinArray[j], LOW); } } } (Fürs Arduino UNO Board sieht der Anfang so aus: int pinArray[] = {8,9,3,4,5,7,6}; int buttonPin = 12; void setup() { for (int i=3; i<10; i++) { pinMode(i, OUTPUT); } Die FOR- Schleife kann ich autonom nicht anwenden, weil die Ausgangspins nicht in einer Reihe liegen. Der ATMega ist korrekt auf Pins 7, 20 und 21 mit Versorgungsspannung und auf 8 und 22 mit GND gespeist und die Verdrahtung passt.
Lässt sich compilieren aber ich habe es zuerst anders gemacht: void setup() { pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(11, OUTPUT); pinMode(12, OUTPUT); pinMode(13, OUTPUT); pinMode(14, OUTPUT); pinMode(15, OUTPUT); pinMode(buttonPin, INPUT); randomSeed(analogRead(0)); } klappt auch nicht
1 | const byte pinArray[] {8,9,3,4,5,7,6}; |
2 | void setup() |
3 | {
|
4 | for(const byte p:pinArray)pinMode(p, OUTPUT); |
5 | }
|
6 | |
7 | void loop() |
8 | {
|
9 | |
10 | }
|
die Sprache lernen, welche man verwendet, beantwortet dann alle Fragen dieser Art.
:
Bearbeitet durch User
Geht aber auf dem UNO Board mit der FOR -Schleife auch for(const byte p:pinArray)pinMode(p, OUTPUT); Das funktioniert leider auch nicht
:
Bearbeitet durch User
Gerhard H. schrieb: > for(const byte p:pinArray)pinMode(p, OUTPUT); > > Das funktioniert leider auch nicht Warum nicht?
Michael B. schrieb: > Das funktioniert ? Natürlich nicht, das ist ein Fantasieprodukt. Aber so gehts:
1 | template<typename ArrayType,size_t N> void pinMode(const ArrayType (&pins)[N],byte mode) |
2 | {
|
3 | for(byte p:pins)pinMode(p, mode); |
4 | }
|
5 | |
6 | |
7 | const byte pinArray[] {8,9,3,4,5,7,6}; |
8 | |
9 | |
10 | void setup() |
11 | {
|
12 | pinMode(pinArray, OUTPUT); |
13 | }
|
Gerhard H. schrieb: > Ich habe die Pins im Source-Code so abgeändert, dass das Spielzeug > (7-Segment-Würfel) autonom auf einer "selbstgeschnitzten" Platine laufen > soll, aber ich komme nicht drauf, warum es zwar auf der UNO-Platine > läuft und da nicht. Was heißt "läuft nicht"? Geht es ein bisschen genauer? Hat dein Compiler vielleicht bereits Probleme mit dem Code und gibt die Fehlermeldung "warning: left operand of comma operator has no effect [-Wunused-value] pinMode (pinArray[5,6,11,12,13,14,15], OUTPUT);" aus?
Fange erstmal ganz einfach an, indem du alle LEDs einschaltest. Sonst nichts.
1 | void setup() { |
2 | pinMode(14,OUTPUT); |
3 | pinMode(15,OUTPUT); |
4 | pinMode(5,OUTPUT); |
5 | pinMode(6,OUTPUT); |
6 | pinMode(11,OUTPUT); |
7 | pinMode(13,OUTPUT); |
8 | pinMode(12,OUTPUT); |
9 | |
10 | digitalWrite(14,HIGH); |
11 | digitalWrite(15,HIGH); |
12 | digitalWrite(15,HIGH); |
13 | digitalWrite(6,HIGH); |
14 | digitalWrite(11,HIGH); |
15 | digitalWrite(13,HIGH); |
16 | digitalWrite(12,HIGH); |
17 | }
|
18 | |
19 | void loop() {} |
Leuchten dann alle Segmente? Wenn nicht, kontrolliere die Verkabelung. Wenn das soweit klappt, schreibe die wiederholten Funktionsaufrufe in eine for-Schleife mit pinArray um. Danach sehen wir weiter.
:
Bearbeitet durch User
Keinerlei Compilierprobleme, aber es gibt keine Anzeige auf dem Display. Hier wäre das Layout:
[quote]Leuchten dann alle Segmente? Wenn nicht, kontrolliere die Verkabelung. Wenn das soweit klappt, schreibe die wiederholten Funktionsaufrufe in eine for-Schleife mit pinArray um[/quote] Das habe ich schon mal getestet. Ja, leuchten alle
Es fehlen Abblock-Kondensatoren sowohl am Spannungsregler als auch am Mikrocontroller.
Gerhard H. schrieb: > Keinerlei Compilierprobleme, aber es gibt keine Anzeige auf dem Display. > > Hier wäre das Layout: Schaltplaene sind ueberbewertet. Gruesse Th.
Gerhard H. schrieb: > Das habe ich schon mal getestet. Ja, leuchten alle Dann der nächste Schritt: Gebe eine Zahl aus.
1 | void setup() { |
2 | ... pins initialisieren |
3 | showDigit(0); |
4 | }
|
5 | |
6 | void loop() {} |
Funktioniert das?
Stefan F. schrieb: > Dann der nächste Schritt: Gebe eine Zahl aus. Gerhard H. schrieb: > in dem Fall ganz bestimmt Was heißt das, funktioniert dein Programm soweit? Oder denkst du nur, dass es funktionieren sollte? Hast du die fehlenden Kondensatoren nachgerüstet? Baue dein Programm schrittweise auf, bis der Fehler wieder auftritt. Dann weißt du genau, an welchem Punkt es scheitert. Frage dann nochmal nach, wir helfen gerne weiter.
:
Bearbeitet durch User
Beitrag #7374113 wurde vom Autor gelöscht.
Stefan F. schrieb im Beitrag #7374113:
> Da greifst du übrigens auf Speicher außerhalb des Arrays zu.
Blödsinn!
Wie oben geschrieben, funktioniert das Programm mit den für den UNO äquivalenten Pin-Nummern auf dem UNO-Board perfekt, nur die eigenständige Platine ergibt keine Anzeige, was mir total unverständlich ist. 100µF beim Stabi - Eingang und 100nF beim Stabi-Ausgang hab ich nachgerüstet. Ich habe auch Folgendes probiert: ATMega in der Original-UNO-Platine und wie üblich, Drahtverhau zu den Vorwiderständen der 7-Segment-Anzeige probeweise verlegt und das läuft problemlos. Seltsame Sache
:
Bearbeitet durch User
Gerhard H. schrieb: > 100µF beim Stabi - Eingang und 100nF beim Stabi-Ausgang hab ich > nachgerüstet. Halte dich an die Vorgaben aus dem Datenblatt des Spannungsreglers. Kontrolliere die Stromversorgung an allen Versorgungspins, auch GND. Kontrolliere die Spannung am Reset Eingang. Wenn der Mikrocontroller für einen Quarz konfiguriert wurde, muss man den auch anschließen. Deine Angabe welches Programm bzw. welcher Test nun erfolgreich war, und welcher nicht, sind widersprüchlich. Sortiere dich mal. Wir brauchen den Schaltplan, Fotos vom Aufbau und exakt das Programm (Quelltext) mit der dazu gehörigen Fehlerbeschreibung.
Gerhard H. schrieb: > Ich habe auch Folgendes probiert: ATMega in der Original-UNO-Platine > und wie üblich, Drahtverhau zu den Vorwiderständen der 7-Segment-Anzeige > probeweise verlegt und das läuft problemlos. Da hat er auch Takt. Auf deinem Bord sind Pin 9 u.10 unbeschaltet. Internen Takt einschalten? Gruß, Reinhold
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.