Náhrada Delay
Moderátori: psichac, Moderátori
-
- Okoloidúci
- Príspevky: 45
- Dátum registrácie: 04 Nov 2014, 23:23
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;}}
-
- Okoloidúci
- Príspevky: 45
- Dátum registrácie: 04 Nov 2014, 23:23
- 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;}}
-
- Stály člen
- Príspevky: 192
- Dátum registrácie: 28 Mar 2012, 08:52
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
-
- Okoloidúci
- Príspevky: 45
- Dátum registrácie: 04 Nov 2014, 23:23
-
- Podobné témy
- Odpovedí
- Zobrazení
- Posledný príspevok
-
- 15 Odpovedí
- 937 Zobrazení
-
Posledný príspevok od používateľa SMITH
-
- 8 Odpovedí
- 1082 Zobrazení
-
Posledný príspevok od používateľa bandi-p
-
- 8 Odpovedí
- 2217 Zobrazení
-
Posledný príspevok od používateľa remusator
-
- 0 Odpovedí
- 1091 Zobrazení
-
Posledný príspevok od používateľa sergej
-
- 4 Odpovedí
- 1554 Zobrazení
-
Posledný príspevok od používateľa Sani1