Bonjour,
Désolé pour le temps de réponse j'ai pas eu le temps de me remettre à ça avec les examens...
J'ai rebossé dessus aujourd'hui, j'ai essayé de modifier l'exemple qui était fourni avec le logiciel UDP2COM pour l'adapter à ma situation. Voici ce que ca donne :
#include <Stepper.h>
const int stepsPerRevolution = 2048;
Stepper myStepper(stepsPerRevolution, 8, 10, 9, 11);
float data[40] = {0};
int desStepperPos;
int actualPosition = 0; // On initialise la valeur de position
void setup() {
Serial.begin(9600);
myStepper.setSpeed(10);
}
String vitesseVoulue;
void loop() {
read_frame(data); // On lit les données qui arrivent et on les envoie dans data[p]
desStepperPos = getStepperPos(1); // On convertit ces données en nombre de pas pour le moteur
if(stepperPosition < desStepperPos) // Si la vitesse voulue est supérieure à la vitesse actuelle, on fait avancer le stepper
{
myStepper.step(1);
actualPosition ++;
}
else if(stepperPosition > desStepperPos) // Si la vitesse voulue est inférieure à la vitesse actuelle, on fait reculer le stepper
{
myStepper.step(-1);
actualPosition --;
}
}
// Conversion de la vitesse en un nombre de pas pour le stepper (p=1 nous permet de donner la vitesse, j'ai fait cela pour pouvoir ajouter par la suite d'autres instruments (altimètre, variomètre...)
int getStepperPos (int p) {
float vitesse = data[p];
float stepperPos;
switch (p){
case 1 : //Vitesse
if (vitesse <= 0){
stepperPos = 0;
}
else if (vitesse >0 && vitesse<=40){
stepperPos = map(vitesse,0,40,0,130);
}
else if (vitesse >40 && vitesse<=50){
stepperPos = map(vitesse,40,50,131,296);
}
else if (vitesse >50 && vitesse<=60){
stepperPos = map(vitesse,50,60,297,455);
}
else if (vitesse >60 && vitesse<=70){
stepperPos = map(vitesse,60,70,456,643);
}
else if (vitesse >70 && vitesse<=80){
stepperPos = map(vitesse,70,80,644,796);
}
else if (vitesse >80 && vitesse<=90){
stepperPos = map(vitesse,80,90,797,933);
}
else if (vitesse >90 && vitesse<=100){
stepperPos = map(vitesse,90,100,934,1063);
}
else if (vitesse >100 && vitesse<=110){
stepperPos = map(vitesse,100,110,1064,1189);
}
else if (vitesse >110 && vitesse<=120){
stepperPos = map(vitesse,110,120,1190,1297);
}
else if (vitesse >120 && vitesse<=130){
stepperPos = map(vitesse,120,130,1298,1410);
}
else if (vitesse >130 && vitesse<=140){
stepperPos = map(vitesse,130,140,1411,1513);
}
else if (vitesse >140 && vitesse<=150){
stepperPos = map(vitesse,140,150,1514,1621);
}
else if (vitesse >150 && vitesse<=160){
stepperPos = map(vitesse,150,160,1622,1718);
}
else if (vitesse >160 && vitesse<=170){
stepperPos = map(vitesse,160,170,1719,1803);
}
else if (vitesse >170 && vitesse<=180){
stepperPos = map(vitesse,170,180,1804,1894);
}
else if (vitesse >180 && vitesse<=190){
stepperPos = map(vitesse,180,190,1895,1985);
}
else if (vitesse >190 && vitesse<=200){
stepperPos = map(vitesse,190,200,1986,2082);
}
else if (vitesse >200 && vitesse<=210){
stepperPos = map(vitesse,200,210,2083,2161);
}
else if (vitesse >210 && vitesse<=220){
stepperPos = map(vitesse,210,220,2162,2252);
}
else if (vitesse >220 && vitesse<=230){
stepperPos = map(vitesse,220,230,2253,2338);
}
else if (vitesse >230 && vitesse<=240){
stepperPos = map(vitesse,230,240,2339,2412);
}
else if (vitesse >240 && vitesse<=250){
stepperPos = map(vitesse,240,250,2413,2491);
}
else if (vitesse >250 && vitesse<=260){
stepperPos = map(vitesse,250,260,2492,2548);
}
else if (vitesse >260 && vitesse<=270){
stepperPos = map(vitesse,260,270,2549,2651);
}
else if (vitesse >270 && vitesse<=280){
stepperPos = map(vitesse,270,280,2652,2730);
}
else if (vitesse >280 && vitesse<=290){
stepperPos = map(vitesse,280,290,2731,2793);
}
else if (vitesse >290 && vitesse<=300){
stepperPos = map(vitesse,290,300,2794,2838);
}
else{
stepperPos = 2838;
}
}
return (int)(stepperPos);
}
// Lis les bytes qui arrivent et les convertit en float
float read_from_bytes(void)
{
union u_tag {
byte b[11];
float ulval;
} u;
u.b[10] = Serial.read();
u.b[11] = Serial.read();
u.b[8] = Serial.read();
u.b[9] = Serial.read();
u.b[6] = Serial.read();
u.b[7] = Serial.read();
u.b[4] = Serial.read();
u.b[5] = Serial.read();
u.b[2] = Serial.read();
u.b[3] = Serial.read();
u.b[0] = Serial.read();
u.b[1] = Serial.read();
return u.ulval;
}
//Remplis le tableau de données avec les données reçues
void read_frame(float *data)
{
int n;
float w;
if (Serial.available())
{
while(Serial.available() < 12);
n = (int)Serial.read();
w = read_from_bytes();
Serial.println(w);
data[n] = w;
}
}
Evidemment ce code ne fonctionne pas, et je ne vois pas comment le corriger étant donné que je n'ai aucune vue sur ce qui se passe pendant l'exécution du code puisque lorsque je lance la communication entre l'arduino et le simulateur, le port est occupé. Je ne peux donc pas mettre de Serial.print() pour voir ce qui se passe.
Si vous avez une idée de ce qui coince je suis preneur.
Merci encore 