Chyba v běhu smyčky

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Uživatelský avatar
hafca
Příspěvky: 4722
Registrován: 27 črc 2004, 00:00
Bydliště: 25km na západ od Prahy

Chyba v běhu smyčky

#1 Příspěvek od hafca »

Mám smyčku ve které motor 28BYJ-48 po stisku tlačítka udělá otáčku a spustí BT ovladač. Pak by se měl celý cyklus opakovat, dokud se nevypne napájení.
Jenže mě projde první cykl, motor se zastaví a už se nerozběhne. Druhá část smyčky funguje jak má. Na každý stisk tlačítka se motor pootočí.
Co tam mám špatně?

Kód: Vybrat vše

void loop() {
digitalRead(STEP_pin);

if(digitalRead(STEP_pin) == LOW){
    
   myStepper.step(stepsPerRotation);  
      delay(200);//Wait 200 milliseconds 
   digitalWrite(BLT_pin, LOW);
    delay(500);//Wait 500 milliseconds 
    digitalWrite(BLT_pin, HIGH);
    delay(1500);//Wait 1500 milliseconds
 digitalWrite(STEP_pin, LOW);
}

else {

  if(digitalRead(BUTT_pin) == LOW) // krok na stisk tlačítka
  {
     myStepper.step(stepsPerRotation /20);  
    delay(500);
    
}

 }
 
   }
Kdyby Edison nevynalezl elektřinu, do teď se díváme na televizi při svíčkách.
Uživatelský avatar
rampage
Příspěvky: 369
Registrován: 12 led 2025, 00:00

#2 Příspěvek od rampage »

Skús takto.

BUTT_pin znie trocha perverzne. Ale zatiaľ to nie je butt plug, si v cajku :D

//edit: a ak chceš, aby ti ten motor (okrem stisku tlačítka) odštartoval aj ten STEP_pin, napríklad prechodom z log. 1 na 0, tak:
1) v odkaze pod riadok 6 daj pinMode(STEP_pin, INPUT_PULLUP);
2) ešte pred if (run) daj riadok run |= digitalRead(STEP_pin) == LOW;

Napríklad.
Uživatelský avatar
lesana87
Příspěvky: 4395
Registrován: 20 zář 2014, 00:00

#3 Příspěvek od lesana87 »

Ten první digitalRead(STEP_pin); mi tam přijde úplně k ničemu a nějak nechápu ten řádek digitalWrite(STEP_pin, LOW); Dyť je ten STEP_pin vstup, tak proč do něj zapisuješ?
Uživatelský avatar
samec
Příspěvky: 6671
Registrován: 19 pro 2017, 00:00

#4 Příspěvek od samec »

hafca píše:Co tam mám špatně?
V prvom rade komentáre a zátvorky. A potom nestačí na port zapísať nulu.
digitalWrite(STEP_pin, LOW);
Musíš ešte zmeniť port zo vstupu na výstup.
pinMode(STEP_pin, OUTPUT);
Až tak sa ten port pri opatovnom čítaní bude tváriť, že tlačidlo je stále stlačené.
Každopádne, existujú krajšie, programovo čistejšie, hardverovo bezpečnejšie riešenia.
Uživatelský avatar
hafca
Příspěvky: 4722
Registrován: 27 črc 2004, 00:00
Bydliště: 25km na západ od Prahy

#5 Příspěvek od hafca »

Dík, tohle zabralo. Už to chodí jak potřebuji.
Kdyby Edison nevynalezl elektřinu, do teď se díváme na televizi při svíčkách.
Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“