Bonjour,

Je sèche un peu sur la trigonométrie. Enfin bref, je ne suis pas là pour raconter "my life" !

Il se trouve que j'aimerais piloter un char avec un seul manche de radio. J'ai construit la radio, elle fonctionne.

Je viens d'essayer un peu de trigonométrie avec un peu d'aide mais les résultats ne sont pas correct. Je ne peux prendre que des valeurs de 0 à 180 avec un neutre à 90. Ceci étant des degrés. Il en va de soi que les valeurs négatives que me retourne mon code ne sont pas compatible avec les valeurs requise pour le fonctionnement.

Mettons un manche, axe X pour la vitesse et y pour la direction.
-Sa position au neutre renvera sur Voie1 = VoieX = 90 et Voie2 = VoieY = 90.

-Si je pousse en avant, donc, sur la voie des X, j'aurais VoieX = 0 et VoieY = 90.
-Si je pousse en arrière, donc, sur la voie des x, j'aurais VoieX = 180 et voieY = 90.

-Si je pousse sur la droite, donc, sur la voie des y, j'aurais VoieY = 0 et VoieX = 90.
-Si je pousse sur la gauche, donc, sur la voie des y, j'aurais VoieY = 180 et VoieY = 0.

En sortie, chaque voies, donc, Voie1 et Voie2 sont l'équivalent de ce que feront les deux moteurs. Moteur Gauche = Voie1 et Moteur Droit = Voie2.

A ce moment là, j'aimerais obtenir ceci en valeurs proportionnelles.
Si je pousse le manche en avant : Voie1 = 0 et Voie2 = 0.
Si je met au neutre : Voie1 = 90 et voie2 = 90.
Si je pousse en arrière : Voie1 = 180 et Voie2 = 180.
Si je pousse sur la droite : Voie1 = 0 et Voie2 = 180.
Si je pousse sur la gauche : Voie1 = 180 et Voie2 = 0.

Pour le moment, mon code d'essai ressemble à ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
 
/* LOOP */
void loop() {
 
  //Lire la position des manches
  tensionVoie1 = analogRead(potarVoie1);
  tensionVoie2 = analogRead(potarVoie2);
  tensionVoie3 = analogRead(potarVoie3);
  tensionVoie4 = analogRead(potarVoie4);
 
  //Transformation de la tension en valeur digitale
  voie1 = map(tensionVoie1, 0, 1023, 0, 180);
  voie2 = map(tensionVoie2, 0, 1023, 0, 180);
  voie3 = map(tensionVoie3, 0, 1023, 0, 180);
  voie4 = map(tensionVoie4, 0, 1023, 0, 180);
 
  //Mixage voie 1 et voie 2
  //x=cos(voie1)sin(voie2) et y=sin(voie2)
 
  int cosVoie1 = cos(voie1) * 100;
  int sinVoie2 = sin(voie2) * 100;
  voie1 = (cosVoie1 * sinVoie2) / 100;
  voie2 = sinVoie2;
 
  //Lire la position des boutons
 
  //Si le bouton de la voie 5 est en haut
  if(digitalRead(btnVoie5Up) == HIGH) {
    //La valeur digitale sera de 0  
    voie5 = 0;
  }
 
  //Si le bouton de la voie 5 est en bas
  if(digitalRead(btnVoie5Do) == HIGH) {
    //La valeur digitale sera de 180  
    voie5 = 180;
  }
 
  //Si le bouton 5 est au centre
  if(digitalRead(btnVoie5Up) == LOW && digitalRead(btnVoie5Do) == LOW) {
    //La valeur digitale sera de 90  
    voie5 = 90;
  }
 
  //Si le bouton de la voie 6 est en haut
  if(digitalRead(btnVoie6Up) == HIGH) {
    //La valeur digitale sera de 0  
    voie6 = 0;
  }
 
  //Si le bouton de la voie 6 est en bas
  if(digitalRead(btnVoie6Do) == HIGH) {
    //La valeur digitale sera de 180  
    voie6 = 180;
  }
 
  //Si le bouton 6 est au centre
  if(digitalRead(btnVoie6Up) == LOW && digitalRead(btnVoie6Do) == LOW) {
    //La valeur digitale sera de 90  
    voie6 = 90;
  }
 
  //Initialiser la trame
  trame = "";
 
  //Crée la trame
  trame += voie1;  //Voie 1
  trame += ",";  //Séparateur
  trame += voie2;  //Voie 2
  trame += ",";  //Séparateur
  trame += voie3;  //Voie 3
  trame += ",";  //Séparateur
  trame += voie4;  //Voie 4
  trame += ",";  //Séparateur
  trame += voie5;  //Voie 5
  trame += ",";  //Séparateur
  trame += voie6;  //Voie 6
 
  //Transmission de la trame sur le récepteur
  Serial1.print(trame);
 
  //Ecrire à l'écran des infos
  ecrireLcd(trame, 01);  //Ecrire
 
  //Pause 90ms
  delay(90);
 
  //Effacer l'écran
  clearLcd();  //Effacer l'écran
}
Voila, je m'en remet à vous car je sèche un peu.

Pour vous aider à la compréhension théorique du problème, je peux vous demander de jeter un oeil sur ce plan :
http://i.stack.imgur.com/6SDXJ.jpg

Merci pour votre aide.