Stránka 2 z 3
Re: NEMA17 - ruční krokování
Napsal: 08 lis 2024, 20:20
od kiRRow
nikde v programu nemáš digitalRead(STEP_pin ) ...
Re: NEMA17 - ruční krokování
Napsal: 08 lis 2024, 21:00
od gilhad
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.
Re: NEMA17 - ruční krokování
Napsal: 08 lis 2024, 22:46
od kiRRow
kiRRow píše: ↑08 lis 2024, 20:20
nikde v programu nemáš digitalRead(STEP_pin ) ...
nerad cituji sám sebe ... digitalRead(STEP_pin) tam nikde není ......
Re: NEMA17 - ruční krokování
Napsal: 08 lis 2024, 22:48
od hafca
Zítra budu pokračovat.
Re: NEMA17 - ruční krokování
Napsal: 09 lis 2024, 10:04
od hafca
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í
Napsal: 09 lis 2024, 10:15
od kiRRow
Kód: Vybrat vše
if(digitalRead(STEP_pin) == HIGH){
}
nebo
Kód: Vybrat vše
boolean STEP_pin_stav = digitalRead(STEP_pin);
if(STEP_pin_stav == HIGH){
}
Re: NEMA17 - ruční krokování
Napsal: 09 lis 2024, 11:46
od hafca
Tak jsem zvítězil. Sice je to dost zjednodušené, ale funguje to.
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í
Napsal: 10 lis 2024, 13:55
od kiRRow
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í
Napsal: 10 lis 2024, 17:00
od hafca
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í
Napsal: 10 lis 2024, 17:46
od kiRRow
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