arduino milis

C,C++,C#

Moderátori: psichac, Moderátori

rohy
Pokročilý člen
Pokročilý člen
Príspevky: 583
Dátum registrácie: 28 Feb 2008, 00:00
Bydlisko: PD
Vek: 55

arduino milis

Príspevok od používateľa rohy » 20 Jún 2014, 07:52

Ahoj.Potrebujem vytvorit programik,ktory po stlaceni tlacitka rosvieti LED,ale ta bude svietit este urcity cas aj po uvolneni tlacitka.Skusam to cez DELAY,sice to funguje,ale tlacitko musim drzat kym neprebehne loop delay.Skusam to teda cez MILIS,ale to mi uz vobec nefunguje.Upozornujem ze som ABSOLUTNY zaciatocnik v programovani.Najde sa niekto,kto mi napise priklad takehoto prog.DIK.
0

Používateľov profilový obrázok
awen
Power user
Power user
Príspevky: 609
Dátum registrácie: 11 Feb 2009, 00:00
Bydlisko: Bratislava
Vek: 36

Re: arduino milis

Príspevok od používateľa awen » 20 Jún 2014, 08:33

najjednoduchsi "algoritmus" skus takyto, nema tam co neist:

Kód: Vybrať všetko

void loop() {
   while (digitalRead(pin_tlacidla) == HIGH);  // cakame pokym je tlacidlo rozpojene 
   digitalWrite(pin_ledky, HIGH);   // zapneme ledku
   delay(2000);  // cakame 2 sekundy
   digitalWrite(pin_ledky, LOW);   // vypneme ledku
}
0

rohy
Pokročilý člen
Pokročilý člen
Príspevky: 583
Dátum registrácie: 28 Feb 2008, 00:00
Bydlisko: PD
Vek: 55

Re: arduino milis

Príspevok od používateľa rohy » 20 Jún 2014, 09:08

Dakujem.tak som to odskusal...Ledka sa sice zapne,ale uz sa nevypne...Zacinam mat pocit ze to je chyba hardwaru
Pardon,mal som tam preklep.Ide to..
0

Používateľov profilový obrázok
awen
Power user
Power user
Príspevky: 609
Dátum registrácie: 11 Feb 2009, 00:00
Bydlisko: Bratislava
Vek: 36

Re: arduino milis

Príspevok od používateľa awen » 20 Jún 2014, 09:31

tak skus to pretestovat tak, ze vyhodis ten riadok s tlacidlom a spravis si blikac:

Kód: Vybrať všetko

void loop() {
   digitalWrite(pin_ledky, HIGH);   // zapneme ledku
   delay(1000);  // cakame sekundu
   digitalWrite(pin_ledky, LOW);    // vypneme ledku
   delay(1000);  // cakame sekundu
}
a samozrejme predpokladam ze si nezabudol na setup:

Kód: Vybrať všetko

void setup() {
  pinMode(pin_ledky, OUTPUT);        // pin ledky ako vystup
  pinMode(pin_tlacidla, INPUT_PULLUP);  // vstup so zapnutym pullup rezistorom
                                        // tlacidlo mame zapojene medzi pinom a zemou
}
0

Používateľov profilový obrázok
awen
Power user
Power user
Príspevky: 609
Dátum registrácie: 11 Feb 2009, 00:00
Bydlisko: Bratislava
Vek: 36

Re: arduino milis

Príspevok od používateľa awen » 20 Jún 2014, 09:32

tak ked ide, tak vybavene :)
0

rohy
Pokročilý člen
Pokročilý člen
Príspevky: 583
Dátum registrácie: 28 Feb 2008, 00:00
Bydlisko: PD
Vek: 55

Re: arduino milis

Príspevok od používateľa rohy » 20 Jún 2014, 09:56

Akurat to ma jeden hacik.Potrebujem aby ZAKAŽDYM ked tlacitko stlacim,ledka sa rozsvietila a cyklus zacal odznova.To pojde podla mojho nazoru cez funkciu MILIS.Da mi niekto priklad?
0

Sender
Pokročilý člen
Pokročilý člen
Príspevky: 535
Dátum registrácie: 26 Máj 2008, 00:00

Re: arduino milis

Príspevok od používateľa Sender » 20 Jún 2014, 14:28

V první řadě nepoužívej Delay(); tímto způsobem se to nedělá.Nastav si timer a při přerušení inkrementuj proměnou.Až bude mít požadovanou hodnotu tak zapni led.Při stisku tlačítka vynuluj proměnnou i timer (aby to začalo čítat od začátku).Je třeba ošetřit to,jestli je třeba aby to začalo čítat hned po stisku,nebo až se pustí tlačítko.
0
Naposledy upravil/-a Sender v 13 Aug 2014, 19:33, upravené celkom 1 krát.

Používateľov profilový obrázok
dxr
Ultimate člen
Ultimate člen
Príspevky: 3968
Dátum registrácie: 05 Aug 2013, 20:21
Bydlisko: V strede nicoho
Kontaktovať používateľa:

