Tjenare!
Jag håller på med ett projekt där jag ska ha en stegmotor som driver en "vagn" på en räls (likt en cnc) med Arduino. Nu har jag kommit till de steget där jag vill att vagnen ska gå till ett läge där den aktiverar en switch eller knapp innan den börjar utföra de ursprungliga koden. Alltså att den ska gå till sin nollpunkt.
Arduino är inte riktigt min grej men efter att ha kollat lite på länkarna ovan så borde nedanstående kod kanske ge en liten fingervisning i rätt riktning?
#include <AccelStepper.h>
stepper.setMaxSpeed(200);
//Startar nollning
stepper.setSpeed(-50);
while(limitswitch==0){ //medans limitswitchen ligger låg, dvs ej aktiverad
stepper.runSpeed(); //så Uppdaterar vi runSpeed() som behöver uppdateras
} //så ofta som möjligt då det är den som genererar stegen.
stepper.setSpeed(0);
stepper.setCurrentPosition(0); //sätter nuvarande position som nolla.
//Nollad/Hemma
stepper.setSpeed(-50);
while(limitswitch==0){ //medans limitswitchen ligger låg, dvs ej aktiverad
stepper.runSpeed(); //så Uppdaterar vi runSpeed() som behöver uppdateras
} //så ofta som möjligt då det är den som genererar stegen.
stepper.setSpeed(0);
stepper.setCurrentPosition(0); //sätter nuvarande position som nolla.
Alltså jag har ingen aning om hur jag ska bemöta problemet. Men motorn är funktionell.
När programmet startar ska det:
1: Initiera portar och pinnar och allt sånt.
2: Nolla stegmotorn.
3: Köra programmet vidare, den delen man brukar kalla "main loop"
Sedan är det ett problem med den kodsnudd du har fått! Om stegmotorn redan är på noll är det inte till att svara på om den är över noll eller inte så rent teknisk ska det finnas en punkt 2A som kollar om nollpunkten är påverkat, är den det ska stegmotorn köra framåt till den släpper och sedan ska steg 2B köra den tillbaka till det passar.
Min tanke var att en knapp ska finnas på sidan utav rälsen så när motorn är i position 0 så är knappen intryckt. Borde inte det fungera istället för 2A och 2B?
Main()
{
Initiera portar o sånt;
Nollar motor;
Loopar{
Pollar knappen och uppdaterar positionen för stegmotorn
}
}
Avsaknaden av main() är ju som sagt lite problematiskt, ser heller inte nånstanns där setup() anropas så den koden som står i den funktionen har jag svårt att förstå hur den kan göra nån nytta.
Vad har du för krav på nogranhet på nollningen?
Att nolla rakt mot en knapp brukar inte vara nån höjdare, bättre med en microswitch med en arm på så att brytaren inte går sönder om vagnen inte hinner stanna direkt. Ungefär som bilden http://www.micro-machine-shop.com/Taig_ ... imit_5.jpg
Jag är tacksam för alla tips!
Och det är en sådan switch jag ska använda, just nu har ja motorn på bordet och försöker bara få ihop de med prgrammeringen.
Om jag bara kör på att läsa knappen (HIGH och LOW) så händer ingenting. lastbutton och currentbutton är för att läsa av när knappen blir tryckt, så att inte knappen behöver vara intryckt.
Den är kopplad som vanligt tror jag. Ena "benet" till + och de andra till minus och pin 33.
Du läser aldrig av knappen i setup(). Du kollar bara om variablerna lastButton och currentButton är LOW, vilket de alltid kommer att vara (de ändras först i loop()).
Se först och främst till att du kan läsa av knappens värde ordentligt innan du börjar med debounce-kod och liknande. Jag tror nog inte att debounce ska behövas alls i det här fallet när jag tänker efter, det är nog snarare en nackdel att köra med det (motorn kommer att köra minst 5 millisekunder "för långt").
Det förklara en del, men som nybörjare inom programmering så är de fortfarande lite oklart, du skulle inte kunna skriva ett enkelt exempel på hur du menar?