Náhrada Delay
Moderátori: psichac, Moderátori
Náhrada Delay
Zdravím. S arduinom viac menej začínam. Pracujem na osvetlení schodov v dome. Spínač bude IR zavora ktora bude mat v klude na výstupe HIGH, pokal sa prerusi tak LOW a vtedy by sa mali rozsvietit ledky na napr. 15s. bez toho aby. som použil prikaz delay. Ide mi. o. to. že ak niekdo preruší zavoru zopne sa osvetlenie na 15 sekúnd. Ak medzi tym ako svietia ledky tak niekdo znova preruší zavoru odpočítavanie času pôjde od začiatku. Skúšal som hocičo no neviem sa s toho vysomáriť. Ako by s te to. riesili vy? poprípade nejaké návrhy. Budem vďačný za hoci akú pomoc.
0
- bobo87
- Ultimate člen
- Príspevky: 1913
- Dátum registrácie: 15 Feb 2007, 00:00
- Vek: 36
- Kontaktovať používateľa:
Re: Náhrada Delay
Toto sa da spravit aj s 555kou, trochu smetia naokolo a nemusis ani programovat.
0
float l,I,Q,_,o;int E;main(){I=1.125;while(I>=-1.225){for(l=-2;l<=1;l+=3/79.0){Q=_=0;for(E=127;Q*Q+_*_<4.0&&--E>32;){o=Q;Q=Q*Q-_*_+l;_=2*o*_+I;}putchar(E);}putchar(10);I-=9/88.0;}}
- bobo87
- Ultimate člen
- Príspevky: 1913
- Dátum registrácie: 15 Feb 2007, 00:00
- Vek: 36
- Kontaktovať používateľa:
Re: Náhrada Delay
Tak niektory z casovacov nastavit napriklad na 1s interval. Spravis si globalnu premennu napr. uint8_t lightTimer. V preruseni spravis nieco taketo:
A v hlavnej slucke len kontrolujes premennu a ked je lightTimer == 0, zhasnes, ked lightTimer > 0, rozsvietis. Pri kazdom impulze od zavory uz len nastavis pozadovany cas, napr lightTimer = 15 a hotovo.
Kód: Vybrať všetko
if(lightTimer > 0)
lightTimer--;
0
float l,I,Q,_,o;int E;main(){I=1.125;while(I>=-1.225){for(l=-2;l<=1;l+=3/79.0){Q=_=0;for(E=127;Q*Q+_*_<4.0&&--E>32;){o=Q;Q=Q*Q-_*_+l;_=2*o*_+I;}putchar(E);}putchar(10);I-=9/88.0;}}
Re: Náhrada Delay
Varianta bez přerušení:
Kód: Vybrať všetko
void my_delay(uint8_t sec) // sec=15
{
for(uint16_t i=sec*10; i>0; i--) // opakuj 150x
{
_delay_ms(100);
if(vypinac_zapnuty) i=sec*10; // každých 100 ms zkontroluj vypinač,
} // pokud je zapnutý, nastav znovu 15 sec
}
int main(void)
{
while(1)
{
if(vypinac_zapnuty)
{
zapni_svetla;
my_delay(15); // čekej 15 vteřin
vypni_svetla;
}
}
}
0
-
- Zaslúžilý člen
- Príspevky: 1371
- Dátum registrácie: 22 Jan 2012, 19:24
- Bydlisko: Nové Mesto nad Váhom
- Vek: 43
Re: Náhrada Delay
Alebo takto(vyvarujes sa pouzitiu delay uplne):
Kód: Vybrať všetko
unsigned long teraz,predtym;
const int interval=15000;
boolean vstup,vystup;
void setup() {
// put your setup code here, to run once:
}
void loop() {
// put your main code here, to run repeatedly:
teraz=millis();
if(vstup) { predtym=teraz;vystup=true;}//zapni
if(teraz-predtym>=interval) { vystup=false;}//vypni
}
0
-
- Podobné témy
- Odpovedí
- Zobrazení
- Posledný príspevok
-
- 15 Odpovedí
- 909 Zobrazení
-
Posledný príspevok od používateľa SMITH
-
- 8 Odpovedí
- 1048 Zobrazení
-
Posledný príspevok od používateľa bandi-p
-
- 8 Odpovedí
- 2195 Zobrazení
-
Posledný príspevok od používateľa remusator
-
- 0 Odpovedí
- 1074 Zobrazení
-
Posledný príspevok od používateľa sergej
-
- 4 Odpovedí
- 1539 Zobrazení
-
Posledný príspevok od používateľa Sani1