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.