Franz54
November 24, 2021, 2:22pm
1
Ich habe einen Merker der nur drei Zustände haben kann. 0, 1, 2, ist möglich. Wenn ich diesen Merker im Display anzeige, steht aber immer ein "t" davor. Also "t0, oder t1, oder t2
Deklariert wird er als byte. Also "byte fenstermerker = 0;". Wenn ich den Merker mit if auf 0, 1, oder 2, abfrage kommt das richtige Ergebnis. Also es stört nicht im Programm.
//-------------Schalter lesen-------------------------------------------
schalter1 = digitalRead(offen);
if (schalter1 == LOW)
{
fenstermerker = 1;
}
schalter2 = digitalRead(zu);
if (schalter2 == LOW)
{
fenstermerker = 2;
}
if ((schalter1 == HIGH) && (schalter2 == HIGH))
{
fenstermerker = 0;
}
lcd.setCursor (14 , 0);
lcd.print (fenstermerker);
lcd.print (F(" - "));
lcd.print (lueftung);
combie
November 24, 2021, 2:27pm
2
Der Fehler liegt nicht im gezeigten Code.
Das Programm ist bis zur untestbarkeit verstümmelt.
@Franz54 Du solltest als alter Forumsnutzer eigentlich wissen, dass man mit solchen Schnipseln nichts anfangen kann. Wahrscheinl,ich ist das 't' der Rest einer Ausgabe irgendwo anders im Programm.
Franz54:
lcd.setCursor (14 , 0);
Du schreibst vorher schon in die Zeile. Überlauf von einer Funktion vorher. Schreib ein delay(5000) vor die Positionierung - dann siehst Du, was da steht.
Franz54
November 24, 2021, 2:56pm
5
Hier ist der ganze Code.
// Arduino CO2 Sensor - MH-Z19 Beispiel und Sketch
// https://iotspace.dev/arduino-co2-sensor-mh-z19-beispiel-und-sketch
/*
bis 400 frische Außenluft
bis 800 hohe Raumluftqualität
bis 1000 akzeptabel „Pettenkoferzahl“
1000–2000 Hygienisch auffällig
über 2000 Hygienisch inakzeptabel
*/
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
#include "DHT.h"
const byte DHTPIN1 = 2; // Hier die Pin Nummer eintragen wo der Sensor1 angeschlossen ist
const byte DHTPIN2 = 3; // Hier die Pin Nummer eintragen wo der Sensor2 angeschlossen ist
#define DHTTYPE DHT22 // Hier wird definiert was für ein Sensor DHT11 oder DHT22 !!
DHT dht1(DHTPIN1, DHTTYPE); //Sensor1 einrichten
DHT dht2(DHTPIN2, DHTTYPE); //Sensor2 einrichten
const byte DataPin = 6; // Pin für CO2 Sensor
const byte RPWM = 9;
const byte LPWM = 10;
//-------Schalter------
const byte offen = 11;
byte schalter1 = 0;
const byte zu = 12;
byte schalter2 = 0;
byte fenstermerker = 0;
//-------Taster-------
const byte Taster = 13;
byte Tasterstatus = 0;
byte Tastenmerker = 0;
unsigned long Sekundenablauf01 = 0; // Tastenabfrage von Taster 300ms aussetzen
const unsigned long Pausezeit01 = 300;
//----CO2 Sensor------
int ppmrange = 5000;
unsigned long pwmtime;
int PPM = 0;
float pulsepercent = 0;
//---Fenstersteller--
byte lueftung = 0;
//---Programm Pause--
unsigned long Sekundenablauf02 = 0; // Programmpause 5 Sekunden
const unsigned long Pausezeit02 = 5000;
//-----------------------AusgangPIN7-------------------------------------
const byte Ausgang01 = 7; // Pin 7 LED1
byte Ausgangsstatus01 = 0;
//-----------------------AusgangPIN8-------------------------------------
const byte Ausgang02 = 8; // Pin 8 LED2
byte Ausgangsstatus02 = 0;
//-----------------------AusgangPIN9-------------------------------------
const byte Ausgang03 = 9; // Pin 9 LED3
byte Ausgangsstatus03 = 0;
//-------------------------Tonausgabe PIN 17-----------------------------
const byte tonPin = 17;
const int frequenz = 1000;
unsigned long tonZeit = 50;
//--------------------------------------------------------------
void setup() {
lcd.begin();
lcd.backlight();
lcd.setCursor (0, 0);
lcd.print (F(" - CO2 Bel""\xF5""ftung -"));
pinMode(DataPin, INPUT);
Serial.begin(9600);
// Luftfeuchte und Temperatur Sensoren
dht1.begin(); // Sensor1 starten
dht2.begin(); // Sensor2 starten
//-----------Ausgänge einrichten--------------------------------------
Ausgangsstatus01 = 0; // LED
pinMode(Ausgang01, OUTPUT);
Ausgangsstatus02 = 0; // LED
pinMode(Ausgang02, OUTPUT);
Ausgangsstatus03 = 0; // LED
pinMode(Ausgang03, OUTPUT);
pinMode(RPWM, OUTPUT); // PWM Motorsteuerung auf
pinMode(LPWM, OUTPUT); // PWM Motorsteuerung zu
pinMode(offen, INPUT_PULLUP); // Schalter Fenster auf
pinMode(zu, INPUT_PULLUP); // Schalter Fenster zu
pinMode(Taster, INPUT_PULLUP); // Taster Display ein/aus
}
//--------------------------------------------------------------
void loop()
{
//-------------Taster lesen-----------------------------------------------
if (millis() - Sekundenablauf01 >= Pausezeit01) { // 200msec abgelaufen?
Tasterstatus = digitalRead(Taster); // Pin von Taster abfragen
if (Tasterstatus == LOW) { // Ist Taster gedrueckt?
Tastenmerker = !Tastenmerker; // Merken dass Taster gedrueckt wurde
if (Tastenmerker == LOW)
{
lcd.noBacklight();
}
else
{
lcd.backlight();
}
Sekundenablauf01 = millis(); // Die 200ms neu starten
}
}
//-------------------------------------------------------------------------
if (millis() - Sekundenablauf02 >= Pausezeit02) { // 5000ms abgelaufen?
Sekundenablauf02 = millis(); // Die 5000ms neu starten
//-----------------------------------------------------------------------
pwmtime = pulseIn(DataPin, HIGH, 2000000) / 1000;
float pulsepercent = pwmtime / 1004.0;
PPM = ppmrange * pulsepercent;
lcd.setCursor (0, 3);
lcd.print (F(" CO2 in PPM = "));
lcd.setCursor (14, 3);
lcd.print (F(" "));
lcd.setCursor (14, 3);
lcd.print (PPM);
float h1 = dht1.readHumidity(); // Lesen der Luftfeuchtigkeit1 und speichern in die Variable h1
float t1 = dht1.readTemperature(); // Lesen der Temperatur in °C1 und speichern in die Variable t1
float h2 = dht2.readHumidity(); // Lesen der Luftfeuchtigkeit2 und speichern in die Variable h2
float t2 = dht2.readTemperature(); // Lesen der Temperatur in °C2 und speichern in die Variable t2
//--------------------------
lcd.setCursor (18, 1);
lcd.print (F(" "));
lcd.setCursor (0, 1);
lcd.print (F(" L1 "));
lcd.print (h1);
lcd.print (F("% T1 "));
lcd.setCursor (14, 1);
lcd.print (t1);
if (t1 < 10)
{
lcd.setCursor (14, 1);
lcd.print (F(" "));
lcd.print (t1);
}
//------------------------
lcd.setCursor (18, 2);
lcd.print (F(" "));
lcd.setCursor (0, 2);
lcd.print (F(" L2 "));
lcd.print (h2);
lcd.print (F("% T2 "));
lcd.setCursor (14, 2);
lcd.print (t2);
if (t2 < 10)
{
lcd.setCursor (14, 2);
lcd.print (F(" "));
lcd.print (t2);
}
//-----------------------
if (PPM <= 1000)
{
Ausgangsstatus01 = 1;
Ausgangsstatus02 = 0;
}
if ((PPM > 1000) && (PPM < 2000))
{
Ausgangsstatus01 = 0;
Ausgangsstatus02 = 1;
}
if (PPM > 2000)
{
Ausgangsstatus01 = 0;
Ausgangsstatus02 = 0;
tone(tonPin, frequenz, tonZeit);
}
//----------------------
//---Lüftung Einschaltbedingung-----
if (lueftung == 0)
{
if ((t1 >= 23) && (PPM > 900))
{
lueftung = 1;
Ausgangsstatus03 = 1;
}
}
//---Lüftung Ausschaltbedingung-----
if (lueftung == 1)
{
if ((t1 <= 21) || (PPM < 430))
{
lueftung = 0;
Ausgangsstatus03 = 0;
}
}
//-------------Schalter lesen-------------------------------------------
schalter1 = digitalRead(offen);
if (schalter1 == LOW)
{
fenstermerker = 1;
}
schalter2 = digitalRead(zu);
if (schalter2 == LOW)
{
fenstermerker = 2;
}
if ((schalter1 == HIGH) && (schalter2 == HIGH))
{
fenstermerker = 0;
}
lcd.setCursor (14 , 0);
lcd.print (fenstermerker);
lcd.print (F(" - "));
lcd.print (lueftung);
//-------------LED01 schalten-------------------------------------------
digitalWrite (Ausgang01, Ausgangsstatus01); // Ausgang01 LED Grün umschalten
//-------------LED02 schalten-------------------------------------------
digitalWrite (Ausgang02, Ausgangsstatus02); // Ausgang02 LED Gelb umschalten
//-------------LED03 schalten-------------------------------------------
digitalWrite (Ausgang03, Ausgangsstatus03); // Ausgang03 LED Rot (Blau) umschalten
//------------------Fenster öffnen--------------------------------------
if (((lueftung == 1) && (fenstermerker == 0)) || (fenstermerker == 1))
{
analogWrite(LPWM, 0);
analogWrite(RPWM, 255);
lcd.setCursor (0, 0);
lcd.print (F(" Fenster auf "));
}
//------------------Fenster schließen-----------------------------------
if (((lueftung == 0) && (fenstermerker == 0)) || (fenstermerker == 2))
{
analogWrite(LPWM, 255);
analogWrite(RPWM, 0);
lcd.setCursor (0, 0);
lcd.print (F(" Fenster zu "));
}
}
}
Franz54
November 24, 2021, 2:59pm
6
Rentner
November 24, 2021, 6:29pm
7
Hallo,
Bäume, Wald .... Und man wird vergesslich.
Heinz
Franz54
November 24, 2021, 10:28pm
8
Ja, auf einen derartigen Fehler habe ich schon oft andere hingewiesen. Und dann macht man ihn selber. Ich bin ja mit dem Gerät schon eine Zeit lang am Arbeiten und immer wieder bischen verbessern. Dadurch habe ich an diese Zeile fast ganz oben in Code nicht mehr gedacht. Ich meinte echt, ich habe einen Fehler der im Speicher was überschreibt, habe aber natürlich nichts gefunden ....weil da nichts derartiges ist.
system
Closed
May 23, 2022, 10:28pm
9
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.