Re: arduino milis

Príspevok od používateľa dxr » 20 Jún 2014, 16:29

Pozri si toto
http://playground.arduino.cc/Code/Bounce alebo novsi Bounce2

to je presne libka urcena na obsluhu tlacitiek vyssi level je to robit cez ISR/prerusenie
je na tebe co pouzijes.Alebo celkom pekny clanok urceny pre Arduino zaciatocnikov
Mas tam aj kratke/dlhe stlacenie jedneho tlacitka.
0
Mahátma Ghándí: „Nejdřív tě budou ignorovat. Pak se ti budou smát. Pak proti tobě budou bojovat. Potom zvítězíš.“
čo viac dodať som taký a možeš to skúsiť vyhrať aj tak to vzdáš.. Obrázok
Arduino is popular becouse allow complex task with minimum investment

rohy
Pokročilý člen
Pokročilý člen
Príspevky: 583
Dátum registrácie: 28 Feb 2008, 00:00
Bydlisko: PD
Vek: 55

Re: arduino milis

Príspevok od používateľa rohy » 21 Jún 2014, 06:54

diki idem studovat..
0

Používateľov profilový obrázok
domosino
Okoloidúci
Okoloidúci
Príspevky: 2
Dátum registrácie: 21 Feb 2014, 20:04
Bydlisko: Košice
Vek: 26

Re: arduino milis

Príspevok od používateľa domosino » 12 Júl 2014, 10:36

nestačilo by to takto? ;) a da sa na to pouzit aj delay(); , len je to kusok dlhsie no :/ :)

Kód: Vybrať všetko


#define LED 13 // napr
#define TLACIDLO 12 //napr
boolean stlacene = false;

void setup()
{
   pinMode(LED, OUTPUT);
   pinMode(TLACIDLO, INPUT);
}

void loop()
{
  if(digitalRead(TLACIDLO) == HIGH){
    stlacene = true;    
  }
  
  while(stlacene == true){
    digitalWrite(LED, HIGH);
    delay(2000); //svieti este 2 sekundy a potom sa vypne 
    digitalWrite(LED, LOW);
    stlacene = false;
  }
}
0
Vľavo fáza, vpravo nulák. Kto to nevie, ten je hlupák :))

Používateľov profilový obrázok
dxr
Ultimate člen
Ultimate člen
Príspevky: 3968
Dátum registrácie: 05 Aug 2013, 20:21
Bydlisko: V strede nicoho
Kontaktovať používateľa:

Re: arduino milis

Príspevok od používateľa dxr » 12 Júl 2014, 13:11

V idealnom pripade ano ale mas na tlacitku zakmity (cize ked stlacis) hned potom tam mas LOW
Premyslam preco tam mas while stlacene ;) preco nie if (stlacene == HIGH) ked to vtom bloku negujes.
Tym padom to zbehne vzdy prave raz cize kludne ten IF.....

preto sa vsade riesi debouncing cize mozes zakmitat aj viac krat ale tlacitko je zopnute az ked je drzane dlhsie.
a to riesi SW v MCU alebo hardverovo.
Okrem toho ak by si to mal takto takto a pre viac tlacitok ten kod ma v Arduino IDE viac ako vyska okna :)
a zle sa to cita preto lepsie pouzit kniznice zprehladni sa to.

Nehovoriac ze to co som pastol asi funguje lebo sa dlhsie neozyva alebo to inak vyriesil ;)
a ten debounce vie aj rozlisit ako bolo tlacitko stlacene. co nieje naskodu pre niektore druhy projektov.
0
Mahátma Ghándí: „Nejdřív tě budou ignorovat. Pak se ti budou smát. Pak proti tobě budou bojovat. Potom zvítězíš.“
čo viac dodať som taký a možeš to skúsiť vyhrať aj tak to vzdáš.. Obrázok
Arduino is popular becouse allow complex task with minimum investment

johnyfly1
Stály člen
Stály člen
Príspevky: 249
Dátum registrácie: 30 Sep 2010, 00:00

Re: arduino milis

Príspevok od používateľa johnyfly1 » 09 Aug 2014, 22:59

caute, ked uz ste pri tych casovacoch...potrebujem spravit dve funkcie a dako si nad tym lamem hlavu :roll: som v zaciatkoch takze trosku strpenia :)

1. potrebujem nieco take ze nejaka funkcia sa vykona len ked bude vstup aktivovany napr 2x a to do urciteho casu napr pol sekundy...takze ked sa aktivuje vstup raz a po pol sekunde druhy krat uz sa nic neudeje...

2. potrebujem zasa nieco take ze ked podrzim zapnuty vstup napr 2 sekundy zapne sa nejaky vystup na dobu pokial je zopnuty vstup, ak sa vstup vypne vypina sa aj vystup..ak sa vstup vypne za menej ako dve sekundy tak sa nic nestane....toto by sa dalo spravit jednoducho cez casove rele ktore sa predava uz hotove ale radsej by som bol keby to slo priamo cez arduino :)

