INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Fehler im Programm
06.11.2014, 09:55 (Dieser Beitrag wurde zuletzt bearbeitet: 06.11.2014 09:57 von Kurt.)
Beitrag #1
Fehler im Programm
Hallo,
muß mal eure Hilfe in Anspruch nehmen. Folgendes Problem.
In meinen Programm soll bei einer Temperatur unter 22 Grad ein Relais anziehen.
Aber auch nur dann, wenn vom Regensensor ein Highsignal anliegt.
Ich habe es mit der Verknüpfung " &&" versucht, aber es klappt nicht.
Bin dankbar für jeden Tipp.
Code:
#include <LiquidCrystal.h>
const int temp = 0;
const int rsensor= 5;
int relaishz = 6;
int rsensorState = 0;
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

void setup(){
lcd.begin(16, 2);
pinMode(relaishz, OUTPUT);
pinMode(rsensor,INPUT);
digitalWrite(rsensor, HIGH);

}
void loop()
{
  rsensorState = digitalRead(rsensor);
  int tempReading = analogRead(temp);
  float tempVolts = tempReading * 1.6 / 1024.0;
  float temp = (tempVolts - 0.5) * 100.0;
  rsensorState = digitalRead(rsensor);
if (temp <=22 && rsensor == HIGH)
{
digitalWrite(relaishz,LOW);
lcd.print(" AN ");
}
else
{
}
if (temp >=24 )
{
digitalWrite(relaishz,HIGH);
lcd.print(" AUS ");
}
  //LcdClearLine(1);
  lcd.setCursor(0,0);
  lcd.print("Temp.:");
  lcd.print(temp);
  lcd.write(223);
  lcd.print("C");
  lcd.setCursor(0,1);
  lcd.print("Heizung:");
{
}
delay(1000);            //Wait one second before we do it again
}

// hilfsfunktion zum leeren einer zeile
void LcdClearLine(int r)
{
  lcd.setCursor(0,r);
  for (int i = 0; i < 16; i = i + 1)
  {
    lcd.print("            ");
  }
}

Danke
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.11.2014, 11:28
Beitrag #2
RE: Fehler im Programm
Hi,
rsensor ist immer 5. Du meinst rsensorState.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.11.2014, 12:28
Beitrag #3
RE: Fehler im Programm
Hi Thorsten,
ich steh jetzt auf dem Schlauch.
Was muss ich ändern?

Gruß Bernd
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.11.2014, 12:33
Beitrag #4
RE: Fehler im Programm
Hi,
schau Dir mal diese zwei Zeilen scharf an:
Code:
rsensorState = digitalRead(rsensor);
if (temp <=22 && rsensor == HIGH)
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.11.2014, 13:04
Beitrag #5
RE: Fehler im Programm
Also wenn ich es so mache:
rsensorState = digitalRead(rsensorState);
if (temp <=22 && rsensorState == HIGH)

ändert sich nichts, egal ob High oder Low anliegt.
Der Zustand ist immer "AN".

Bernd
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.11.2014, 17:32
Beitrag #6
RE: Fehler im Programm
Hi,
das Ausschalten hast Du ja auch so programmiert, dass es nur stattfindet wenn temp >= 24, oder?
Wenn Du bei rsensorState == LOW auch abschalten willst, dann musst Du das dem System auch sagen.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.11.2014, 09:50
Beitrag #7
RE: Fehler im Programm
Hi Thorsten,
hab es zum Laufen gebracht. Man lernt nie aus.
So geht es.
[code]

#include <LiquidCrystal.h>
int temp = 0;
int rsensor= 5;
int relaishz = 6;
int rsensorState = 0;
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
void setup(){
lcd.begin(16, 2);
pinMode(relaishz, OUTPUT);
pinMode(rsensor,INPUT_PULLUP);
LcdClearLine(1);
}
void loop()
{
rsensorState = digitalRead(rsensor);
int tempReading = analogRead(temp);
float tempVolts = tempReading * 1.6 / 1024.0;
float temp = (tempVolts - 0.5) * 100.0;
if (temp <=22 && rsensorState == HIGH)
{
digitalWrite(relaishz,HIGH);
lcd.print(" AN ");
}
else if (temp <=22 && rsensorState == LOW)
{
digitalWrite(relaishz,LOW);
lcd.print(" AUS");
}
else if (temp >=24 )
{
digitalWrite(relaishz,LOW);
lcd.print(" AUS ");
}
//LcdClearLine(1);
lcd.setCursor(0,0);
lcd.print("Temp.:");
lcd.print(temp);
lcd.write(223);
lcd.print("C");
lcd.setCursor(0,1);
lcd.print("Heizung:");
{
}
delay(500);
}
// hilfsfunktion zum leeren einer zeile
void LcdClearLine(int r)
{
lcd.setCursor(0,r);
for (int i = 0; i < 16; i = i + 1)
{
lcd.print(" ");
}
}
[code]

Danke für die Hilfe
Gruß Bernd
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.11.2014, 18:21
Beitrag #8
RE: Fehler im Programm
Noch ne kleinigkeit zum direkten richtigen Programmieren. Versuch noch das delay aus dem Programm rauszuschmeißen. Dies kannst du wenn du dich an dem Beispiel BlinkwitoutDelay nimmst.

Code:
unsigned long lmillis=0;
unsigned long actmillis=0;
int timems=500;  // Hier deine Intervallzeit die zwischen den druchläufen sein soll

void setup(){
// Dein Setup hier rein
}


void loop(){
actmillis=millis();    // aktuelle Zeit speichern
if (actmillis-lmillis>=timems){   // Aktuelle Zeit - letzter Zeit länger als 500ms
// Hier dann dein Programm das alle 500ms ausgeführt werden soll
}
// Und hier dein Programm das jeden Durchlauf ausgeführt werden soll

lmillis=actmillis;   // Zeit merken für nächsten Durchlauf
}
Damit klemmst du deine CPU nicht im delay fest.
Bei deinem Programm würde es sich anbieten die Displayausgabe in die 500ms Routine zu packen und den Rest in die Loop. So kannst du dein Programm erweitern ohne das du rücksicht auf delay machen musst.

Gruß
DerDani
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Fehler in meinem Programm Franz54 7 160 01.12.2016 23:58
Letzter Beitrag: hotsystems
  Fehler im Programmablauf binderj1 14 353 10.10.2016 10:29
Letzter Beitrag: StephanBuerger
  Fehler beim Kompilieren binderj1 5 295 03.10.2016 21:27
Letzter Beitrag: hotsystems
Smile Simpler Fehler bei MAP? malsehen 8 229 02.10.2016 19:46
Letzter Beitrag: malsehen
  Fehler beim Speichern von Projekten Manni66 16 686 23.08.2016 10:05
Letzter Beitrag: hotsystems
  Selbstfahrender Roboter Programm änderung hilfe ? arekklone 11 543 06.07.2016 14:59
Letzter Beitrag: Binatone
  Ausgabe druckt immer 2 Werte anstatt nur einen. Finde den Fehler nicht TimeMen 24 740 02.07.2016 14:18
Letzter Beitrag: hotsystems
  Adafruit SD-master / logger shield: Fehler beim 2. Kompilieren kl-ing 3 337 06.06.2016 16:07
Letzter Beitrag: Bitklopfer
  Werte an anderes Programm weiterleiten Typ 2 438 12.03.2016 23:28
Letzter Beitrag: Typ
  Fehler beim Kompilieren Rudi 4 897 05.02.2016 19:46
Letzter Beitrag: Rudi

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste