Hier ist eine Grafik, die den Zusammenhang zwischen dem seriellen Monitor und dem LCD zeigt, vllt. hilft das ja jemandem beim Verständnis:D
P.S.: eigentlich sind die Werte zwischen dem LCD und seriellem Monitor identisch;)
Ja , heißt das my_xy_projekt kommt jetzt anhand der Werte auf dem LCD für die beiden ersten Sensoren ( 129 Grad Celsius )zu dem Ergebnis, dass hier der Hase im Pfeffer liegt?
Ja, bei fehlender Verbindung, oder defektem Sensor kommt -127 Merken für die Zukunft.
Und das erscheint dann in Dauerschleife im seriellen Monitor ? :
und auf dem LCD können andere Werte erscheinen so wie 129 ?
Wen der Bus durcheinander ist kann sein 129,, bei fehlenden -127.
Ich habe mir die Library runtergeladen, und es erscheinen bei mir in arduino jetzt zwei wenn ich sie einbinde:
#include <legacy.h>
#include <NoiascaLiquidCrystal.h>
Brauche ich die hier auch noch in meinem Sketch?:
Hallo LeonardoFiando
Erzeuge über Nacht mit einem Terminalprogramm ein Datalogging, das du anschließend analysieren kannst.
Und nicht vergessen den Laptop so einzustellen, dass er sich nicht wieder abschaltet.
Die Sensoren austauschen kann man danach immer noch.
du must nur das machen, einbinden
#include <NoiascaLiquidCrystal.h> // download library from https://werner.rothschopf.net/202009_arduino_liquid_crystal_intro.htm
#include <NoiascaHW/lcd_PCF8574.h>
LiquidCrystal_PCF8574 lcd(0x27, 16, 4);
Rest bleibt wie vorher
Okay, das mache ich heute Nacht nochmal! Könntest Du bitte noch etwas zu post#109 sagen:
Ist das hier der seriöse Link zum Dowload: CoolTerm - Download (lo4d.com)?
Muss ich in dieses Programm dann einfach das Script vom seriellen Monitor per copy/ paste einfügen?
Soll ich den Sketch wie in post#120 (Einbinden der DS18B20 Library und der noiascaliquidcrystal Library ) trotzdem schon umschreiben oder damit noch noch bis nach dem neuen Test warten?
Guck mal bei ct oder Heise für einen down-load-link (wat en Wort)
Das Terminalprogramm installieren, starten, den richtigen ComPort auswählen und die Aufzeichnung starten.
Das IDE darf zu diesem Zeitpunkt keine Verbindung zum Arduino haben, da die Verbindung vom Terminalprogramm übernommen wird.
Das geht mit jedem handelüblichen Terminalprogramm.
Den Sketch von der letzen Nacht drauf lassen.
Okay, danke:)
wo "siehst" du die legacy.h? die gibt es zwar aber die wird nicht wirklich verwendet. Da drinnen sind nur Funktionen die nicht Teil der LCD API 1.0 sind.
dann bitte wirf noch einen Blick auf die mitgelieferten Beispiele. Meine Library will dass Wire.h eingebunden wird und Wire.begin(); im Setup aufgerufen wird.
Du kanst doch dein Lapi einstellen das er über Nacht ganze zeit läuft ohne aus zu gehen
Win 10 Einstellungen, System, Netzbetrieb und Energiesparmodus, auf niemals setzen
Auch.
Das ist ein Problem - das sich möglicherweise aufschaukelt.
Sinnvollerweise wäre da jetzt zu testen, ob das ggfls. durch einen Reset aufzulösen geht.
Ihr baut an zu vielen Baustellen gleichzeitig...
Ich würde gerne wissen, was der veränderte Code von mir bringt.
Einfachh wieder wie gehabt. Der Code gibt auf dem SerMon aus, wenns "knallt".
Ich habe den Wertebereich für die Sensorvariablen vergrößert, sodas auch die negativen Zahlen nicht zum überlauf führen.
Die Auswertung geht nun auf kleiner 0°C oder größer 50°C - Beides sollte nie eintreten.
Wenn doch, dann soll nach der Meldung eine Endlosschleife dafür sorgen, das der WDT nicht mehr resettet wird.
Damit löst der einen (fast) kompletten Neustart aus.
Danach müsste dann wieder die Messung und die Schaltung funktionieren. - Bis zum nächsten Auslöser.
Kurze Frage noch zu den DS18x Sensoren: Sind das fertige Module oder betreibst Du die in "fliegender Verdrahtung"?
Werden die mit 5V versorgt oder laufen die mit parasite Power?
Aber erstmal Code ausführen:
// Watchdog
#include <avr/wdt.h>
//Bibliotheken und Definieren von DHT22
#include <DHT.h>
#include <DHT_U.h>
#define DHTPIN 3 //==> Der Sensor wird an Pin 3 angeschlossen
#define DHTTYPE DHT22//==> Es handelt sich um einen DHT22 Sensor
DHT dht(DHTPIN, DHTTYPE); // Der Sensor wird ab jetzt mit "dht" angesprochen
// Bibliotheken und Definieren von LCD1602
#include <Wire.h> // Bibliothek für 1602 LCD Display
#include <OneWire.h> // OneWire- Bibliothek für DS18B20
#include <DallasTemperature.h> // DallasTemperature- Bibliothek für DS18B20
#include <LiquidCrystal_I2C.h> // LiquidCrystal Bibliothek laden für LCD Display
LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x27, 16, 2); // so wenn ein 1602 display genutzt wird
// Bibliotheken und Definieren für DS18B20
#define ONE_WIRE_BUS 2 // Das Datenkabel vom DS18B20 ist an Pin 2 angeschlossen
#define TEMPERATURE_PRECISION 12// ?
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress one, two; // bei mir sind zwei Temperatursensoren angeschlossen
const byte kreise = 4; // Anzahl der Regelkreise
const byte steckdose[kreise] = {4, 5, 6, 7}; //==> Pin 4 ist "Steckdose 1"
const byte minimalWert[kreise] = {24, 24, 10, 85};
const byte maximalWert[kreise] = {26, 26, 16, 92};
int16_t sensorWert[kreise] = {0}; // T - Wachstum1, T - Wachstum2, T - Fruchtung, Hygro
byte altSensorWert[kreise] = {0};
void setup()
{
Serial.begin(9600); //Serielle Verbindung starten, falls ich mit dem seriellen Monitor arbeiten muss
// Sensoren und LCD starten
sensors. begin(); // DS18B20 Sensoren starten
sensors.setWaitForConversion(true);
dht.begin(); //DHT22 Sensor starten
// lcd.init(); // für den LCD- Monitor
lcd.backlight(); // für den LCD- Monitor
//Pins deklarieren und Anfangszustand deklarieren (Alle Steckdosen einschalten am Anfang!!!)
for (byte b = 0; b < kreise; b++)
{ pinMode(steckdose[b], OUTPUT); } //
pinMode(LED_BUILTIN, OUTPUT);
// Watchdog aktivieren
wdt_reset(); //
wdt_enable(WDTO_8S); // Auslösen nach Zeit _8S (8sekunden)
}
void loop()
{
getSensors();
sensorsSerial();
setActor();
setDisplay();
heartbeat(300);
wdt_reset(); // WatchdogTimer neu starten
}
void getSensors()
{
bool failure = false;
for (byte b = 0; b < kreise; b++)
{
switch (b)
{
case 0:
sensorWert[b] = sensors.getTempCByIndex(0);
if (sensorWert[b] > 50 || sensorWert[b] < 0)
{
Serial.println(F("Sensorwert Sensor 0 unplausibel!"));
failure = true;
}
break;
case 1:
sensorWert[b] = sensors.getTempCByIndex(1);
if (sensorWert[b] > 50 || sensorWert[b] < 0)
{
Serial.println(F("Sensorwert Sensor 0 unplausibel!"));
failure = true;
}
break;
case 2:
sensorWert[b] = dht.readTemperature();
break;
case 3:
sensorWert[b] = dht.readHumidity();
break;
}
}
if (failure)
{
Serial.print(F("versuche mit Laufzeit von "));
Serial.print(millis());
Serial.print(F(" Watchdog auszulösen!"));
while (1);
}
sensors.requestTemperatures();
}
void sensorsSerial()
{
static uint32_t lastmillis = 0;
if (millis() - lastmillis > 2000)
{
lastmillis = millis();
for (byte b = 0; b < kreise; b++)
{
Serial.print(sensorWert[b]);
Serial.print('\t');
}
Serial.println();
}
}
void setActor()
{
for (byte b = 0; b < kreise; b++)
{
if (sensorWert[b] >= maximalWert[b] && // Wenn die Temperatur gleich oder höher des festgelegten Maximums...
digitalRead(steckdose[b]) == LOW)
{
digitalWrite(steckdose[b], HIGH);
Serial.print(F("Steckdose "));
Serial.print(b);
Serial.println(F(" aus"));
}
if (sensorWert[b] <= minimalWert[b] && // Wenn die Temperatur gleich oder höher des festgelegten Minimus...
digitalRead(steckdose[b]) == HIGH)
{
digitalWrite(steckdose[b], LOW);
Serial.print(F("Steckdose "));
Serial.print(b);
Serial.println(F(" ein"));
}
}
}
void setDisplay()
{
bool isNew = false;
for (byte b = 0; b < kreise; b++)
{
if (altSensorWert[b] != sensorWert[b])
{
isNew = true;
altSensorWert[b] = sensorWert[b];
}
}
if (isNew)
{
lcd.setCursor(0, 0);
for (byte b = 0; b < kreise - 1; b++)
{
lcd.print(sensorWert[b]); // Temperatur von Wachstum1 anzeigen
lcd.print("\337C "); // Grad und dahinter Leerzeichen
}
lcd.setCursor(10, 1);
lcd.print(sensorWert[kreise - 1]); // LF von Fruchtung anzeigen
lcd.print(" %"); //
for (byte b = 0; b < kreise; b++)
{
switch (b)
{
case 0:
lcd.setCursor(3, 1);
break;
case 1:
lcd.setCursor(8, 1);
break;
case 2:
lcd.setCursor(15, 0);
break;
case 3:
lcd.setCursor(15, 1);
break;
}
if (digitalRead(steckdose[b]) == HIGH)
{ lcd.print(' '); } // das w überschreiben
else
{ lcd.print('w'); }
}
}
}
void heartbeat(const uint32_t blinkTime)
{
static uint32_t lastblink = 0;
if (millis() - lastblink > blinkTime)
{
lastblink = millis();
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
}
}
Mein Problem ist folgendes, ich weiß nicht wie ich:
einbinden soll,
wenn ich auf Sketch-> Bibliothek einbinden-> Noiasca Liquid Crystal klicke, dann werden diese beiden Bibliotheken eingebunden:
#include <legacy.h>
#include <NoiascaLiquidCrystal.h>
Unter Sketch-> Bibliothek einbinden-> erscheint keine NoiascaHW/lcd_PCF8574.h - Bibliothek, die ich einbinden könnte.
interessant - macht meine IDE 1.8.19 nicht.
bitte probier zunächst das mitgelieferte Beispiel aus:
lcd Adresse anpassen nicht vergessen!
Funktioniert das Beispiel?
Wenn nicht - genau beschreiben was nicht funktioniert.
Vermutlich
Also Code am Abend draufspielen und dann über Nacht laufen lassen? Ich habe das Problem, dass ich nur einen Laptop besitze und den brauche ich jetzt noch:/.
Und das
soll ich trotzdem verwenden?
das ist dein Meßaubau und du entscheidest wann, wo, was und wie gemessen wird.
Ich habe die IDE 1.8.16.
Ich habe das Beispiel jetzt mal ausprobiert:
Das Einbinden der Bibliotheken
#include <NoiascaLiquidCrystal.h>
#include <NoiascaHW/lcd_PCF8574.h>
scheint nicht zu klappen, normalerweise wird ja auch die Schrift rot wenn es funktioniert hat mit dem Einbinden, das passiert bei mir leider nicht.