Moc děkuju ale bohužel takhle to nechodí. Procedura stepper.run() je volaná "málo často" tudíž motor se pohybuje rychlostí 1 krok za sekundu (asi ty pauzy = delay(1000) a tudíž je to nepoužitelné. Taky se to spouští bez ohledu na stav tlačítka. Pomoc, jsem ztracen! Půjde ten accel.stepper na tohle vůbec použít?jeykey píše:to: melsoft
upozorňuju, že program sem netestoval na motorech, takže sem ani nepřenastavoval žádný hodnoty, doladění je na Tobě
3 osý manipulátor bez PC
Je možno změnit v tom programu prodlevu mezi jednotlivými řádky ?
Jsou například tyto příkazy na jednu osu a je dlouhá doba mezi jednotlivými řádky když se provádí program.
moveX(40, 3.7);
moveX(80, 3.1);
moveX(40, 3.7);
moveX(0, 3.7);
Je to způsobeny tím Serial.print ?
Když začíná vykonávat jeden řádek tak blikne TX.
Jsou například tyto příkazy na jednu osu a je dlouhá doba mezi jednotlivými řádky když se provádí program.
moveX(40, 3.7);
moveX(80, 3.1);
moveX(40, 3.7);
moveX(0, 3.7);
Je to způsobeny tím Serial.print ?
Když začíná vykonávat jeden řádek tak blikne TX.
print to nedělá, to mělo smysl jen když je za každým krokem, takhle je to nepodstatný, možná zkrátit náběh motoru, ten má vliv na dýlku posledního kroku a může to vypadat jako pauza,.tarvisio píše:Je možno změnit v tom programu prodlevu mezi jednotlivými řádky ?
Jsou například tyto příkazy na jednu osu a je dlouhá doba mezi jednotlivými řádky když se provádí program.
moveX(40, 3.7);
moveX(80, 3.1);
moveX(40, 3.7);
moveX(0, 3.7);
Je to způsobeny tím Serial.print ?
Když začíná vykonávat jeden řádek tak blikne TX.
Je to pěkný, ale já tam pauzu nepotřebuji. Mám jí tam už tak dost protože to dlouho čeká mezi řádky.kutil_tim píše:to se bojíš tam dát pauzu třeba tak ?
int spocni = 10;
moveX(40, 3.7);
delay(spocni);
moveX(80, 3.1);
delay(spocni);
moveX(40, 3.7);
delay(spocni);
moveX(0, 3.7);
Zkoušel jsem, bohužel to nepomohlo.kutil_tim píše:zkrátit že by tu ?
// functions
void moveX(float posun, float rychlost) {
Serial.println("pohyb na ose X zahajen");
int Current = 1;
float Bx = Xcounter - posun;
Bx = Bx * (-1);
int Ot = Bx * (kroku_na_otacku_X / stoupani_sroubu_X);
int zrychleni = 400; // tady se mění zrychlení motoru při rozjezdu (počet kroků na plnou rychlost)
float maxDelay = 700; // tady se mění prudkost náběhu motoru (když dělá velký rázy, zvýší se číslo)
float Ost = 1 / (kroku_na_otacku_X / stoupani_sroubu_X);
rotate(Ot, rychlost, DIR_X_PIN, STEP_X_PIN, Current, zrychleni, maxDelay, Ost);
}
kutil_tim píše:a co toto ?
if (view == 1) Serial.println(Ost); //pokud je cosi pravda
delay(1000);//tak spočni sekundu a pak
toč
//rotate a specific number of steps - (negitive for reverse movement)
//speed is any number from .01 -> 1 with 1 being fastest - Slower is stronger
To je ono ! Super, díky moc !
Tak teď je to "much better". Jen jsem ještě překopal toto:
if (status_L_S = 1){
for (int i = 0; i<=long_repeats; i++){
stepper.setSpeed(long_speed);
stepper.setCurrentPosition(0);
stepper.moveTo(16000);
while (stepper.currentPosition()!=16000){
stepper.run();
}}
delay(long_pause);
}
na toto:
if (status_L_S = 1){
for (int i = 0; i<=long_repeats; i++){
stepper.setSpeed(long_speed);
stepper.setCurrentPosition(0);
stepper.moveTo(16000);
while (stepper.currentPosition()!=16000){
stepper.run();
}
delay(long_pause);
}
}
neb to nedělalo pauzy mezi protáčením v cyklu a trochu jsem poladil rychlosti a už to fiští. Ještě si musím ten status vyčíst z přepínačů a bude hotovo.
Díky moc jeykey, jsi génius!!!
if (status_L_S = 1){
for (int i = 0; i<=long_repeats; i++){
stepper.setSpeed(long_speed);
stepper.setCurrentPosition(0);
stepper.moveTo(16000);
while (stepper.currentPosition()!=16000){
stepper.run();
}}
delay(long_pause);
}
na toto:
if (status_L_S = 1){
for (int i = 0; i<=long_repeats; i++){
stepper.setSpeed(long_speed);
stepper.setCurrentPosition(0);
stepper.moveTo(16000);
while (stepper.currentPosition()!=16000){
stepper.run();
}
delay(long_pause);
}
}
neb to nedělalo pauzy mezi protáčením v cyklu a trochu jsem poladil rychlosti a už to fiští. Ještě si musím ten status vyčíst z přepínačů a bude hotovo.
Díky moc jeykey, jsi génius!!!
Nevěděl bys co je v programu špatně že to na základě příkazů jezdí jinak ?
První řádek příkazu to udělá správně, ale pak se to zamotá a jezdí jinak. Jak kdyby přičítalo k tomu prvnímu.
Popřehazoval jsem směry motorů aby mi to jezdilo správně, jinak nic.
Vím že tam byl nastavený absolutní systém, ale ten teď neposlouchá.
Děkuji za pomoc.
Poslední funkční program:
První řádek příkazu to udělá správně, ale pak se to zamotá a jezdí jinak. Jak kdyby přičítalo k tomu prvnímu.
Popřehazoval jsem směry motorů aby mi to jezdilo správně, jinak nic.
Vím že tam byl nastavený absolutní systém, ale ten teď neposlouchá.
Děkuji za pomoc.
Poslední funkční program:
jak si přehazoval ty směry otáček tak tam zůstalo starý počítání
if (dir == LOW) Ost = Ost*(-1);
musíš přepsat na:
if (dir == HIGH) Ost = Ost*(-1);
klidně to předělej kutile Time, já tak trochu nestíhám, tak to vždycky dodělávám narychlo s hromadou jiných věcí
Tarvisio jestli to máš už v nějaký koncový podobě, tak bychom tam měli použít knihovnu accelstepper a doladit to do finálový podoby, bez těch evolučních zbytků.
if (dir == LOW) Ost = Ost*(-1);
musíš přepsat na:
if (dir == HIGH) Ost = Ost*(-1);
klidně to předělej kutile Time, já tak trochu nestíhám, tak to vždycky dodělávám narychlo s hromadou jiných věcí
Tarvisio jestli to máš už v nějaký koncový podobě, tak bychom tam měli použít knihovnu accelstepper a doladit to do finálový podoby, bez těch evolučních zbytků.
jeykey píše:jak si přehazoval ty směry otáček tak tam zůstalo starý počítání
if (dir == LOW) Ost = Ost*(-1);
musíš přepsat na:
if (dir == HIGH) Ost = Ost*(-1);
klidně to předělej kutile Time, já tak trochu nestíhám, tak to vždycky dodělávám narychlo s hromadou jiných věcí
Tarvisio jestli to máš už v nějaký koncový podobě, tak bychom tam měli použít knihovnu accelstepper a doladit to do finálový podoby, bez těch evolučních zbytků.
Děkuji za pomoc. Už vše funguje, jsem happy
![Very Happy :D](./images/smilies/icon_biggrin.gif)
Jdu tvořit dále to zařízení ...
Věděl by si mi poradit proč mi to na několik tlačítek pouští různé programy, které tam mám předvolené ?
Na každé tlačítko mám jiný pohyb, ale tlačítka mi někdy zablbnou a udělají program z druhého tlačítka.
Vstupy mám jako INPUT a taky nastaveny na HIGH.
Zde je schéma zapojení.
Děkuji za pomoc.
Na každé tlačítko mám jiný pohyb, ale tlačítka mi někdy zablbnou a udělají program z druhého tlačítka.
Vstupy mám jako INPUT a taky nastaveny na HIGH.
Zde je schéma zapojení.
Děkuji za pomoc.
Naposledy upravil(a) tarvisio dne 4. 10. 2014, 10:26, celkem upraveno 2 x.
Myslím že to mám vyřešeno, byl problém v UNO.tarvisio píše:Věděl by si mi poradit proč mi to na několik tlačítek pouští různé programy, které tam mám předvolené ?
Na každé tlačítko mám jiný pohyb, ale tlačítka mi někdy zablbnou a udělají program z druhého tlačítka.
Vstupy mám jako INPUT a taky nastaveny na HIGH.
Zde je schéma zapojení.
Děkuji za pomoc.
Ahoj jeykey,
chci se zeptat proč je tam potřeba použít knihovnu accelstepper ?
Ono to takhle nebude spolehlivě fungovat ?
Ja to nyní už používám ten program. Vrtá mi to na tom malém soustruhu díly. Pohyby chodí zatím v pohodě.
Program trvá asi 23 sekund. Díly se mění ručně a potom se program spouští tlačítkem cca každých 10 sekund znova. Stává se mi, že mi program zahapruje a zastaví se a pak se znova rozjete, ale jakoby se celý posune v jedné ose o několik mm a pak mi to narazí, protože to přijede rychloposuvem dál něž by mělo. Musím restartovat, najet znovu výchozí polohy. Stává se mi to ca každých 200 ks když to vrtá v kuse.
Je to napojeno na arduino Mega, myslíš že kdyby tam bylo Due tak by problém mohl zmizet, protože je to výkonější ?
chci se zeptat proč je tam potřeba použít knihovnu accelstepper ?
Ono to takhle nebude spolehlivě fungovat ?
Ja to nyní už používám ten program. Vrtá mi to na tom malém soustruhu díly. Pohyby chodí zatím v pohodě.
Program trvá asi 23 sekund. Díly se mění ručně a potom se program spouští tlačítkem cca každých 10 sekund znova. Stává se mi, že mi program zahapruje a zastaví se a pak se znova rozjete, ale jakoby se celý posune v jedné ose o několik mm a pak mi to narazí, protože to přijede rychloposuvem dál něž by mělo. Musím restartovat, najet znovu výchozí polohy. Stává se mi to ca každých 200 ks když to vrtá v kuse.
Je to napojeno na arduino Mega, myslíš že kdyby tam bylo Due tak by problém mohl zmizet, protože je to výkonější ?