Hallo,
ich verzweifel gerade so ein bisschen an meiner Aquariensteuerung.
Vieles läuft schon aber bei so ein paar Sachen weiß ich einfach ned was es bedeutet und kann darauf ned erschliessen welche Funktion dahinter verbirgt oder ws es macht. Vielleicht könnt ihr mich ja mal bisschen aufklären.
Folgende Sachen laufen schonmal:
Tempertursensoren Auslesen und werte nutzen und Anzeigen lassen.
Temperaturwerte nutzen um damit ein Relais An und Auszuschallten.
Ich habe keine Probleme oder nur sehr wenig mit verkabelung nur das Coden fällt mir sehr schwer da ich ein Blutiger Anfänger bin. Folgenden Code habe ich mir aus Programm-Schnippseln zusammenkopiert hier und da ne änderung vorgenommen Zusatzfunktionen eingefügt oder geändert.
#include <U8glib.h> //OLED Bibliothek
#include <U8x8lib.h> //OLED Bibliothek
#include <U8g2lib.h> //OLED Bibliothek
#include <DallasTemperature.h> //Digitale Temperaturfühler Bibliothek
#include <OneWire.h> // 1-KabelBus Bbliothek
U8G2_SSD1306_128X32_UNIVISION_F_SW_I2C u8g2(U8G2_R0,/* clock=*/ 4, /* data=*/ 2, /* reset=*/ U8X8_PIN_NONE); //OLED TYP
static char outstr[15];
const int Luefter = 5; //Relais Lüfter für Aquarium Temperatur
const int Heiss = 6; //Relais Lüfter Steuerungselektronik und Netzteil
#define ONE_WIRE_BUS 3 //PIN Eingang für Digitale TemperaturSensoren
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
int numberOfDevices;
DeviceAddress tempDeviceAddress;
void setup(void)
{
pinMode(Luefter, OUTPUT); //Setze PIN Lüfter auf Ausgang
pinMode(Heiss, OUTPUT); // Setze PIN Elektronik auf Ausgang
sensors.begin(); //BEginne start des Auslesens der Thermometer
numberOfDevices = sensors.getDeviceCount(); //Zähle die Anzahl der Digitalen Temperaturfühler
for(int i=0;i<numberOfDevices; i++)
if(sensors.getAddress(tempDeviceAddress, i))
Serial.print(numberOfDevices, DEC);
u8g2.begin();
delay(1000);
}
void loop(void)
{
sensors.requestTemperatures();
Serial.print("Temperature is: ");
Serial.println(sensors.getTempCByIndex(0));
if (sensors.getTempCByIndex(0) <25)
{digitalWrite(Luefter, HIGH);
}
else
if (sensors.getTempCByIndex(0) >24)
{digitalWrite(Luefter, LOW) ;
}
dtostrf(sensors.getTempCByIndex(0),7, 1, outstr);
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_profont22_tf); //Fonts here https://github.com/olikraus/u8g2/wiki/fntlistall
u8g2.drawStr(30,14, "Wasser");
u8g2.drawStr(4,30,outstr);
u8g2.sendBuffer();
delay(1000);
sensors.requestTemperatures();
Serial.print("Temperature is: ");
Serial.println(sensors.getTempCByIndex(1));
if (sensors.getTempCByIndex(1) <25)
{digitalWrite(Heiss, HIGH);
}
else
if (sensors.getTempCByIndex(1) >24)
{digitalWrite(Heiss, LOW) ;
}
dtostrf(sensors.getTempCByIndex(1),7, 1, outstr);
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_profont22_tf); //Fonts here https://github.com/olikraus/u8g2/wiki/fntlistall
u8g2.drawStr(0,14, "Elektronik");
u8g2.drawStr(4,30,outstr);
u8g2.sendBuffer();
delay(1000);
}
Soweit funktioniert das schonmal folgenden String verstehe ich nur noch nicht so ganz :
static char outstr[15];
Ich weiss das es eine dauerhafte Variable ist die nur von einer Funkton gesehen oder Verändert werden darf aber was hat es mit er klammer auf sich? Und wieso kann ich in diesem teil:
dtostrf(sensors.getTempCByIndex(1),7, 1, outstr);
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_profont22_tf); //Fonts here https://github.com/olikraus/u8g2/wiki/fntlistall
u8g2.drawStr(0,14, "Elektronik");
u8g2.drawStr(4,30,outstr);
u8g2.sendBuffer();
delay(1000);
Keine zusatzausgabe machen das er mir das C von Celsius anzeigt?
Habe noch vor eine kleine Zeitsteuerung einzubauen aber ich weiß noch ned so ganz wie man das “einfach” realisieren kann. Ich möchte einfach nur das der Arduino einen RTC ausliest und dann sagen wir mal Morgens 7:00 Uhr ein relais Anschaltet und Abends um 20 Uhr aus. Wenn ich mir da so Beispiele Anschaue dann Sind das ja teilweise über 150 Zeilen nur um ein Relais um eine Uhrzeit zu Schalten geht das ned bissel “einfacher”? Denn aktuell sind schon mit dem Bissel Code der da Oben steht ca 69% des Speichers belegt.
Freue mich schon über eure Kommentare.
P.S. Genutzte Hardware
Arduino Nano
4-fach Relais
Univision Oled 128x32