Je suis depuis devenu un passionné de l'Arduino et de ses possibilités sans limite pour un bidouilleur comme moi.
J'ai donc réalisé un système qui me permet de faire des panoramique sphèrique avec un servomoteur pour le tilt et un moteur pas a pas pour le Pan, tout fonctionne mais je désire que mon moteur pas a pas soit en Full step et l'EasyDriver est par défaut au 1/8 de pas , j'ai lu que dans ce cas il falait passer MS1 et MS2 en LOW. De ce fait, j'avais introduit cette commande "digitalWrite(ms1Pin,LOW);" dans le Void Setup de même que pour MS2 mais à ce moment là le moteur ne fonctionne plus correctement et il ne tourne plus et vibre comme si il était mal alimenté...
Certes, vous pouvez vous rendre compte que le code n'est pas d'une écriture de qualité mais soyez indulgant car je débute.
J'aimerais donc savoir si une âme charitable pouvais me dire comment l'insérer dans mon sketch, j'ai pour habitude de chercher par tous les moyens mais je n'ai rien trouvé sur le net. Merçi d'avance de me faire profiter de votre expérience.
Ci-dessous mon code:
#include <Servo.h>
#define DIR_PIN 8
#define STEP_PIN 9
#define ENAB_PIN 5
Servo servoTilt; // Define Tilt servo
int buzzer = 11; // Define buzzer
int freq = 0; // Define tonalite buzzer
int relai = 10; // Define relai
int sleep = 4; // Define Sleep Easydriver
int enable = 5; // Define enable Easydriver
int ms1Pin = 6; // Define MS1 Easydriver
int ms2Pin = 7; // Define MS2 Easydriver
static int compteur = 0; // variable compteur
void setup()
{
pinMode(DIR_PIN, OUTPUT); // Dir Easydriver
pinMode(STEP_PIN, OUTPUT); // Step Easydriver
pinMode(ENAB_PIN, OUTPUT); // Step Easydriver
servoTilt.attach(12); // Tilt servo a digital pin 9
Serial.begin(9600);
pinMode(relai, OUTPUT);
tone(buzzer, 5200, 1500);
servoTilt.writeMicroseconds(1450);
}
void loop()
{
movetilt(); //position servotilt a 90-45-135-0-180
delay(2000);
shoton(); //ouverture relai declenchement APN
delay(100);
shotoff(); //fermeture relai declenchement APN
delay(1500);
rotate(224, .07); //position pan 36°, 0.1 lent fort couple / 1 rapide sans couple (calcul=6,23 x 36= 224,28 microsteps)
delay(1500);
compterelai(); // compte declenchement relai
delay(10);
}
// routines pour rotate, shot, compte, movetilt
void rotate(int steps, float speed){
//rotate a specific number of microsteps (8 microsteps per step) - (negitive for reverse movement)
//speed is any number from .01 -> 1 with 1 being fastest - Slower is stronger
int dir = (steps > 0)? HIGH:LOW;
steps = abs(steps);
digitalWrite(DIR_PIN,dir);
float usDelay = (1/speed) * 70;
for(int i=0; i < steps; i++){
digitalWrite(STEP_PIN, HIGH);
delayMicroseconds(usDelay);
digitalWrite(STEP_PIN, LOW);
delayMicroseconds(usDelay);
}
}
void shoton()
{
digitalWrite(relai, HIGH);
tone(buzzer, 700, 300);
}
void shotoff()
{
digitalWrite(relai, LOW);
}
void compterelai()
{
// digitalWrite(relai, HIGH)
compteur++;
}
void movetilt()
{
switch(compteur)
{
case 0:
servoTilt.writeMicroseconds(1450);
break;
case 10:
servoTilt.writeMicroseconds(1050);
break;
case 20:
servoTilt.writeMicroseconds(1875);
break;
case 30:
servoTilt.writeMicroseconds(2300);
digitalWrite(ENAB_PIN, HIGH);
break;
case 31:
servoTilt.writeMicroseconds(650);
digitalWrite(ENAB_PIN, HIGH);
break;
case 32:
tone(buzzer, 5200, 1500);
delay(250);
tone(buzzer, 20, 1500);
delay(250);
tone(buzzer, 5200, 1500);
delay(250);
tone(buzzer, 20, 1500);
delay(250);
tone(buzzer, 5200, 1500);
delay(250);
tone(buzzer, 20, 1500);
delay(250);
tone(buzzer, 5200, 1500);
delay(250);
tone(buzzer, 20, 1500);
delay(250);
tone(buzzer, 5200, 1500);
delay(250);
tone(buzzer, 20, 1500);
delay(250);
tone(buzzer, 5200, 1500);
delay(250);
tone(buzzer, 20, 1500);
delay(250);
tone(buzzer, 5200, 1500);
delay(250);
tone(buzzer, 20, 1500);
delay(250);
tone(buzzer, 5200, 1500);
delay(250);
tone(buzzer, 20, 1500);
delay(250);
while(1) {}
break;
}
}