Hallo zusammen, ich habe sicher ein ganz simples Problem, stehe aber irgendwie auf dem Schlauch. Ich möchte mit meinen Lolin Modulen über i2C einen PCF8574 ansteuern. Dazu habe ich, wie in vielen Beispielen vorgesehen, die Bibliotheke "PCF8574.h" in den Sketch rein genommen. Als Fehlermeldung erhalte ich bei der Ansteuerung der Ports die Meldung 'class PCF8574' has no member named 'pinMode'. Ich habe jetzt schon diverse ähnliche Sketches gefunden die zur Definition der der Ports immer "pinMode" nutzen. Ich wüsste auch nicht wie es anders funktionieren sollte. Wer kann mir helfen? Hier der gesamte Sketch: #include <ESP8266WiFi.h> #include <Wire.h> #include "PCF8574.h" PCF8574 pcf8574(0x38); void setup() { Serial.begin(115200); pcf8574.begin(); pcf8574.pinMode(P1,OUTPUT); pcf8574.pinMode(P0,OUTPUT); } void loop() { pcf8574.digitalWrite (P0, HIGH); pcf8574.digitalWrite (P1, HIGH); delay(1000); pcf8574.digitalWrite (P0, LOW); pcf8574.digitalWrite (P1, LOW); delay(1000); }
> Hier der gesamte Sketch: ..und wenn Du uns jetzt noch die PCF8574.h (nebst restlichem Glump) zeigst, dann können wir Dir die Arbeit abnehmen, selber nachzusehen.
oh, sorry! Wäre klasse wenn du mir dann sagst wie ich die richtige Stelle finde
:
Bearbeitet durch User
Tobias R. schrieb: > Wäre klasse wenn du mir dann sagst wie ich die richtige Stelle finde Mein Gott, für so ein ECHT einfachen IC eine eigene C++ Klasse? Was kommt als nächstes? Ein "Hello World." Framework? Der IC ist TRIVIAL! Es gibt nur einen EINFACHEN Schreib- oder Lesezugriff mit EINEM Byte. Das kann man mit der wire-Klasse selber machen. Schau dir die Beispiele dazu an.
Ich hab auf die Schnelle nur das gefunden: pinMode(onboardLed, OUTPUT); Welche Lib von wem? Welche Version?
Tobias R. schrieb: > Als Fehlermeldung erhalte ich bei der Ansteuerung der Ports die Meldung > 'class PCF8574' has no member named 'pinMode'. Und wer sagt, dass die von dir verwendetet Bibliothek soetwas unterstützen soll?
Tobias R. schrieb: > Ich habe jetzt schon diverse ähnliche Sketches gefunden die zur > Definition der der Ports immer "pinMode" nutzen. Ich wüsste auch nicht > wie es anders funktionieren sollte. Anders. Die Methode pinMode gibt es in der Klasse nicht. Sieht man auch im Quelltext. Die Richtung der Datenpins wird mit dem Schreibzugriff auf die Daten festgelegt. Klingt komisch, ist aber so! [[Port-Expander PCF8574]] (Warum erkennt die Forensoftware das nicht als Artikel?) https://www.mikrocontroller.net/articles/Port-Expander_PCF8574
:
Bearbeitet durch User
Thomas G. schrieb: > Ich hab auf die Schnelle nur das gefunden: > > pinMode(onboardLed, OUTPUT); Das ist ein normales IO-Pin am Arduino, welches immer vorhanden ist. onboardLed ist ein #define aus den Untiefen des Arduinoframeworks.
Helft mir bitte nochmal: Wie bekomme ich ihn den jetzt zum schreiben?
Falk B. schrieb: > Die Richtung der Datenpins wird mit dem Schreibzugriff auf > die Daten festgelegt. Das ist irreführend für den TO. Die Richtung der Datenpins (die der TO irrtümlicher Weise initialisieren will) für den PCF8574 wird implizit innerhalb der Klasse (--> wire) festgelegt. Das alles macht bereits der Aufruf PCF8574::begin(...).
Tobias R. schrieb: > Helft mir bitte nochmal: > Wie bekomme ich ihn den jetzt zum schreiben? Mit den Methoden write8 (alle 8 IOs gleichzeitig) oder write (einzelnes IO). Nomen est omen!
Tobias R. schrieb: > Wie bekomme ich ihn den jetzt zum schreiben? Lasse die Aufrufe pcf8574.pinMode weg und benutze nur die Methoden write oder write8 wie es Falk schon geschrieben hat.
Tobias R. schrieb: > Helft mir bitte nochmal: In Zukunft bitte nicht primär die Arduino-Klassen für fehler- haft beschuldigen.
gerne: #include <ESP8266WiFi.h> #include <Wire.h> #include "PCF8574.h" PCF8574 pcf8574(0x38); void setup() { Serial.begin(115200); pcf8574.begin(); } void loop() { pcf8574.write(0,HIGH); pcf8574.write(1,HIGH); pcf8574.write(2,HIGH); pcf8574.write(3,HIGH); pcf8574.write(4,HIGH); pcf8574.write(5,HIGH); pcf8574.write(6,HIGH); pcf8574.write(7,HIGH); delay(1000); pcf8574.write(0,LOW); pcf8574.write(1,LOW); pcf8574.write(2,LOW); pcf8574.write(3,LOW); pcf8574.write(4,LOW); pcf8574.write(5,LOW); pcf8574.write(6,LOW); pcf8574.write(7,LOW); delay(1000); }
Schon mal was von einer Schleife gehört? Oder wirst du nach der Anzahl von Codezeilen bezahlt? Und deine 8 Funktionsaufrufe sind zwar korrekt, werden aber so schnell durchlafen, daß es wie ein einzelner Schaltvorgang aller IOs aussieht. Nicht sehr sinnvoll für eine Demonstration.
was willst du? 1. Die LED blinkt ca. im sec Takt (alle 8 natürlich) 2. Das Programm hier ist doch nur zum spielen für mich und hilft so vielleicht auch anderen
Tobias R. schrieb: > was willst du? > > 1. Die LED blinkt ca. im sec Takt (alle 8 natürlich) Eben DAS könne man ändern, indem man die Ios einzeln schaltet und dazwischen ne Pause macht. Denn das ist ja die wesentliche Eigenschaft des ICs bzw. der Klasse. Die einzelne Ansteuerung der IOs. > 2. Das Programm hier ist doch nur zum spielen für mich und hilft so > vielleicht auch anderen Aber nur dann, wenn es was Gescheites demonstriert. Einen Funktionsaufruf mit C&P zu kopieren und ne Zahl zu ändern ist maximal lahm und nichtssagend.
1 | void loop() { |
2 | int i; |
3 | static bool state; |
4 | |
5 | state = !state; |
6 | for(i=0; i<8; i++) { |
7 | pcf8574.write(i, state); |
8 | delay(100); |
9 | }
|
Weniger Zeilen, weniger Tipperei, mehr Übersicht, mehr zu sehen!
:
Bearbeitet durch User
stimmt! Aber wie gesagt, mein Problem war zu beginn das Ding überhaupt zum Laufen zu bekommen weil ich mit der Bibliotheke nicht zurecht kam. Mein Programm ist wesentlich umfangreicher und hat nicht das Ziel, LED's blinken zu lassen. Ich wollte mit diesem Sketch auch deine Bitte das Thema deshalb auch nur qualifiziert abschließen
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.