Arduino-switch, case-opakovanie

Sekcia určená pre Arduino nadšencov

Moderátor: Moderátori

Mlino319
Nový člen
Nový člen
Príspevky: 74
Dátum registrácie: 03 Feb 2016, 19:17
Bydlisko: KE-okolie

Arduino-switch, case-opakovanie

Príspevok od používateľa Mlino319 » 26 Nov 2016, 23:50

Zdravím,
už pár nocí sedím nad Arduinom a stále sa mi to nepodarilo, vyskúšal som už strašne veľa kombinácii
ide mi oto že použijem cyklus Switch-case1,2...-toto mi funguje ale LED blikne len pár x potom vypne, a čaká na dašie stlačenie-to mi nevyhovuje
ja potrebujem aby mi blikala stále a popri tom čakalo na stlačenie tlačidla aby mohlo prejsť na dalšie case
vlastne ani neviem či to takto môže fungovať, asi nato bude iná funkcia ako Switch
do Case som skúšal dať Do While ale nechcelo to prejsť do dalšej case-
do{
}while (dal som tam všemožné kombinácie čísel a <>= a stále nechcelo prejsť do dalšej case)

dúfam že ste pochopili a tu je základný kód programu, prosím vás o doplnenie niečoho do case alebo apoň nasmerovanie na inú funkciu ktorá to dokáže

Kód: Vybrať všetko

int tlacidlo = 10;
int green = 2;
int pocet = 0;
int stavTlacidla=1; // defaultný stav na vstupe tlačidla

void setup()
{
 
 pinMode(green, OUTPUT); 
 digitalWrite(green,0); 
 
 pinMode(tlacidlo, INPUT); 
 digitalWrite(tlacidlo, 1); 

 }
void loop()
{
 digitalWrite(green,HIGH); // východzí stav 
 do // čakacia slučka so sledovaním stavu tlačidla
 {
 stavTlacidla=digitalRead(tlacidlo); // čítanie stavu tlačidla
 delay(5);
 }while(stavTlacidla==1);
 

 pocet++; // ak bolo stlačené tlačidlo, inkrementácia počtu stlačení
 switch(pocet) // testovanie počtu stlačení tlačidla
 {
 case 1:  
{

    digitalWrite(green, 0);    //tu chcem aby LED blikala dovtedy kým sa nestlačí tlačidlo a preskočí na dalšiu case
    delay (50);
    digitalWrite(green, 1);
    delay (50);
    
} 
 break;

case 2: 
 {
 digitalWrite (green, 0);
 delay (1000);
 digitalWrite (green, 1);
 delay (1000);


 
 }
 
 pocet=0;
 }
} 
0

TomasNM
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1371
Dátum registrácie: 22 Jan 2012, 19:24
Bydlisko: Nové Mesto nad Váhom
Vek: 43

Re: Arduino-switch, case-opakovanie

Príspevok od používateľa TomasNM » 26 Nov 2016, 23:59

Hlavny problem je v pouziti Delay().
Da sa to vyriesit inou fintou,ktora odcitava interny casovac,pricom loop ide stale dokola bez zabrzdenia funkciou delay().
0

Mlino319
Nový člen
Nový člen
Príspevky: 74
Dátum registrácie: 03 Feb 2016, 19:17
Bydlisko: KE-okolie

Re: Arduino-switch, case-opakovanie

Príspevok od používateľa Mlino319 » 27 Nov 2016, 00:02

treba použiť millis?
do toho sa mi moc nechce
cez nejake button state alebo niečo ine by to nešlo?
0

TomasNM
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1371
Dátum registrácie: 22 Jan 2012, 19:24
Bydlisko: Nové Mesto nad Váhom
Vek: 43

Re: Arduino-switch, case-opakovanie

Príspevok od používateľa TomasNM » 27 Nov 2016, 00:04

Ano,millis a porovnanie predchadzajuceho casu s aktualnym.
Inu moznost nepoznam.

Skus to takto:

Kód: Vybrať všetko

int tlacidlo = 10;
int green = 2;
int pocet = 0;
boolean ledstav=false;

unsigned long teraz,predtym;

void setup()
{
pinMode(green, OUTPUT);
digitalWrite(green,0);
pinMode(tlacidlo, INPUT);
}

void loop()
{
  teraz=millis();
  if(digitalRead(tlacidlo)) { pocet++;delay(100);}

  if(pocet==1) { if(teraz>=predtym+50  ) { ledstav=!ledstav;digitalWrite(green, ledstav);predtym=teraz;}}
  if(pocet==2) { if(teraz>=predtym+1000) { ledstav=!ledstav;digitalWrite(green, ledstav);predtym=teraz;}}

}
0
Naposledy upravil/-a TomasNM v 27 Nov 2016, 00:12, upravené celkom 1 krát.

Mlino319
Nový člen
Nový člen
Príspevky: 74
Dátum registrácie: 03 Feb 2016, 19:17
Bydlisko: KE-okolie

Re: Arduino-switch, case-opakovanie

Príspevok od používateľa Mlino319 » 27 Nov 2016, 00:10

tak podarilo sa mi najsť niečo so specDelay () a for tak skusim pomeniť či to bude fungovať ako ja chcem
0

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