Forum: Mikrocontroller und Digitale Elektronik Fehler bei PCF8574.h Bibliotheke


von Tobias R. (elkokiller)


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

}

von g457 (Gast)


Lesenswert?

> 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.

von Tobias R. (elkokiller)


Angehängte Dateien:

Lesenswert?

oh, sorry!

Wäre klasse wenn du mir dann sagst wie ich die richtige Stelle finde

: Bearbeitet durch User
von Falk B. (falk)


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.

von Thomas G. (Firma: Frickelhauptquartier) (taximan)


Angehängte Dateien:

Lesenswert?

Ich hab auf die Schnelle nur das gefunden:

pinMode(onboardLed, OUTPUT);

Welche Lib von wem? Welche Version?

von Wolfgang (Gast)


Lesenswert?

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?

von Falk B. (falk)


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

: Bearbeitet durch User
von Falk B. (falk)


Lesenswert?

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.

von Tobias R. (elkokiller)


Lesenswert?

Helft mir bitte nochmal:
Wie bekomme ich ihn den jetzt zum schreiben?

von erklehr behr (Gast)


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(...).

von Falk B. (falk)


Lesenswert?

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!

von erklehr behr (Gast)


Lesenswert?

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.

von erklehr behr (Gast)


Lesenswert?

Tobias R. schrieb:
> Helft mir bitte nochmal:

In Zukunft bitte nicht primär die Arduino-Klassen für fehler-
haft beschuldigen.

von Tobias R. (elkokiller)


Lesenswert?

cool, und ich hab es verstanden

Besten Dank!

von Falk B. (falk)


Lesenswert?

Tobias R. schrieb:
> cool, und ich hab es verstanden

Na dann zeig mal dein lauffähiges Programm.

von Tobias R. (elkokiller)


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

}

von Falk B. (falk)


Lesenswert?

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.

von Tobias R. (elkokiller)


Lesenswert?

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

von Falk B. (falk)


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!

: Bearbeitet durch User
von Tobias R. (elkokiller)


Lesenswert?

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

von Falk B. (falk)


Lesenswert?


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
Noch kein Account? Hier anmelden.