Hallo Arduino Community
Da ich relativ neu bin bei Arduino hätte ich eine programmiertechnische Frage.
Und zwar habe ich eine ino Datei als startdatei und habe mir 2 Tabs dazu gemacht einmal
ledSteuerung und einmal TemperaturAuslesung
Jetzt ist meine Frage wie kann man das am besten anstellen das man die 2 Dateien
extra ansteuert weil zur Zeit ist bei der Temperatur ein delay drinnen und daher kann
ich auch die LED´s nicht mehr steuern
und in der Hauptdatei sind die Sachen eingebunden
loop weglassen geht garnicht, die ist notwendig in jedem sketch. aber Du könntest zb über den serial monitor steuersignale senden und dann in der loop drauf prüfen und in die jeweilig richtige routine springen. allerdings auch erst nach verzögerung durch das delay...
und gibt es da gar keinen weg das delay wegzulassen??
möchte eben die temperatur nur alle 5min haben und wenn ich in der Zeit nichts mehr machen kann ist es blöd für eine Homeautomation
In Deinen Funktionen
ledsteuerungloop();
temploop();
lass einfach die delays weg und bau eine Steuerroutine in loop(), welche "temploop()" nur alle 5 minuten aufruft und "ledsteuerungloop()" öfters (z.B. alle 10 Sekunden oder was auch immer).
doch, das delay sollst Du ja weglassen und durch eine millis-lösung ersetzen. millis liefert Dir die millisekunden seit dem einschalten des arduino. Du speicherst die millis in einer globalen variable (vor der void setup als unsigned long definiert). und dann prüfst Du an der richtigen stelle, ob das aktuelle millis um zb 300000 (= 5 X 60sek * 1000) höher ist als der gespeicherte wert. wenn ja, setzt du den gespeicherten wert auf die momentanen millis und springst einmalig in deine messung und dann geht das spiel von vorne los. diese prüfung findet tausende male in der sekunde statt und zwischen diesen prüfungen kannst Du was anderes tun, zb die leds steuern (aber bitte auch ohne delay).
unsigned long previousMillis = 0; // der speicher für die alte zeit
long interval = 300000; // abstand zwischen den messungen in millisekunden
void setup() {
// tue irgenwas;
}
void loop() {
unsigned long currentMillis = millis(); //momentane millis
if(currentMillis - previousMillis > interval) { //ist der momentane wert um 300000 höher als der gepeicherte? wenn ja >
previousMillis = currentMillis;
spring_in_deine_routine();
}
steuere_leds();
}