Stránka 1 z 1

Chyba v běhu smyčky

Napsal: 03 dub 2025, 18:52
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);
    
}

 }
 
   }

Napsal: 03 dub 2025, 19:21
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.

Napsal: 03 dub 2025, 20:22
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š?

Napsal: 03 dub 2025, 20:26
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.

Napsal: 03 dub 2025, 21:22
od hafca
Dík, tohle zabralo. Už to chodí jak potřebuji.