rozmyslal som ako na to cez milis ale na nic som neprisiel :D takze to asi nebude ta spravna cesta...skor by som bral keby sa dalo spravit nieco takeho ze ak sa zopne vstup zapne sa nejaky casovac ktoreho cas potom porovnam :roll:

dik :)
0

Používateľov profilový obrázok
dxr
Ultimate člen
Ultimate člen
Príspevky: 3968
Dátum registrácie: 05 Aug 2013, 20:21
Bydlisko: V strede nicoho
Kontaktovať používateľa:

Re: arduino milis

Príspevok od používateľa dxr » 10 Aug 2014, 14:39

2) tlacitko podrzane dlhsie ako 2sek alebo PUSH_LIMIT sa da robit X sposobmi
jeden je v loop() a dalsi je ze mas attachinterrupt() timer proste pozeras ci je vstup _AKTIV_
ked je aktivny zvysis/zniziz citac
tlacitko.counter1++
potom ked uvolnis vtup cize vstup je dolu pozres

Kód: Vybrať všetko

if (tlacitko.counter1 > PUSH_LIMIT) tlacitko_akcia() + tlacitko.counter1=0;
else tlacitko.counter1=0; 
Tomu pripadu 1 sa dostanem ked mi bude lepsie lezim a je mi ble..


je na tebe ci chces loop() a v slucke pozerat alebo to spravis casovacom v interrupte ono je to lepsie nebude tak zasraty ten loop()
a zalezi ci ten loop je blokovany nejakym dlhsim kodom alebo ne prerusenie nebude nijak ovplyvnovat ak budes pouzivat delay()

kedze pises pre arduino by som to osobne zabalil do classy nech sa pure C/ASM MCUckari :butthead:
bude sa ti to lepsie citat a budes to vediet lahsie presuvat medzi projektami
0
Naposledy upravil/-a dxr v 10 Aug 2014, 15:03, upravené celkom 1 krát.
Mahátma Ghándí: „Nejdřív tě budou ignorovat. Pak se ti budou smát. Pak proti tobě budou bojovat. Potom zvítězíš.“
čo viac dodať som taký a možeš to skúsiť vyhrať aj tak to vzdáš.. Obrázok
Arduino is popular becouse allow complex task with minimum investment

johnyfly1
Stály člen
Stály člen
Príspevky: 249
Dátum registrácie: 30 Sep 2010, 00:00

Re: arduino milis

Príspevok od používateľa johnyfly1 » 10 Aug 2014, 15:02

dik skusim sa na to mrknut :)
este som teraz nasiel funkciu pulseIn cez to by to tiez mohlo fungovat :roll:
0

Používateľov profilový obrázok
dxr
Ultimate člen
Ultimate člen
Príspevky: 3968
Dátum registrácie: 05 Aug 2013, 20:21
Bydlisko: V strede nicoho
Kontaktovať používateľa:

Re: arduino milis

Príspevok od používateľa dxr » 10 Aug 2014, 15:05

pulse in meria periodu a je ich viac pokial viem na tvoj problem sa to mozno da pouzit
ale nieje to na to urcene je to na to ked merias otacky si uvedom ze ty mas jednu periodu cez 2 sek tam to asi havaruje
si pozri kolko je minimalna meratelna freq inak ti to crashne.

-- Spojený príspevok 10 Aug 2014, 15:07 --

Skor si pozri nejaky long press button toto hladaj button je totiz vstup takze ak chces pouzit nieco hotove
je to prave toto.
0
Mahátma Ghándí: „Nejdřív tě budou ignorovat. Pak se ti budou smát. Pak proti tobě budou bojovat. Potom zvítězíš.“
čo viac dodať som taký a možeš to skúsiť vyhrať aj tak to vzdáš.. Obrázok
Arduino is popular becouse allow complex task with minimum investment

rohy
Pokročilý člen
Pokročilý člen
Príspevky: 583
Dátum registrácie: 28 Feb 2008, 00:00
Bydlisko: PD
Vek: 55

Re: arduino milis

Príspevok od používateľa rohy » 10 Aug 2014, 16:55

ja som to zatial urobil cez delay,samozrejme nie je to idealne,ale cez milis mi to neslo,tak budem rad ak toto vlakno bude pokracovat...
0

johnyfly1
Stály člen
Stály člen
Príspevky: 249
Dátum registrácie: 30 Sep 2010, 00:00

Re: arduino milis

Príspevok od používateľa johnyfly1 » 11 Aug 2014, 17:00

vyzera ze uz to mam, pomohlo mi toto
http://jmsarduino.blogspot.sk/2009/05/c ... for-b.html
musim to este doladit ale snad to pojde :D
0

Napísať odpoveď
  • Podobné témy
    Odpovedí
    Zobrazení
    Posledný príspevok