Étape 5: Exemples de programmation
Donc, il y a quelques trucs supplémentaires ici que vous pouvez ou ne pouvez pas besoin, comme le code de la LCDShield, ou le code qui vérifie le temps d’exécution de la boucle principale.
Si vous utilisez l’autoroute A1-A4 ce code devrait compiler (IDE Arduino 1.6.5) et obtenir votre moteur de tourner. La plupart de ce code est ma propre, avec un peu emprunté ou modifié dans le fichier Stepper.h.
Notes :
Le retard sur « StepFast » est en microsecondes, 2000 est donc seulement 2 millisecondes, la plupart du temps si vous essayez de marcher le moteur avec un retard de moins de 1200 il va sauter des étapes, et malgré les 800 mesures étant 4 tours complets pour la plupart des moteurs, vous trouverez peut-être que tourne votre moteur fait seul peut-être un quart.
Ce code est destiné à titre d’exemple, actuellement, il n’est pas inversée, ni prendre vos commentaires depuis le L298, ou faire beaucoup d’autres choses que je voudrais. En regardant les Stepper.h existants, je peux ré-écrire dans les prochaines semaines à l’aide de cette méthode pour gérer les étapes, car la méthode existante endommagera probablement le L298 ou toute autre configuration de pont en H.
#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); }
Notes :
Ce code fonctionne assez bien à des vitesses modérées étape ~ 300 tr/min (cadence de 1ms ou pas) que vous essayez d’obtenir plus vers 1000 tr/min, il va commencer manquant étapes à moins que la tension augmente, toutefois si vous laisser tourner le moteur à 60 tr/min (5ms) à > 5V le L298N va commencer à devenir très chaud.