Hallo an alle, Ich habe hier ein Sketch , der nicht richtig will. DHT11 und TFT 1.8 zoll gehen soweit. Läuft alles auf einen NANO.Habe das Display auf 8,9,10,11,13 laufen.DHT11 auf A0 und LED auf 5. Nun möchte ich ein 24 LED-Ring implentieren, das will aber nicht so recht. Komme da auch nicht weiter , da ich nicht so gut in C++ bin. Kann mir da einer bitte helfen? Datei hänge ich an. Viele Grüße und Danke , Lars N.
Lars N. schrieb: > Nun möchte > ich ein 24 LED-Ring implentieren, das will aber nicht so recht. Wo ist der real angeschlossen? Laut "deiner" Programmierung digitaler Pin 5. Außerdem ist PIN 5 nicht gleich PIN5. (Zeile 8 & Zeile 17) Versuche wenn du mehrere Komponenten zusammen baust. Sie erstmal nacheinander zu testen. Erleichtert ungemein und schließt viele Fehler aus.
1 | // Pins SCLK and MOSI are fixed in hardware, and pin 10 (or 53)
|
2 | // must be an output
|
3 | #define sclk 13 // for MEGAs use pin 52
|
4 | #define mosi 11 // for MEGAs use pin 51
|
5 | #define cs 10 // for MEGAs you probably want this to be pin 53
|
6 | #define dc 9
|
7 | #define rst 8 // you can also connect this to the Arduino reset
|
8 | #define PIN 5 // Digital PIN used on the Arduino
|
9 | #define NUMPIXELS 24 // number of LEDs in the ring
|
10 | #define LED_BRIGHTNESS 255 // general brightness of the LEDs from 0-255
|
11 | |
12 | // pin definition for the Leonardo
|
13 | // #define cs 7
|
14 | // #define dc 0
|
15 | // #define rst 1
|
16 | |
17 | Adafruit_NeoPixel ring = Adafruit_NeoPixel(NUMPIXELS,PIN5,NEO_GRB + NEO_KHZ800); |
:
Bearbeitet durch User
Hallo , ja , ist real an Pin 5 . #define PIN 5 // Digital PIN used on the Arduino #define NUMPIXELS 24 // number of LEDs in the ring #define LED_BRIGHTNESS 255 // general brightness of the LEDs from 0-255 Adafruit_NeoPixel ring = Adafruit_NeoPixel(NUMPIXELS,PIN,NEO_GRB + NEO_KHZ800); Habe es geändert. Danke. Habe die Komponenten nacheinander getestet, Lief alles gut bis der LED-Ring kam. Nun hab ich den Fehler : 'resetRing' was not declared in this scope Was heißt das jetzt ? Hab ich ne Klammer vergessen? Vielen Dank für die Hilfe.
:
Bearbeitet durch User
Lars N. schrieb: > Nun hab ich den Fehler : > 'resetRing' was not declared in this scope > > Was heißt das jetzt ? Hab ich ne Klammer vergessen? Das heißt soviel er kennt 'resetRing' nicht. Alle Unterprogramme sind nur in der ersten Zeile auskommentiert werden aber alle in der Loop aufgerufen.
:
Bearbeitet durch User
In der Doku von der Adafruit Library gibt es keine Funktion, die so heißt. Auch in deinem Quelltext gibt es keine Funktion, die so heißt, weil du die ersten Zeilen der Funktionen auskommentiert hast.
1 | void setup() { |
2 | // ring.begin(); //<== auskommentiert
|
3 | randomSeed(analogRead(0)); |
4 | |
5 | // Put this line at the beginning of every sketch that uses the GLCD:
|
6 | TFTscreen.begin(); |
7 | ...
|
8 | ...
|
9 | ...
|
"ring.begin()" haste versehentlich auskommentiert..
Gewöhne dir an, die Zeilen richtig einzurücken. Die Arduino IDE hat dazu sogar eine Automatisierung. Dann würdest du den Strukturfehler (den Rainer meint) selbst sehen. Innerhalb der loop() Funktion deklariert man ganz sicher keine weiteren Funktionen. Die gehören oben drüber. Ich wette, du hast einfach alle Zeilen auskommentiert, die der Compiler als fehlerhaft gemeldet hat. So einfach repariert man das aber nicht.
ha! jetzt hab ichs auch gesehen
1 | //void resetRing()
|
2 | {
|
3 | for (byte i = 0; i < NUMPIXELS; i++) { |
4 | ring.setPixelColor(i, ring.Color(0, 0, 0)); |
5 | ring.show(); |
6 | }
|
hast die Funktion auskommentiert. Klar findet er sie nicht. Sowieso erstaunlich, dass man die Funktionen einfach so im Nachgang, unterhalb der Loop, definieren darf. Das war letztens auch meine Frage: Die Arduino IDE analysiert wohl den Quellcode und kennt "seine" Funktionen auch ohne explizite Prototypendeklaration. Mach mal void setup() { ... ... } void loop() { ... .... ... { void ResetRing() { ... ... } edit: groß- kleinschreibung resetRing() { ... ... }
:
Bearbeitet durch User
ich find das schon 'komisch', dass alle nur noch irgendwas zusammenkopieren wolln, aber null plan haben, was da tatsächlich passiert. Es ihnen auch egal ist. Wenn's nicht funktioniert, wird nach der nächsten LIB gesucht. eine wird schon gehen...
Hallo , ich befasse mich schon damit. Aber mit wenig Zeit auf Grund von Beruf kann man es nicht so einfach lernen . Versuche schon , so viel wie möglich selber zu machen , aber alles kann man einfach nicht als Anfänger wissen. void loop() { { resetRing();<<<< Hat ein Fehler delay(3000); simpleCircling(); tailCircling(); pairCircling(); colorWipe(); randomFlashes(); flash(); randomColors(); rainbow(); alternatingColors(); alternateLeds(); pendulum(); fire(); } Muss ich eigentlich die LED resetten? Hatte auch eine Klammer vergessen , ist eingetragen. Soll ich den Sketch nochmal neu hochladen? Erledigt Gruß Lars @Stefan: Ja ,hatte ich auskommentiert, weil ich erst die anderen Sachen zum laufen bringen wollte. Eingerückt habe ich jetzt schon. Jetzt wo du es sagst ;)
:
Bearbeitet durch User
Strg-T in der Arduino IDE, dann muss man nix selber einrücken. es ist ein Klammerfehler. Die Funktionen wie resetRing() findet der Arduino Parser nicht weil die in loop() definiert sind. In C++ müssen die Funktionen oder ihre Prototypen vor der Benutztung definiert sein, beim Arduino verfummelt ein Preprozessor die .ino Quellen um das zu gewährleisten. Und DEMO_DELAY ist nicht definiert.
Nochmal: Benutze die Funktion zum automatischen Formatieren, dann siehst du dass deine Struktur immer noch völlig durcheinander ist. Ich habe das gerade mal mit http://format.krzaq.cc/ weil ich die Arduino IDE nicht auf meinem Arbeitsplatz PC installieren darf. Siehe Anhang. Du hast immer noch alle Funktionen innerhalb der loop().
Verstehe ich das richtig , das die "{ resetRing(); delay(3000); simpleCircling(); tailCircling(); pairCircling(); colorWipe(); randomFlashes(); flash(); randomColors(); rainbow(); alternatingColors(); alternateLeds(); pendulum(); fire(); } in die Setup gehören? Oder ganz weg der Teil? Loop ist doch wiederkehrende Abrufe von Programfunktionen.
Lars N. schrieb: > Loop ist doch wiederkehrende Abrufe von Programfunktionen. Mannomann ..... Funktionen dürfen nicht innerhalb einer anderen Funktion definiert sein. Loop() ist eine Funktion. Darin sind bei dir andere Funktionen definiert. Die gehören vor Loop() und/oder Setup() gesetzt. Lars N. schrieb: > Loop ist doch wiederkehrende Abrufe von Programfunktionen. Funktionen werden aufgerufen, nicht abberufen oder abgerufen.
Die Programmiersprache C++ lernt man besser auf dem PC ohne Mikrocontroller.
Johannes S. schrieb: > beim Arduino verfummelt ein Preprozessor die .ino Quellen um das zu > gewährleisten. ... weshalb die .ino Beispiele im "VsCode mit PlatformIO" auch alle nicht laufen. Hehe 😜
Erst Setuo Dann Loop Nach der letzten Klammer Alle deine Speialeffekte. die kannst du kann in der Loop aufrufen. Aber klarmachen musst du die untendrunter. Jede für sich ganz am Ende mit eigenen geschweiften Klammern. Normalerweise oberhalb setup als Funktionsprototyp. Aber, wie eben richtig gesagt, das verwendete Werkzeug "erlaubt" das hier so.
Nabend, heute nicht mehr weiter , bin platt durch das viele Probieren. Setze mich Morgen wieder dran. Danke an allen , die mir geholfen oder helfen werden. Gute Nacht allerseits Gruß Lars
:
Bearbeitet durch User
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.