Fehler bei PCF8574.h Bibliotheke

OP #6659440
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);

}
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.
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
Gast
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(...).
OP
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.
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!
OP
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 5 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.