besoin d'aide pour finir un programme

bonjour je vous explique,

J'ai écrit le code pour l'axe X et de l'axe Y, les deux sont pour la première ligne. Tout ce qu'il me reste a faire c'est d'ecrire quelque ligne mais je bloque pourtant cela a l'air simple...

avec ce code , je peux taper deux valeurs (tensions pour x et y) dans le moniteur série.

Par exemple,
Si je tiens à mettre le point de départ à 1,23 volt pour x et 2,31 volts pour y.

  1. Quand on commence le balayage, l'axe des x passera de 1,23 volt à 4,96 volts. Une fois que l'axe atteint 5 volts, l'axe y passera à 2,32 volts (qui est déplacer vers le bas 1 pixel). je dois reussir a faire cela

  2. La prochaine étape que je dois faire est:
    lorsque l'axe X se déplacent à 4,96 volts et axe y descendent 1 pixel, l'axe des x devras revenir à notre point de départ (1,23 volts), une fois l'axe x revenu à 1,23 volt (point de départ), l'axe y se déplace vers le bas 1 nouveau pixel (2,33 volts). Etc....
    comme ça:

Voici le programme
sachez aussi que si y est a 4,96V on stop le programme vu que le balayage sera fini et que la tension max est pas 5V mais 4,96V
//Debut
const int XPin = 9;
const int YPin = 10;
float x;
float y;

void setup() {
pinMode(XPin, OUTPUT);
pinMode(YPin, OUTPUT);
analogWrite(XPin, 0);
analogWrite(YPin, 0);
Serial.begin(9600);

}

void loop() {
if(Serial.available()){
//char pick = Serial.read();
float voltx = Serial.parseFloat();
float volty = Serial.parseFloat();
for (float x = voltx; x<=4.96; x = x + 0.01){
analogWrite(XPin, x * 51.49);
delay(100);
Serial.print("x = ");
Serial.println(x);
}

if ( x = 4.96 && y <= 4.96){ //when x = 5, y axis move down 0.01v = 1 pixels
y = volty + 0.01;
analogWrite(YPin, y * 51.49);
Serial.print("y = ");
Serial.println(y);
}
for (float x = 4.96; x>=voltx-0.01; x = x - 0.01){
analogWrite(XPin, x * 51.49);
delay(100);
Serial.print("x = ");
Serial.println(x);
}
if ( x = voltx && y <= 4.96 ){ //when x = voltx(start point), y axis move down 0.01v = 1 pixels
y = volty + 0.02;
analogWrite(YPin, y * 51.49);
Serial.print("y = ");
Serial.println(y);
}

}

}

//Fin

Merci d'avance

Bonjour,

Dans ton code y ne progresse que de 0.01 et 0.02.
Je te propose une version avec une boucle while pour le y, c'est la solution la plus simple, mais ce n'est pas la meilleure car tu ne peux rien faire d'autre pendant l'exécution du balayage (il faudrait revoir la structure du programme pour cela).

//Debut
const int XPin = 9;
const int YPin = 10;

void setup() {
 pinMode(XPin, OUTPUT);
 pinMode(YPin, OUTPUT);
 analogWrite(XPin, 0);
 analogWrite(YPin, 0);
 Serial.begin(9600);
}

void loop() {
 static bool displayMsg=true;
 
 if (displayMsg)
 {
  Serial.println("Entrez les valeurs");
   displayMsg=false; //  pour ne pas afficher indéfiniment le message
 }
 
 if (Serial.available()) {
   //char pick = Serial.read();
   float voltx = Serial.parseFloat();
   float volty = Serial.parseFloat();
   float y = volty;
   while (y<=4.96)
   {
     for (float x = voltx; x <= 4.96; x = x + 0.01) {
       analogWrite(XPin, x * 51.49);
       delay(100);
       Serial.print("x = ");
       Serial.println(x);
     }

     y += 0.01;
     analogWrite(YPin, y * 51.49);
     Serial.print("------- y = ");
     Serial.println(y);

     for (float x = 4.96; x >= voltx - 0.01; x = x - 0.01) {
       analogWrite(XPin, x * 51.49);
       delay(100);
       Serial.print("x = ");
       Serial.println(x);
     }

     y += 0.01;
     analogWrite(YPin, y * 51.49);
     Serial.print("------- y = ");
     Serial.println(y);
   }

   displayMsg=true;
 }
}

//Fin

J'ai ajouté l'affichage d'un message pour entrer les valeurs

Merci kamil je vais tester demain le programme

Merci ton programme est parfait ! Grace a sa jai pu controler les axes !!

bonjour,

je reviens car je viens de faire un programme et je dois le combiner avec celui de kamille mais a chaque fois que jessaie cela ne marche pas comme prevu...
ce programme sert a conaitre la tension dentree pour les axes x y et z :

//debut
const int XPin = 9;
const int YPin = 10;
const int ZPin = 11;

void setup() {
pinMode(XPin, OUTPUT);
pinMode(YPin, OUTPUT);
pinMode(ZPin, OUTPUT);
analogWrite(XPin, 0);
analogWrite(YPin, 0);
analogWrite(ZPin, 0);
Serial.begin(9600);
}

void loop() {

if (Serial.available()){
char Axis_pick = Serial.read();
float Voltage = Serial.parseFloat();
write_AFM(Axis_pick, Voltage);
Serial.print("Your axis is: ");
Serial.println(Axis_pick);
Serial.print("Voltage: ");
Serial.println(Voltage);

}
return;
}

void write_AFM(char Axis, float Volt){
if(Axis == 'x'){
analogWrite(XPin, Volt * 51.48);

return;
}
if(Axis == 'y'){
analogWrite(YPin, Volt * 51.48);

return;
}
if(Axis == 'z'){
analogWrite(ZPin, Volt * 51.48);

return;
}
return;
}

//fin

Bonjour,

Mets ton code entre balises.

Je ne comprend pas ce que tu veux faire.
Tu veux entrer les tension x et y de façon différente? Pourquoi?
C'est quoi z?

Oui en gros c'est cela, et z c'est le dernier axes : x c'est l'axe horizontal, y l'axe vertical et z la hauteur