Mein Shiftout macht mir verrückt.

Ich bekomme einen error

too few arguments to function ‘void shiftOut(uint8_t, uint8_t, uint8_t, uint8_t)’

Kann momentan hier noch nichts mit anfangen (zu wenig Kenntnis)
Bekomme die error auf Zeile 271 in diesen Script von meine Treppenbeleuchtung, mit Google komm ich nicht weiter (weiß einfach nicht was es bedeutet)

Möchte es gerne selbst lösen, brauche nur Tipps wo ich suchen muss oder was es bedeutet (etwas mit 8bits?)

Datei ist zu groß :confused:

Forumtest.zip (5.23 KB)

Kann momentan hier noch nichts mit anfangen (zu wenig Kenntnis)

Übersetze die Meldung ins Deutsche! Glaube der Meldung.

Leite daraus eine Handlung ab.

Hallo,

"too few" ... zu wenig Argumente

Dein Code in Zeile 271 lautet:

shiftOut(random(0, 255));

Du übergibts dem Funktionsaufruf shiftOut nur ein Argument. Nämlich den Rückgabewert der Funktion random(...). Laut Fehlermeldung erwartet die Funktion shiftOut jedoch 4 Parameter. Schau dir nochmal die Funktion shiftOut an was die macht und was für Werte sie haben möchte.

Datei ist zu groß

Um den Fehler zu erhalten, braucht man nur einen Sketch mit einer Handvoll Zeilen. Den könntest du mit vorhandenen Beispielen zu shiftOut vergleichen und den Unterschied erkennen.

Ein Tip: uint8_t ist ein Datentyp, der auch andere Namen haben kann.

Möchte es gerne selbst lösen, brauche nur Tipps wo ich suchen muss oder was es bedeutet (etwas mit 8bits?)

Dann darf man dir nicht weiter helfen :)

shiftOut ist eine vordefinierte Funktion in der Arduino IDE.

Du verwendest in deinem Sketch eine eigene Funktion mit dem gleichen Namen. Das führt zu Konflikten. Benenne deine eigene Funktion um.

MicroBahner:
shiftOut ist eine vordefinierte Funktion in der Arduino IDE.

Du verwendest in deinem Sketch eine eigene Funktion mit dem gleichen Namen. Das führt zu Konflikten.
Benenne deine eigene Funktion um.

Nein!
Funktionen überladen ist kein Problem, solange sie sich in der Parametersignatur unterscheiden.
Sie wird nur nicht gefunden, weil sie am Ende der Datei steht, und Arduino daran versagt automatisch einen Prototypen zu erstellen.

Also muss man das zu Fuß machen!

Schreibt man an den Anfang der *.ino Datei:

#include <ESP8266WebServer.h>
#include <ESP8266WiFi.h>
#include <SPI.h>


void shiftOut(byte dataOut); // <<<<--- dieses Einfuegen


//--------------------------------------
// Configuration Start
//--------------------------------------

// PIR-Data-Pins
#define PIR_TOP_PIN D0
// schnipp

Dann tuts das auch.

void shiftOut(byte dataOut); // <<<<— dieses Einfuegen

Habe gemerkt dass ich besser alle “Funktionen” vor der “void setup () und void loop()” setzen kann dann hab ich auf jeden Fall keine Problemen mehr mit kompilieren

Man muss die Funktion bekannt machen bevor sie verwendet wird. Wenn du eine Funktion nur in einer anderen Funktion (und nicht in loop()) verwendest hast du das gleiche Probleme.

i.d.R. schafft es die IDE die Prototypen automatisch zu erstellen. Aber es gibt ein paar Ausnahmen. Dann reicht es wie gesagt den Prototyp oben hinzuschreiben. Die eigentliche Funktion kann weiterhin unten stehen

:o :o habe keine Probleme mit kompilieren aber dass Script läuft jetzt nicht richtig :confused: Geh mal wieder umbauen

Hab alles wieder hinten die "void setup () und void loop()" und habe einen Fehler gefunden es fehlte eine klammer "}" als abschließe in die "loop". Ich kann jetzt auch normal kompilieren nur der ESP8266Webserver ist sehr träge geworden.

Dann setze doch mal den kompletten Sketch in der Endfassung hier rein, evtl. können wir die Bremse finden.

Gruß Tommy

Ich hoffe ihr könnte etwas finden Heute morgen ging es noch rück-zück und jetzt nach alle Änderungen ist es wie Teer.

Forumtest.ino.zip (5.12 KB)

Hi

Habe keinen ESP, aber einen kleinen Tip für Dich: Sichere Dir Deine Sketche ab und zu, gerade, bevor Du größere Änderungen machst. Selber kopiere ich mir die .ino-Datei erneut in den Ordner (bzw. dupliziere Diese) und benenne das File in .INA um. (da alle .ino Files beim Kompilieren verarbeitet werden und dann sämtliche Doppeldefinitionen Fehler verursachen)

So kannst Du zumindest auf einen früheren Stand zurück, wenn Mal Alles kaputt repariert wurde :)

MfG

Du machst alle Aktionen in jedem Loopdurchlauf immer wieder. Muss das so sein?

Oder kannst Du manche Sachen auch nur alle Sekunden/10 Sekunden machen? Damit könntest Du Deinen Loop entlasten und der hätte mehr Zeit für die Bedienung des Webbrowsers. Also Zeitsteuerung mit millis() könnte helfen. Die Delays im Loop und den darin aufgerufenen Funktionen tragen auch nicht zur Beschleunigung bei. Whiles im Loop blockieren auch den Ablauf.

Gruß Tommy

postmaster-ino:
Hi

Habe keinen ESP, aber einen kleinen Tip für Dich:
Sichere Dir Deine Sketche ab und zu, gerade, bevor Du größere Änderungen machst.
Selber kopiere ich mir die .ino-Datei erneut in den Ordner (bzw. dupliziere Diese) und benenne das File in .INA um. (da alle .ino Files beim Kompilieren verarbeitet werden und dann sämtliche Doppeldefinitionen Fehler verursachen)

So kannst Du zumindest auf einen früheren Stand zurück, wenn Mal Alles kaputt repariert wurde :slight_smile:

MfG

Dank für diesen Tipp,
Ich versuche es jedes mal aber dann Pass ich wieder nicht auf und habe schon wieder auf Speichern gedrückt.

Oder kannst Du manche Sachen auch nur alle Sekunden/10 Sekunden machen?

Ich verstehe hieraus dass ich die Funktion anrufe außerhalb der "loop" platzieren soll und dann eine delay mit milis machen. Dass versuch ich mal.

Danke dass du dir die zeit genommen hat um dass Script mal an zu schauen.