Hallo zusammen,
ich bin seit ein Paar Tagen auch im Arduino Fieber. Habe mir direkt ein Projekt überlegt in dem ich leider schnell an meine Grenzen komme. Ich möchte ein LED Blitzlicht (ACL) bauen, welches in Intervallen blinkt. Es kann über einen Button in ein anderes Intervall gewechselt werden (Test). Außerdem gibt es eine Kontroll LED, welche nach jedem Zyklus reagiert.
Jetzt zum Problem:
Zusätzlich soll die Temperatur abgefragt werden um die LEDs bei Überhitzung abzuschalten. Im weiteren Zug ist noch eine NMEA RS232 Abfrage und eine Lufdruck Abfrage geplant...
Ich habe mit hilfe des Leuchtturm Codes das perfekt Tool für die LED Intervalle gefunden und konnte es gut umschreiben. Danach habe ich einen Testbutton eingeführt der das Intervall wechselt. Anschließend wurde eine Zyklus Kontroll LED implementiert. Soweit so gut.
Jetzt bin ich an dem Punkt wo ich die Temperatur überwachen möchte. Hierzu habe ich einen guten Code gefunden. Leider bekomme ich dann in der if und else Abfrage Probleme. Der vorherige Code mit Intervall etz. funktioniert an dieser Stelle nicht mehr.
Könnt Ihr mir vielleicht ein Paar anstöße geben. Sry ich bin kein Programierer. Bastel nur unglaublich gerne ![]()
//ACL Steuerung inkl. Temperatur, Test LED und Test Button
//Einbinden der Temperatur Steuerung
//Bibliotheken
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 3 //Sensor DS18B20 am digitalen Pin 3
OneWire oneWire(ONE_WIRE_BUS); //
//Übergabe der OnewWire Referenz zum kommunizieren mit dem Sensor.
DallasTemperature sensors(&oneWire);
const float MIN_TEMP = 28; //Temperaturschwellwert zum schalten des Relais
//Einbinden der LED Steuerung
// LED: Pin-Nummer der zu schaltenden LED
// gesamt= Gesamtlänge einer Blitzfolge (Timing) für einen Zyklus des ACL
// n= Anzahl der nachfolgenden ein/aus Timings
// LED gesamt n ein aus ein aus ein aus ein aus
int ACL1_timing[] ={13, 4550, 8, 50, 50, 50, 50, 50, 300, 1000, 3000}; //ACL1=Normalflug Blinksequenz
int ACL2_timing[] ={13, 100, 2, 50, 50}; //ACL2=Testsequenz
int LEDG1_timing[] ={12, 4550, 1, 100, 4450}; //LEDG1(Grün)=aufblinken nach einer ACL1 Sequenz
int LEDG2_timing[] ={12, 100, 1, 50, 50}; //LEDG2(Grün)=Testsequenz
//Einbinden der Button Steuerung
int buttonTestZustand; //variable für Testbutton
int buttonTest = 4; //Testbutton Pinnummer
void setup() {
Serial.begin(9600); //Starten der seriellen Kommunikation mit 9600 baud
Serial.println("Temperatursensor - DS18B20");
sensors.begin(); //Starten der Kommunikation mit dem Sensor
// definition der OUTPUT pins
pinMode(ACL1_timing[0], OUTPUT);
pinMode(ACL2_timing[0], OUTPUT);
pinMode(LEDG1_timing[0], OUTPUT);
pinMode(LEDG2_timing[0], OUTPUT);
// definition der INPUT pins
pinMode(buttonTest,INPUT);
}
void ACLStatus(int* ACLdata)
{
// Anfangs von eingeschaltetem Blinkstatus ausgehen
boolean blinkStatusOn=true;
// Zeit im Blinkzyklus per Modulo-Arithmetik
// aus millis() und der Gesamt-Zykluszeit des Turms errechnen
long inCycleTime=millis() % ACLdata[1];
int onoffCount=ACLdata[2]; // Anzahl der ein/aus Schaltungen
while (onoffCount>0 && inCycleTime-ACLdata[3+ACLdata[2]-onoffCount]>0)
{
// bereits abgelaufene Blinkzeit abziehen
inCycleTime-=ACLdata[3+ACLdata[2]-onoffCount];
onoffCount--; // Anzahl der ein/aus Schaltungen vermindert
blinkStatusOn=!blinkStatusOn; // Blinkstatus wechselt
}
// wenn alles durch, dann den errechneten Blinkstatus setzen
digitalWrite(ACLdata[0], blinkStatusOn);
}
void loop() {
sensors.requestTemperatures();
//Ausgabe aller Werte der angeschlossenen Temperatursensoren.
//auslesen der Temperatur
float tempC = sensors.getTempCByIndex(0);
//ausgeben der Temperatur auf dem seriellen Monitor
printValue(tempC, "°C");
//wenn die aktuelle Temperatur größer als die gespeicherte dann soll das Relais gestoppt werden
if(MIN_TEMP > tempC){
//Aufrufen der Testbutton Variable
buttonTestZustand = digitalRead(buttonTest);
Serial.println(buttonTestZustand,DEC);
//Wenn Taster nicht gedrückt ACL1 Sequenz + LEDG aufblinken nach einer ACL1 Sequenz
if (buttonTestZustand == 0){
ACLStatus(ACL1_timing);
ACLStatus(LEDG1_timing);
}
//Wenn Taster gedrückt ACL2 und LEDG2 Testsequenz
if (buttonTestZustand == 1){
ACLStatus(ACL2_timing);
ACLStatus(LEDG2_timing);
}
} else { //hier folgt ein neues Intervall ohne aufleuchten...
}
}
//ausgeben eines Textes auf den seriellen Monitor der Arduino IDE
void printValue(float value, String text){
Serial.print(value);
Serial.println(text);