Forum: Mikrocontroller und Digitale Elektronik Sketch für Projekt will nicht so richtig


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Lars N. (lars_n856)


Angehängte Dateien:

Lesenswert?

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.

von Rainer S. (enevile) Benutzerseite


Lesenswert?

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
von Lars N. (lars_n856)


Lesenswert?

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
von Rainer S. (enevile) Benutzerseite


Lesenswert?

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
von Stefan ⛄ F. (stefanus)


Lesenswert?

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.

: Bearbeitet durch User
von Axel R. (axlr)


Lesenswert?

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..

von Stefan ⛄ F. (stefanus)


Lesenswert?

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.

von Axel R. (axlr)


Lesenswert?

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
von Axel R. (axlr)


Lesenswert?

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...

von Lars N. (lars_n856)


Angehängte Dateien:

Lesenswert?

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
von Johannes S. (jojos)


Lesenswert?

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.

: Bearbeitet durch User
von Stefan ⛄ F. (stefanus)


Angehängte Dateien:

Lesenswert?

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().

: Bearbeitet durch User
von Lars N. (lars_n856)


Lesenswert?

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.

von manno mann (Gast)


Lesenswert?

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.

von Stefan ⛄ F. (stefanus)


Lesenswert?

Die Programmiersprache C++ lernt man besser auf dem PC ohne 
Mikrocontroller.

: Bearbeitet durch User
von Axel R. (axlr)


Lesenswert?

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 😜

von Axel R. (axlr)


Lesenswert?

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.

von Lars N. (lars_n856)


Lesenswert?

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
von Axel R. (axlr)


Lesenswert?

Ja, gute Nacht.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.