Divný, divný. Nezdržujou ti to nějaký výpisy přes seriák? Nebo nemáš nějak divně nastavený mikrokrokování? Teď jsem si jen tak nechal přepočítat celej rozsah 0-1023 a bylo to pár desítek ms celkem, tak to ten přepočet jedné hodnoty přece nemůže hrát nějak podstatnou roli.
Ještě mě teď napadlo, že kdyby nebylo nutné, aby to bylo úplně přesně, tak by se to dalo trochu zjednodušit, protože když se dělí 1023 a pak násobí 4000, tak to je skoro jako vynásobit 4, že to nemusí být ve floatech, ale stačila by celá čísla (chyba max 1 v rozsahu 4000), a pak taky že zastavit je skoro stejný, jako jet rychlostí 0:
Kód: Vybrat vše
void loop()
{
unsigned int pozadovanaRychlost; // požadovaná rychlost 0..1023
bool spinac = digitalRead(spinac_PIN); // stav spínače (rovnou ho přečteme)
digitalWrite(led_PIN,spinac==SPINAC_JEDEME); // LED bude svítit, když motor má jet a nesvítit, když nemá jet
if(spinac == SPINAC_JEDEME) { // spínač je v poloze "jedeme" - motor má jet
pozadovanaRychlost = analogRead(SPEED_PIN); // přečíst polohu potenciometru (0 až 1023)
} else {
pozadovanaRychlost = 0; // chceme zastavit, takže 0
}
stepper1.setSpeed(pozadovanaRychlost * 4); // nastavit rychlost motoru
stepper1.runSpeed(); // nechat motor točit (s nulou stojí)
}
Čili celkově tam je za běžného provozu jedno digitální + jedno analogové čtení, zápis na pin, dva shifty doleva a zbytek je už na AccelStepperu SetSpeed + runSpeed, tak jestli ani tohle AccelStepper na Arduinu nezvládne, tak je u mě mrtvej Homolka.
A ještě, jak to je s nastavením zrychlení? Default když nic nezadáš je, jestli mě nešálí zrak, 1, a tady i v příkladech od knihovny se nastavuje 100. To je docela rozdíl, nemůže tohle být problém? Třeba že by se jednou braly procenta a jednou poměr (1=100%)