Sketch für Projekt will nicht so richtig

OP #6678096
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.
Angehängte Dateien:
Persönliche Seite #6678103
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);
OP #6678157
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.
Gast #6678172
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.
Gast #6678180
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.
#6678187
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()
{
...
...
}
OP #6678227
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 ;)
Angehängte Dateien:
Gast #6678253
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.
Gast #6678276
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().
Angehängte Dateien:
OP #6678296
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.
Gast #6678303
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.
#6678462
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren