Programmation Arduino pour Nunchuk .

Salut MadProf , pas grave pour msn .

La fonction de conversion c'est bien celle ci :

//fonction de conversion
//elle prend un float compris entre 72 et 176 en paramètre, et renvoi un entier compris entre 0 et 255
int conversion (float test){
nouvelleValeur=(int)(255*test/104)-(2295/13);
return nouvelleValeur;


Je ne comprend pas bien cette fonction , j'ai remarqué que "2295/13" était égale à environ 176 donc je me dit que "255*test/104" devrait être égale à environ 72 ?

Mais la valeur de "test" c'est quoi ?
 
Salut Sav,

Je t'explique vite fait la fonction de conversion :

Une fonction prend un/plusieurs paramètre(s) d'entrée et un paramètre de sortie. Ici j'ai mis un float en entrée que j'ai nommé "test". Elle renvoi en sortie un entier, car c'est ce que tu as besoin comme type pour envoyer vers la led.
Le float en entrée c'est en raison de pb liés aux divisions/multiplications :

Know that integer constants default to int, so some constant calculations may overflow (e.g. 60 * 1000 will yield a negative result)
int conversion (float test){ //déclaration de la fonction
nouvelleValeur=(int)(255*test/104)-(2295/13);//calcul
return nouvelleValeur;//renvoi de la valeur de sortie
}

La deuxième ligne est celle qui fait tout le travail. J'ai simplement fait une fonction du type y=ax+b pour convertir. On ne peut pas faire de règle de 3 car ce n'est pas proportionnel. Tu noteras que j'ai mis un (int) avant les calculs pour "caster"(convertir) mon résultat en un entier. Sans ça les valeurs de retour pourraient prendre une virgule.
La dernière ligne sers à renvoyer le résultat.

La fonction s'utilise donc ainsi :

int nouvelleValeur=conversion(ancienneValeur);

Ex:
// ancienne valeur =125 (sur l'intervalle 72-176)

nouvelle valeur = (255*ancienneValeur/104)-(2295/13);
soit :
nouvelle valeur = (255*125/104)-(2295/13);
nouvelle valeur = (255*ancienneValeur/104)-(2295/13);
nouvelle valeur = 129

ancienne valeur = 72 => 0
ancienne valeur = 176 => 255

En revanche tu as l'air d'avoir des valeurs qui descendent un peu en dessous de 72, ce qui te donneras un résultat négatif, et les pb que ça engendre. Il faut surement refaire une fonction qui prend un intervalle plus large en entrée.

++

MadProf
 
Salut,

Ah !!! Une fonction affine !!! :mad: Je ré entend mes prof de math qui me disent : "Mais si ça te servira un jour ..."
J 'aurais du les écouter :rolleyes:

Pour récapituler et éclaircir un peu on a :

y=ax - b

nouvelle valeur = y = valeur de sortie
a = 255
x = un entier variable entre 72 et 176 ( pourquoi diviser par 104 ? )
b = 176 (pourquoi mettre (2295/13) ? )

Je me replonge dans mes cours de troisième pour revoir un peu cette fonction affine , Jamais j'aurais cru ça il y a quelques années !!!!!
 
Salut ,

Me re-voila !

Bon , j ' arrive pas a piger le truc des fonctions de conversion , en fait je commence avec trop gros pour moi en programmation !

Mais je vais utiliser un de tes programmes MadProf , celui ou on avait qu'un petit angle de fonctionnement mais ça devrait suffire pour le moment .

Il faut que je m' attaque à un autre problème , celui de la fréquence du signal de sortie , celle ci est trop faible pour le circuit de ma radio , car je veux émuler les potentiomètres des manches , donc elle s' attend à un signal plus lisse .

Il faut que je me fasse un ptit montage qui me lisse tous ça !

A+ et merci MadProf !
 
Haut