Stap 5: Programmering voorbeeld
Dus, is er wat extra dingen hier dat u kan of kan niet nodig hebt, zoals de code voor de LCDShield, of de code controleert de uitvoeringstermijn van de hoofdlus.
Als u van de A1-A4 gebruikmaakt moet deze code compileren (Arduino IDE 1.6.5) en het krijgen van uw motor te draaien. De meeste van deze code is mijn eigen land, met een beetje geleend of gewijzigd vanuit het Stepper.h bestand.
Opmerkingen:
De vertraging op "StepFast" is in microseconden, dus 2000 is alleen 2 milliseconden, allermeest naar de tijd als u probeert de intensivering van de motor met een vertraging van minder dan 1200 zal het stappen overslaan, en ondanks 800 stappen wordt 4 volledige omwentelingen voor meeste motoren, zult u dat uw motor enige maakt misschien een kwart draai.
Deze code is bedoeld als een voorbeeld, het momenteel niet omkeren, noch heeft het houden van feedback van de L298, of doen een heleboel andere dingen die ik wil. In de bestaande Stepper.h te kijken, kan ik het opnieuw schrijven in de komende weken met behulp van deze methode voor de behandeling van de stappen, zoals de bestaande methode waarschijnlijk de L298 of een andere configuratie van H-brug beschadigen zal.
#include <Arduino.h> #include <LiquidCrystal.h> //Keypad Shield LCD pins LiquidCrystal lcd(8, 9, 4, 5, 6, 7); long unsigned int lasttime; long unsigned int timer; int timeuntil; float exectime; int smallcount; void setup() { lcd.begin(16, 2); lcd.print("Motor Test"); delay(2500); lcd.clear(); } void StepFast(long int steps,long unsigned wait) { DDRC = B00011110; //set arduino ports A1-A4 output remember this works backwards! // ^-pin 7^-pin 0 int pattern = 0; int mydelay = 0; for (int i = 0;i < steps; i++) { switch (pattern) { case 0: // 1010 PORTC = B00001010; //arduino analog port we're using pins A1-A4 So we're only going to change those break; case 1: // 0110 PORTC = B00001100; break; case 2: //0101 PORTC = B00010100; break; case 3: //1001 PORTC = B00010010; break; } pattern++; if (pattern > 3) {pattern = 0; } delayMicroseconds(wait); } PORTC = B00000000; //de-energize to motor } void loop() { lasttime = timer; timer = millis(); exectime = (timer - lasttime)/1000; if (timeuntil < timer) { lcd.clear(); lcd.setCursor(0,0); lcd.print("Clockwise "); lcd.print(exectime); lcd.setCursor(0,1); lcd.print(timer); lcd.print(" "); lcd.print(lasttime); timeuntil = timer + 1500; } StepFast(800,2000); //steps,delay in microseconds delay(5000); }
Opmerkingen:
Deze code werkt redelijk goed bij matige stap snelheden van ~ 300 RPM (staptempo van 1ms of zo) als je probeert om meer naar 1000 RPM, het zal beginnen met het ontbreken van stappen tenzij de spanning, maar toeneemt als je de motor op 60 RPM (5ms) draaien op > 5V de L298N beginnen zal te krijgen heel warm.