Salut !
je reviens après avoir avancé sur mon programme, mais je bloque pour changer de direction les moteurs et de maintenir les tours (en pas) à effectuer.
Le programme pour le capteur
#include <NewPing.h>
#define ECHO_PIN 12 // broche Echo sur D11
#define TRIGGER_PIN 13 // broche Trigger sur D12
#define MAX_DISTANCE 100
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
unsigned int pingSpeed = 200; // période d'envoi du "ping". Une période de 50 millisecondes correspond à 20 "pings" par seconde.
unsigned long pingTimer; // timer, pour le prochain "ping".
void setup(){
Serial.begin(115200); // moniteur Série à 115200 bauds pour afficher les résultats.
pingTimer = millis();
}
void loop(){
if (millis() >= pingTimer) { // pingSpeed milliseconds since last ping, do another ping.
pingTimer += pingSpeed; // Set the next ping time.
sonar.ping_timer(echoCheck); // Send out the ping, calls "echoCheck" function every 24uS where you can check the ping status.
}
// Do other stuff here, really. Think of it as multi-tasking.
}
void echoCheck() { // Timer2 interrupt calls this function every 24uS where you can check the ping status.
// Don't do anything here!
if (sonar.check_timer()) { // This is how you check to see if the ping was received.
// Here's where you can add code.
Serial.print("Ping: ");
Serial.print(sonar.ping_result / US_ROUNDTRIP_CM); // Ping returned, uS result in ping_result, convert to cm with US_ROUNDTRIP_CM.
Serial.println("cm");
}
// Don't do anything here!
}
Celui qui fais la marche arrière avec un moteur (juste avec un bouton)
#include <AccelStepper.h>
// Define a stepper and the pins it will use
AccelStepper stepper(4, 8,10,9,11); // Defaults to AccelStepper::FULL4WIRE (4 pins) on 2, 3, 4, 5
// This defines the analog input pin for reading the control voltage
// Tested with a 10k linear pot between 5v and GND
int btn=7;
int val1=0;
void setup()
{
Serial.begin(9600);
stepper.setMaxSpeed(600);
}
void loop()
{
val1=digitalRead(btn);
Serial.print(val1);
if(val1==0){
stepper.runSpeed();
stepper.setSpeed(500);
}
if(val1==1){
stepper.setCurrentPosition(0);
stepper.setSpeed(500);
stepper.setAcceleration(500);
stepper.runToNewPosition(-1000);
}
}
Les deux marchent très bien séparément mais je n'arrive pas à les mettre en commun (je laisse la commande avec le bouton pour tester plus efficacement) au lieu de changer de direction, il s'arrette et ne bouge plus du tout
#include <NewPing.h>
#include <AccelStepper.h>
#define ECHO_PIN 12 // broche Echo sur D11
#define TRIGGER_PIN 13 // broche Trigger sur D12
#define MAX_DISTANCE 100
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
AccelStepper stepper(4, 8,10,9,11);
unsigned int pingSpeed = 200;
unsigned long pingTimer;
int btn=7;
int val1=0;
void setup(){
pinMode(7,INPUT);
stepper.setMaxSpeed(800);
stepper.setSpeed(500);
Serial.begin(115200);
pingTimer = millis();
}
void loop(){
if (millis() >= pingTimer) {
pingTimer += pingSpeed;
sonar.ping_timer(echoCheck);
}
stepper.runSpeed();
stepper.setSpeed(500);
}
void echoCheck() {
// Don't do anything here!
if (sonar.check_timer()) {
stepper.runSpeed();
val1=digitalRead(btn);
Serial.print(val1);
if(val1==1){
stepper.setCurrentPosition(0);
stepper.setSpeed(500);
stepper.setAcceleration(500);
stepper.runToNewPosition(-1000);
}
stepper.runSpeed();
stepper.setSpeed(500);
Serial.print("Ping: ");
Serial.print(sonar.ping_result / US_ROUNDTRIP_CM);
Serial.println("cm");
}
// Don't do anything here!
}
Si vous avez des idées ou autre, je suis preneur, merci de votre aide 