first I want to introduce myself: My name is Ed and I'm a begiiner in Arduino programming. My equipment is an Arduino Mega Starter Kit (includses an Arduino Uno).
What I have done until today?
I'm able to measure temperature and humidity (DHT22)
Receiving date and time from a RTC
Both in one sketch.
3.In another sketch I'm reading a button, bounce the input and increase a variable.
Everything works finde.
Now my probleme: I try to merge all three functions in one sketch. 1 and 2 are working fine, bur 3 doesn't work. I print the variable "temperature", which I increase by button click, but the value doesn't change.
Attached you find the sketch.
Ed
I'm a German. Sorry for my bad English. The comments also are in German language.
//****************************************( Libraries )***************************************** /
#include <Wire.h> // RTC
#include <DS3231.h>
#include <Bounce2.h> // Bounce
#define BTN_up 8
#include "DHT.h"
#define DHTPIN 2 //DHT22
#define DHTTYPE DHT22 // Hier wird definiert was für ein Sensor ausgelesen wird.
//********************************( Definieren der Objekte )********************************/
DHT dht(DHTPIN, DHTTYPE);
Bounce btnBouncer = Bounce (BTN_up, 50);
DS3231 clock;
RTCDateTime dt;
//********************************( Variablen )********************************/
int temperatur = 20;
int temp_max = 30;
int temp_min = 9;
int ledrot = 13;
int ledgruen = 11;
//********************************( SETUP )********************************/
void setup() {
Serial.begin(9600);
pinMode (ledrot, OUTPUT);
pinMode (ledgruen, OUTPUT);
pinMode(BTN_up, INPUT);
digitalWrite(BTN_up, HIGH);
clock.begin(); // Initialize DS3231
clock.setDateTime(__DATE__, __TIME__); // Send sketch compiling time to Arduino
Serial.println("DHT22 - Luftfeuchte und Temperatur incl. RTC - Datum");
Serial.println("-----------------------------------");
dht.begin();
clock.begin();
}
//********************************( LOOP )********************************/
void loop() {
delay(2000); // Verweilzeit die gewartet wird
// bis der Sensor wieder ausgelesen wird.
float h = dht.readHumidity(); // Lesen der Luftfeuchtigkeit und speichern in die Variable h
float t = dht.readTemperature() ; // Lesen der Temperatur in °C und speichern in die Variable t
dt = clock.getDateTime(); //Datum und Zeit lesen
/*********************( Überprüfen ob alles richtig Ausgelesen wurde )*********************/
if (isnan(h) || isnan(t)) {
Serial.println("Fehler beim auslesen des Sensors!");
return;
}
/*********************( Taster betätigt? Über Bouncer prellen )*********************/
btnBouncer.update();
if (temperatur >= temp_max) {
temperatur = temp_min;
}
if (btnBouncer.fell()) {
temperatur = temperatur + 1;
}
Serial.print("Datum: "); // Datum und Uhrzeit ausgeben. Wenn Werte einstellig immer eine 0 vorher ausgeben
if (dt.day < 10) {
Serial.write('0');
}
Serial.print(dt.day); Serial.print(".");
if (dt.month < 10) {
Serial.write('0');
}
Serial.print(dt.month); Serial.print(".");
Serial.print(dt.year); Serial.print(" ");
Serial.print("Zeit: ");
if (dt.hour < 10) {
Serial.write('0');
}
Serial.print(dt.hour); Serial.print(":");
//Serial.print(dt.minute); Serial.print(" ");
if (dt.minute < 10) {
Serial.write('0');
}
Serial.print(dt.minute);
// Nun senden wir die gemessenen Werte an die´´en Seriellem Monitor sehen
Serial.print(" Luftfeuchtigkeit: ");
Serial.print(h); // Ausgeben der Luftfeuchtigkeit
Serial.print("%\t"); // Tabulator
Serial.print("Temperatur: ");
Serial.print(t); // Ausgeben der Temperatur
Serial.write("°"); // Schreiben des ° Zeichen
Serial.print("C Schalttemperatur: ");
Serial.print(temperatur);
Serial.write("°");
Serial.println("C");
if (t > temperatur) { // wenn die gemessene temperatur größer als die schalttemperatur
digitalWrite (ledrot, HIGH); // rote LED an
digitalWrite (ledgruen, LOW);
}
else {
digitalWrite(ledrot, LOW); // sonst grüne LED an
digitalWrite(ledgruen, HIGH);
}
}
Please read the post at the start of any forum , entitled "How to use this Forum".
OR http://forum.arduino.cc/index.php/topic,148850.0.html.
Then look down to item #7 about how to post your code.
It will be formatted in a scrolling window that makes it easier to read.
There is a German section of the forum and this topic could be moved there if you would be more comfortable communicating in German. Click "report to moderator" and ask for it to be moved if that is what you want
steht dir im Wege. Es bedeutet, dass dein loop nur alle 2 Sekunden ausgeführt wird, und damit wird auch dein Taster nur alle 2 Sekunden abgefragt. Entprellen macht dann auch keinen Sinn mehr .
Die Abfrage der Sensoren nur alle 2 Sekunden musst Du also ohne delay lösen. Schau dir das Beispiel 'BlinkWitoutDelay' an. Dort ist erklärt, wie so etwas geht.
Hallo,
Mein Name ist Ed und ich bin blutiger Anfänger in der Arduino Programmierung. Habe aber schon ein wenig "nachgebau" und versuche nun langsam zu verstehen was ich da eigentlich mache.
Ich habe einen sketch geschrieben, in dem ein DHT22 ausgelesen und die Werte am Seriellen Monitor angezeigt werden. Die zweite Funktion ist das Auslesen eines RTC (ist das richtig?) Auch hier wird Datum und Uhrzeit am Seriellen Monitor angezeigt.
In einem weiteren Sketch frage ich ab ob ein Taster gedrückt wurde. Das Ganze geprellt mit Hilfe der Bounce Bibliothek. Auch das funktioniert. Bei jedem Tastendruck wird der Wert einer Variablen erhöht. Erreicht der Wert 30 wird er wieder auf 10 gesetzt. Auch das funktioniert.
Jetzt möchte ich diese Funktion in den ersten Sketch einbauen. Der wird auch sauber kompiliert. Aber wenn er erst einmal läuft regiert der Taster nicht.. Den Code habe ich bereits oben im ersten Post eingefügt.
eho:
Das Ganze geprellt mit Hilfe der Bounce Bibliothek.
Das nennt man 'entprellen' .
eho:
Den Code habe ich bereits oben im ersten Post eingefügt.
Aber immer noch nicht in Code-Tags. ( Du kannst den Eingangspost im Editor editieren, den Code markieren und dann oben links auf den Button </> drücken ).
Und zu deinem Problem habe ich ja auch schon etwas geschrieben.
Edit: Alternativ könntest Du auch den MoToTimer aus meinen MobaTools verwenden. Da gibt's auch entsprechende Beispiele.
eho:
Den Code habe ich bereits oben im ersten Post eingefügt.
Und den hättest Du inzwischen ja wohl mal in Code-Tags fassen können.
Naja, das Wochenende hat begonnen. Da mach ich das mal schnell:
//****************************************( Libraries )***************************************** /
#include <Wire.h> // RTC
#include <DS3231.h>
#include <Bounce2.h> // Bounce
#define BTN_up 8
#include "DHT.h"
#define DHTPIN 2 //DHT22
#define DHTTYPE DHT22 // Hier wird definiert was für ein Sensor ausgelesen wird.
//********************************( Definieren der Objekte )********************************/
DHT dht(DHTPIN, DHTTYPE);
Bounce btnBouncer = Bounce (BTN_up, 50);
DS3231 clock;
RTCDateTime dt;
//********************************( Variablen )********************************/
int temperatur = 20;
int temp_max = 30;
int temp_min = 9;
int ledrot = 13;
int ledgruen = 11;
//********************************( SETUP )********************************/
void setup() {
Serial.begin(9600);
pinMode (ledrot, OUTPUT);
pinMode (ledgruen, OUTPUT);
pinMode(BTN_up, INPUT);
digitalWrite(BTN_up, HIGH);
clock.begin(); // Initialize DS3231
clock.setDateTime(__DATE__, __TIME__); // Send sketch compiling time to Arduino
Serial.println("DHT22 - Luftfeuchte und Temperatur incl. RTC - Datum");
Serial.println("-----------------------------------");
dht.begin();
clock.begin();
}
//********************************( LOOP )********************************/
void loop() {
delay(2000); // Verweilzeit die gewartet wird
// bis der Sensor wieder ausgelesen wird.
float h = dht.readHumidity(); // Lesen der Luftfeuchtigkeit und speichern in die Variable h
float t = dht.readTemperature() ; // Lesen der Temperatur in °C und speichern in die Variable t
dt = clock.getDateTime(); //Datum und Zeit lesen
/*********************( Überprüfen ob alles richtig Ausgelesen wurde )*********************/
if (isnan(h) || isnan(t)) {
Serial.println("Fehler beim auslesen des Sensors!");
return;
}
/*********************( Taster betätigt? Über Bouncer prellen )*********************/
btnBouncer.update();
if (temperatur >= temp_max) {
temperatur = temp_min;
}
if (btnBouncer.fell()) {
temperatur = temperatur + 1;
}
Serial.print("Datum: "); // Datum und Uhrzeit ausgeben. Wenn Werte einstellig immer eine 0 vorher ausgeben
if (dt.day < 10) {
Serial.write('0');
}
Serial.print(dt.day); Serial.print(".");
if (dt.month < 10) {
Serial.write('0');
}
Serial.print(dt.month); Serial.print(".");
Serial.print(dt.year); Serial.print(" ");
Serial.print("Zeit: ");
if (dt.hour < 10) {
Serial.write('0');
}
Serial.print(dt.hour); Serial.print(":");
//Serial.print(dt.minute); Serial.print(" ");
if (dt.minute < 10) {
Serial.write('0');
}
Serial.print(dt.minute);
// Nun senden wir die gemessenen Werte an die´´en Seriellem Monitor sehen
Serial.print(" Luftfeuchtigkeit: ");
Serial.print(h); // Ausgeben der Luftfeuchtigkeit
Serial.print("%\t"); // Tabulator
Serial.print("Temperatur: ");
Serial.print(t); // Ausgeben der Temperatur
Serial.write("°"); // Schreiben des ° Zeichen
Serial.print("C Schalttemperatur: ");
Serial.print(temperatur);
Serial.write("°");
Serial.println("C");
if (t > temperatur) { // wenn die gemessene temperatur größer als die schalttemperatur
digitalWrite (ledrot, HIGH); // rote LED an
digitalWrite (ledgruen, LOW);
}
else {
digitalWrite(ledrot, LOW); // sonst grüne LED an
digitalWrite(ledgruen, HIGH);
}
}