NEMA17 - ruční krokování
Pravidla fóra
Tohle subfórum je určeno pro konzultaci ucelených nápadů, popřípadě řešení komplexnějších projektů, které opravdu není možné rozdělit na menší části.
Většinu problémů jde rozdělit na menší a ptát se na ně v konkrétních subfórech.
Tohle subfórum je určeno pro konzultaci ucelených nápadů, popřípadě řešení komplexnějších projektů, které opravdu není možné rozdělit na menší části.
Většinu problémů jde rozdělit na menší a ptát se na ně v konkrétních subfórech.
Re: NEMA17 - ruční krokování
nikde v programu nemáš digitalRead(STEP_pin ) ...
Re: NEMA17 - ruční krokování
STEP_pin je celočíselná proměnná, která má na začátku hodnotu 10, což zcela jistě není číselně rovno hodnotě HIGH (definované v Arduino.h jako 0x1 (čili 1)).
takže příkaz if (STEP_pin == HIGH) porovná hodnoty 10 a 1 a protože se to samozřejmě nerovná, tak tak podmíněný příkaz neprovede. A v dalším průchodu taky ne, bez ohledu na nějaká napětí na nožičkách se to číslo nožiky nezmění.
Naopak příkaz if (STEP_pin = HIGH) znamená, že se do té tvojí proměnné přiřadí hodnota 1 a výsledkem přiřazení je ta hodnota 1, takže se podmíněný příkaz provede vždy (opět bez ohledu na nějaká napětí kdesi). A je to tak oblíbená chyba/překlep, že překladač u toho většinou vypíše i nějaké varování.
Asi jsi měl spíš na mysli něco jako if (digitalRead(STEP_pin) == HIGH), kde přečteš hodnotu napětí na 10. nožičce (digitalRead) a pokud je dost vysoká, tak další příkaz provedeš, jinak ne.
takže příkaz if (STEP_pin == HIGH) porovná hodnoty 10 a 1 a protože se to samozřejmě nerovná, tak tak podmíněný příkaz neprovede. A v dalším průchodu taky ne, bez ohledu na nějaká napětí na nožičkách se to číslo nožiky nezmění.
Naopak příkaz if (STEP_pin = HIGH) znamená, že se do té tvojí proměnné přiřadí hodnota 1 a výsledkem přiřazení je ta hodnota 1, takže se podmíněný příkaz provede vždy (opět bez ohledu na nějaká napětí kdesi). A je to tak oblíbená chyba/překlep, že překladač u toho většinou vypíše i nějaké varování.
Asi jsi měl spíš na mysli něco jako if (digitalRead(STEP_pin) == HIGH), kde přečteš hodnotu napětí na 10. nožičce (digitalRead) a pokud je dost vysoká, tak další příkaz provedeš, jinak ne.
Re: NEMA17 - ruční krokování
Zítra budu pokračovat.
Re: NEMA17 - ruční krokování
Dopsal jsem to tam, ale stejně nic. Je to celé divné. Místo stavu portu mi to vypisuje číslo co má přiřazené v deklaraci.
Kód: Vybrat vše
digitalWrite(STEP_pin, HIGH);
// Set target motor RPM to and microstepping setting
stepper.begin(RPM, Microsteps);
}
void loop() {
digitalRead(STEP_pin);
Serial.print (int(STEP_pin));
if (STEP_pin == HIGH){
Re: NEMA17 - ruční krokování
Kód: Vybrat vše
if(digitalRead(STEP_pin) == HIGH){
}
Kód: Vybrat vše
boolean STEP_pin_stav = digitalRead(STEP_pin);
if(STEP_pin_stav == HIGH){
}
Re: NEMA17 - ruční krokování
Tak jsem zvítězil. Sice je to dost zjednodušené, ale funguje to.
Ještě jednou moc dík za pomoc.
Ještě jednou moc dík za pomoc.
Kód: Vybrat vše
else {
digitalWrite(Sleep, HIGH);
if(digitalRead(BUTT_pin) == LOW)
{
delay(600);
stepper.move(40);//Move steps clockwise
digitalWrite(Sleep, LOW);
}
Re: NEMA17 - ruční krokování
Kód: Vybrat vše
else {
if(digitalRead(BUTT_pin) == LOW)
{
digitalWrite(Sleep, HIGH);
delay(600);
stepper.move(40);//Move steps clockwise
digitalWrite(Sleep, LOW);
}
}
Re: NEMA17 - ruční krokování
Nepoznal jsem žádný rozdíl. Je to "jen" programátorsky čistější nebo je v tom něco jiného?
Re: NEMA17 - ruční krokování
Ano v mém kódu ... digitalWrite(Sleep, HIGH); se provede pouze když je stisknuto tlačítko ..... v tvém pokaždé když je něco else ... v důsledku to nemusí znamenat nic, jen se ti z nepochopitelných důvodů bude zapínat (nebude vypínat) driver krokového motoru a pokud se bude motor nacházet v nějakém stavu mezi full stepem, tak se nepatrně pohne libovolným směrem
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host