Also kann ich einfach von A0 zu GND eine Brücke herstellen und die Adresse ändert sich oder ?
Hi
Steht im DaBla, ob die Pins hoch oder runter gezogen werden wollen bzw. wie Diese unbeschaltet stehen.
Ein I²C-Scanner liefert Dir die aktuellen Adressen der gefundenen Slaves.
Wenn Du zwischen den Scans die Ax-Pins umklemmst, solltest Du eine Änderung der Adresse feststellen.
MfG
xhansdampfx:
Also kann ich einfach von A0 zu GND eine Brücke herstellen und die Adresse ändert sich oder ?
Warum willst Du das machen?
Mach doch den Sketch fertig mit dem was Du hast. Angeschlossen und gut ist.
Dein Problem löst sich nicht mit dem ändern der Adresse!
Für Dich herausgesucht: Datasheet - Da steht alles drin was Du brauchst.https://www.nxp.com/docs/en/data-sheet/PCF8574_PCF8574A.pdf
Ich habe gemerkt, das es nicht an der Adresse liegt sondern, wenn ich in meinem Code im Loop den Zeitabfrage Teil raus nehme, geht alles andere, wenn ich das Stück Code wieder rein kopiere und neu hochlade bringt mein Display kein Bild mehr.
#include <DS3231.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
//Moisture Sensor
const int dry = 804;
const int wet = 420;
//Lcd Screen
LiquidCrystal_I2C lcd(0x27,20,4);
//Thermistor
int tempPin = A0;
//Time Module
DS3231 clock;
RTCDateTime dt;
//Zeitraum 1
const int OnHour = 20;
const int OnMin = 49;
const int OffHour = 21;
const int OffMin = 55;
//Zeitraum 2
const int OnHour2 = 18;
const int OnMin2 = 15;
const int OffHour2 = 20;
const int OffMin2 =15;
//Relay
int Relay = 12;
void setup() {
//Time Module
Serial.begin(9600);
//Relay
pinMode(Relay,OUTPUT);
//LCD Screen
lcd.init();
}
void loop() {
//Zeitabfrage
dt = clock.getDateTime();
if (dt.hour == OnHour && dt.minute == OnMin || dt.hour == OnHour2 && dt.minute == OnMin2){
Serial.println("Bewässerung läuft");
}
else if (dt.hour == OffHour && dt.minute == OffMin || dt.hour == OffHour2 && dt.minute == OffMin2){
Serial.println("Bewässerung läuft nicht");
}
//Thermistor
int tempReading = analogRead(tempPin);
// This is OK
double tempK = log(10000.0 * ((1024.0 / tempReading - 1)));
tempK = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * tempK * tempK )) * tempK ); // Temp Kelvin
float tempC = tempK - 273.15; // Convert Kelvin to Celcius
//Moisture Sensor
int SensorVal = analogRead(A1);
int percentageHumididy = map(SensorVal, wet, dry, 100, 0);
Serial.println(analogRead(A1));
//Lcd Screen
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("Temperatur:"); lcd.print(tempC);
lcd.setCursor(0,1);
lcd.print("Bodenfeuchte:");lcd.print(percentageHumididy);lcd.print("%");
lcd.setCursor(0,2);
lcd.print("1 Von:"); lcd.print(OnHour); lcd.print(":"); lcd.print(OnMin); lcd.print("-"); lcd.print(OffHour); lcd.print(":"); lcd.print(OffMin);
lcd.setCursor(0,3);
lcd.print("2 Von:"); lcd.print(OnHour2); lcd.print(":"); lcd.print(OnMin2); lcd.print("-"); lcd.print(OffHour2); lcd.print(":"); lcd.print(OffMin2);
}
xhansdampfx:
Also kann ich einfach von A0 zu GND eine Brücke herstellen und die Adresse ändert sich oder ?
Hallo,
Nein !!
Er redet von den Adressleitungen auf dem I2C Modul um die Adress einzustellen . Du redst von dem Pin A0 des Arduino das ist nicht das selbe.
Eigendlich sollte es laufen es könnte noch ein Problem mit den "Bus-Widerständen" geben. Such mal nach I2C Scanner und las dir anzeigen ob beide Teilenehmer am Bus gefunden werden. Erst mit je einem Modul dann beide.
Heinz
Danke für die Kritik, ich habe einen Scanner, beide einzeln werden erkannt, zusammen wird aber nur der Display erkannt obwohl der Display 0x27 und mein DS3231 Modul die Adresse 0x68 hat.
Hallo,
nochmal die Frage !!!!
was meinst Du mit Zeitabfrage ? die Zeile
dt = clock.getDateTime();
was meinst Du mit display bring kein Bild mehr ?
bleibt dunkel ?
Heinz
xhansdampfx:
Ich habe gemerkt, das es nicht an der Adresse liegt sondern, wenn ich in meinem Code im Loop den Zeitabfrage Teil raus nehme, geht alles andere, wenn ich das Stück Code wieder rein kopiere und neu hochlade bringt mein Display kein Bild mehr.//Zeitabfrage
dt = clock.getDateTime();
if (dt.hour == OnHour && dt.minute == OnMin || dt.hour == OnHour2 && dt.minute == OnMin2){
Serial.println("Bewässerung läuft");
}
else if (dt.hour == OffHour && dt.minute == OffMin || dt.hour == OffHour2 && dt.minute == OffMin2){
Serial.println("Bewässerung läuft nicht");
}
Du hast schon wieder die Klammern weggelassen!
Warum?
xhansdampfx:
Danke für die Kritik, ich habe einen Scanner, beide einzeln werden erkannt, zusammen wird aber nur der Display erkannt obwohl der Display 0x27 und mein DS3231 Modul die Adresse 0x68 hat.
damit würde ich auf die Widerstände tippen. ?
ich bin jetzt nicht der I2C Spezi , warte mal da kommt bestimmt noch was.
Heinz
Hallo,
ja der Display bleibt Dunkel.
//Zeitabfrage
dt = clock.getDateTime();
if ((dt.hour == OnHour && dt.minute == OnMin) || (dt.hour == OnHour2 && dt.minute == OnMin2)){
Serial.println("Bewässerung läuft");
}
else if ((dt.hour == OffHour && dt.minute == OffMin) || (dt.hour == OffHour2 && dt.minute == OffMin2)){
Serial.println("Bewässerung läuft nicht");
}
Das ist der Teil meines Codes, wenn ich ihn aus meinem Script lösche funktioniert mein Display ganz normal, mit dem Code bleibt er dunkel.
xhansdampfx:
ja der Display bleibt Dunkel.
Das wird auch mit Änderung der Adresse dunkel bleiben.
//Zeitabfrage
dt = clock.getDateTime();
if ((dt.hour == OnHour && dt.minute == OnMin) || (dt.hour == OnHour2 && dt.minute == OnMin2)){
Serial.println("Bewässerung läuft");
}
else if ((dt.hour == OffHour && dt.minute == OffMin) || (dt.hour == OffHour2 && dt.minute == OffMin2)){
Serial.println("Bewässerung läuft nicht");
}
Aehm der unterscheidet sich von oben. Egal.
Ersetz das mal durch folgendes und erzähl mal, was Du auf dem seriellen Monitor ausgegeben bekommst.
//Zeitabfrage
Serial.println("Start Uhrabfrage");
dt = clock.getDateTime();
Serial.println(dt.hour);
Serial.println(dt.minute);
Serial.println("Ende Uhrabfrage");
if ((dt.hour == OnHour && dt.minute == OnMin) || (dt.hour == OnHour2 && dt.minute == OnMin2)){
Serial.println("Bewässerung läuft");
}
else if ((dt.hour == OffHour && dt.minute == OffMin) || (dt.hour == OffHour2 && dt.minute == OffMin2)){
Serial.println("Bewässerung läuft nicht");
}
Serial.println("Hier soll es weiter gehen");
Hallo, Es bleibt leider bei Start Uhrabfrage
Aber wenn ich mein Display von A4 und A5 abstecke funktioniert alles Perfekt (ohne den Code zu ändern)
xhansdampfx:
Hallo, Es bleibt leider bei Start Uhrabfrage
Danke, das Du dran bleibst. Ich werd Dich versuchen zu begleiten.
Las den Aufbau so wie er ist.
In der Arduino-IDE findest Du unter
DATEI - BEISPIELE - BEISPIELE EIGENER BIBLIOTHEKEN
ein Example, welches DS3231_simple heisst.
Lade das mal und schau mal, ob Du auf dem seriellen monitor Datum/Uhrzeit ausgegeben bekommst
Wenn ja, versuch mal gleich danach Deinen Sketch wieder reinzuladen.
Meld Dich, ob er weiter stehen bleibt.
Ich hab es geschaftt!!!!!!!!!!!!!!!!!!!!!!!!!!
xhansdampfx:
Ich hab es geschaftt!!!!!!!!!!!!!!!!!!!!!!!!!!
ich rate:
Nach dem Example hats funktioniert?
Geb mal ein paar infos...
Ich habe dieses Video gesehen:
Bei Minute 1:47 benutzt er 10K Widerstände und er Steck beide Geräte an den gleichen Pins an, ich hatte das Display an A4 und A5 und den DS3231 an SCL und SDA (Hab einen Arduino Uno).
Es Funktioniert auch ohne diese 2 Widerstände, ich muss nur beide geräte an SCL und SDA anschließen.
Ich hatte meinen Display an den anderen Ports weil das in Tutorial auch so war
xhansdampfx:
[...]ich hatte das Display an A4 und A5 und den DS3231 an SCL und SDA (Hab einen Arduino Uno).Es Funktioniert auch ohne diese 2 Widerstände, ich muss nur beide geräte an SCL und SDA anschließen.
Ich hatte meinen Display an den anderen Ports weil das in Tutorial auch so war
Es funktioniert NUR ohne die Widerstände.
A4 ist SDA und A5 SCL
Sonst wäre ich schon vorher drüber gestolpert...
Du hattest geschrieben, das Du ein elegoo-Kit benutzt. Aber die Widerstände "verschwiegen".
Schön, wenns geht. ![]()
Na dann noch als Lektüre.
Zum nachschauen:
https://www.arduino.cc/en/reference/board
Und zum runterladen:
Die Widerstände hatte ich seit dem Video drin, dann ging es nicht hab sie raus genommen und dann ging es, ich hatte die Widerstände drin um einfach jede Möglichkeit zu testen.
Das Haupt Problem war einfach das ich nicht beide Modulen an den gleichen SDA und SCL pins hatte .
Danke für die nette und Schnelle Hilfe.
Bei den Widerständen im Video, handelt es sich um Pullup-Widerstände (bei ca. 1:47)
Im dazu gesprochenen Text heißt es:
"... two 10 kOhm resistors which act as pullup resistors for the two I2C lines."
Hi
Das ist NICHT Dein Problem gewesen.
SDA und A4 sind identisch - da zwischen sind nur wenige Zentimeter Leiterbahn.
Gleiches mit SCL und A5.
Zumindest auf Uno/Nano sind A4/A5 die I²C-Pins, egal wie oft Diese auf der Platine noch als SDA und SCL vorkommen - Das sind A4 und A5!
MfG