Go Down

Topic: récupéré la valeur d’une pin de sortie (Read 702 times) previous topic - next topic

charles32

Mar 14, 2013, 02:57 pm Last Edit: Mar 14, 2013, 05:22 pm by Jean-François Reason: 1
Bonjour,
Je suis débutant dans la programmation et l'utilisation des cartes arduino.
Mon souci et le suivant je voudrais récupéré la valeur d'une pin de sortie dans mon programme.
La sortie est une sortie pour un servo qui je voudrais convertir vers une sortie analogique (0 a 5 volts).
Sur ma carte Mega les sorties 2,3,4,5,6,7 sont pour 6 servo et les sorties de 8 a 13 sont pour analogique.
La sortie 2 (servo) je voudrais la convertir en sortie analogique 8.
Voici mon programme il fonctionne, mais avec des à-coups.
Quel un a une solution ou une idée à mon souci ???

Bien a vous, Charles
Code: [Select]

const int servo_pin[] = {2, 3, 4, 5, 6, 7}, servo_zero[6] = {1500, 1500, 1500, 1500, 1500, 1500}, servo_mult = 750;
double eb[6] = {0,0,0,0,0,0}, theta_s[6], servo_pos[6], ub[3], a, b, c;
char dataType;
Servo servo[6];
void setup()
{
Serial.begin(115200);
for(int i = 0; i < 6; i++)
 {
   servo[i].attach(servo_pin[i]);
   servo[i].writeMicroseconds(servo_zero[i]);
 }
 delay(100);
}

void loop()
{
  unsigned long pulseLength1;
  pulseLength1 = constrain(pulseIn( (2), HIGH), 1000, 2000);
  int pulseLength = map(pulseLength1, 1000, 2000, 0, 255);


Bernardino

Bonjour,

J'ai un peu de mal à comprendre :
Dans ton programme, tu lis ce qui se trouve sur la pin 2 sur laquelle est branché  un servo?

Merci de préciser

A+
Olivier

charles32

Bonjour
Dessole pour cette réponse tardive.
Le programme à l'origine est prévu pour des RCservo.
Personnellement je cherche une façon pour pouvoir convertir le signal servo  vers une valeur analogique
pin 2 a 7  = sortie servo  (const int servo_pin[] = {2, 3, 4, 5, 6, 7}) vers 6 valeur analogique
autrement dit
« va lire la valeur sur pin 2 est converti la vers une valeur analogique »
Bien a vous Charles

skywodd

Bonjour,

J'ai pas tout compris mais en gros tu veut faire de la conversion numérique -> analogique ?
Mais dans ce cas là pourquoi lit tu sur une sortie ? Je comprend pas ...
Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

68tjs

Quote
Mais dans ce cas là pourquoi lit tu sur une sortie ? Je comprend pas ...

Tu n'es pas tout seul. La seule raison que je vois est de vouloir contrôler ce qui sort du micro.

Prenons le problème différemment :  Quel est le format d'une sortie servo ?

Je ne me suis jamais servi de ces bébetes, j'ai cru comprendre qu'il fallait leur envoyer des impulsions selon une période fixe, la largeur de l'impulsion définissant l'angle désiré.
Ai-je bon ?
Si oui il doit exister une norme, peut-on avoir des valeurs :
Période = ? ms
45° = ? ms
90°= ? ms
135°= ? ms
180° = ? ms
et la suite pour ceux qui font 360°.

La connaissance précise du format des commandes permettra de voir si l'objectif peut être atteint.

papybricol

Bonsoir,

un schéma parlant mieux qu'un long discours:

http://fribotte.free.fr/bdtech/pic/pic_et_servo.html

la norme est loin d'être "normalisée" XD
Suivant les marques, les modèles...
rotation totale sur 180°, 200°, et plus.. à tester très progressivement en allongeant ou raccourcissant l'impulsion (attention à la mécanique, il y a une butée!!)

Les servos à rotation continue ont une résistance fixe à la place du potard et n'ont plus de butée.
Une impulsion d'environ 1.5ms commande l'arrêt. (parfois tremblotant....)
En s'éloignant de ce point neutre d'un côté ou de l'autre, il tourne dans un sens ou l'autre. Plus on s'éloigne plus il tourne vite (max environ 60rpm)
...ils embarquèrent la logique, coupèrent les cordons, alors, libérés de leurs chaînes, une immensité s'ouvrait devant eux...

fdufnews

En fait ce que je ne comprends pas c'est que si j'en crois le morceau de code que tu donnes dans ton premier poste, tu pilotes toi même les servo donc tu connais la valeur de l'impulsion. Donc pourquoi la mesurer????
Je pense que tu n'as pas tout dit et ton besoin est un peu (voir beaucoup) obscure.

Go Up