Fehler bei PCF8574.h Bibliotheke

#6659440
Lesenswert?

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);

}
#6659456
Lesenswert?

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.
#6659463
Lesenswert?

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 #6659482
Lesenswert?

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(...).
#6659587
Lesenswert?

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);

}
#6659601
Lesenswert?

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!

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