Timer Funktion
hallo,
ich möchte das ein ausgang einmalig für 5 sekunden ein oder aus geschaltet wird, jedoch das ganze ohne delay() und mils() lösen. das ganze soll nicht ins setup weil das später ein einen größeren sketch eingebaut wird, wo dann erst noch ein schalter abgefragt werden soll.
das zu hab ich mir die timer lib: http://playground.arduino.cc/code/timer
angesehen und folgendens gebastelt (für den mega2560):
die led geht für 5 sek und dann kurz aus und dann dauerhaft an.... bin etwas verzweifeln. gibt es da evtl. eine besser lösung oder seh ich den fehler einfach nicht?
ich möchte das ein ausgang einmalig für 5 sekunden ein oder aus geschaltet wird, jedoch das ganze ohne delay() und mils() lösen. das ganze soll nicht ins setup weil das später ein einen größeren sketch eingebaut wird, wo dann erst noch ein schalter abgefragt werden soll.
das zu hab ich mir die timer lib: http://playground.arduino.cc/code/timer
angesehen und folgendens gebastelt (für den mega2560):
code: [select]
#include "timer.h"
timer t;
int pin = 13;
int alarmstatus=0;
void setup()
{
pinmode(pin, output);
digitalwrite(pin,low);
serial.begin(9600);
}
void loop()
{
t.update();
alarmfunktion();
}
void alarmfunktion()
{
if(alarmstatus==0)
{
t.pulse(pin, 5 * 1000, high); // 5 second
}
alarmstatus=1;
}
die led geht für 5 sek und dann kurz aus und dann dauerhaft an.... bin etwas verzweifeln. gibt es da evtl. eine besser lösung oder seh ich den fehler einfach nicht?
hallo,
bedeutet nach dieser erklärung auf der timer projektseite:
offensichtlich wird aber nach weiteren 5s nochmals getoggled und dein pin geht dauerhaft auf high (startingvalue).
ja, millis() - aber das hast du ja ausgeschlossen.
code: [select]
t.pulse(pin, 5 * 1000, high); // 5 second
bedeutet nach dieser erklärung auf der timer projektseite:
quote
int pulse(int pin, long period, int startingvalue)
toggle state of digital output 'pin' once after 'period' milliseconds. pin's starting value specified in 'startingvalue', should high or low.
offensichtlich wird aber nach weiteren 5s nochmals getoggled und dein pin geht dauerhaft auf high (startingvalue).
quote
gibt es da evtl. eine besser lösung
ja, millis() - aber das hast du ja ausgeschlossen.
code: [select]
int pin = 13;
int alarmstatus=0;
unsigned long lastalarm;
void setup()
{
pinmode(pin, output);
digitalwrite(pin,low);
serial.begin(9600);
serial.println("prog started");
}
void loop()
{
if (alarmstatus!=2) alarmfunktion(); // bevor ein neuer alarm ausgelöst werden soll, muss alarmstatus auf "0" gesezt werden
}
void alarmfunktion() {
if (alarmstatus==0) {
digitalwrite(pin, high);
lastalarm=millis();
alarmstatus=1; // während alarm
}
if (millis()-lastalarm >= 5000) {
digitalwrite(pin,low);
alarmstatus=2; // nach alarm
}
}
Arduino Forum > International > Deutsch (Moderator: uwefed) > Timer Funktion
arduino
Comments
Post a Comment