Aller au contenu


Photo
- - - - -

blocage sur envoi pc => arduino


  • Veuillez vous connecter pour répondre
13 réponses à ce sujet

#1 julkien

julkien

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 032 messages
  • Gender:Male

Posté 23 juillet 2011 - 03:52

salut

j'essayer ,depuis 3 bonne heures :angry: , d'envoyer de données (type int) ver une carte arduino mais la je seche

quand j'envoi par exemple 90 depuis la fenetre de commande arduino

la carte me retourne "48"

j'ai lancé un "ok"

et la elle me retourne "90"

etc ... .

par avance, merci de votre aide

ps; c'est plus des tests que un veritable projet :blush:


#include <Servo.h> 

Servo myservo;  // create servo object to control a servo 
Servo myservo1;                 // a maximum of eight servo objects can be created 

int pos = 10;    // variable to store the servo position 
int pos1 = 0; 
void setup() 
{ 
  Serial.begin(115200);
  myservo.attach(10); 
  myservo1.attach(11); 
  Serial.println(pos);
} 


void loop() 
{ 
  if (Serial.available() > 0)
  {
    pos    = Serial.read();

    Serial.print("PosiTion recu: ");
    Serial.println(pos);


  }

  myservo.write(pos); 
  myservo1.write(90); 
} 

 



#2 Hexa Emails

Hexa Emails

    Membre passionné

  • Membres
  • PipPipPip
  • 439 messages
  • Gender:Male

Posté 23 juillet 2011 - 04:08

Salut,

Serial.read renvoi le 1er octet de "la pile". Les transmissions séries sont groupées par octet, quand tu tapes dans le serial monitor "90", tu te retrouves avec le code ASCII du chiffre 9, puis le code ASCII du chiffre "0":
respectivement 57 et 48 de mémoire.

Une solution serait de récupérer chacun de ces chiffres dans une chaine, puis de transformer cette chaine en int.

#3 julkien

julkien

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 032 messages
  • Gender:Male

Posté 23 juillet 2011 - 05:10

Salut,

Serial.read renvoi le 1er octet de "la pile". Les transmissions séries sont groupées par octet, quand tu tapes dans le serial monitor "90", tu te retrouves avec le code ASCII du chiffre 9, puis le code ASCII du chiffre "0":
respectivement 57 et 48 de mémoire.

Une solution serait de récupérer chacun de ces chiffres dans une chaine, puis de transformer cette chaine en int.

ok, mais toi comment fais tu pour donné les instruction a ton robot (tu sais le premier que tu controlé par pc?)

merci quand meme
;)

#4 Hexa Emails

Hexa Emails

    Membre passionné

  • Membres
  • PipPipPip
  • 439 messages
  • Gender:Male

Posté 23 juillet 2011 - 06:10

Je lui envoyais moins de 255 ordres basiques, donc je faisais un switch case:
Si le robot reçoit "1" il avance, si "2" il recule (...) si "x" il augmente l'angle pitch de la webcam, si "y" il reduit l'angle yaw... j ai depuis trouvé un très bon programme sur Pobot, mais le je suis sur mon tel donc je ne peux pas te l envoyer.

EDIT: du pc, on corrige les fautes et on donne le lien en question:

http://www.pobot.org/Interface-ligne-de-commande-pour.html

par contre il a un défaut par rapport à ma méthode précédente: la rapidité... je perdais carrément en vitesse de réaction. mais bon faut savoir ce que l'on veut.

#5 julkien

julkien

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 032 messages
  • Gender:Male

Posté 23 juillet 2011 - 06:22

Je lui envoyais moins de 255 ordres basiques, donc je faisais un switch case:
Si le robot reçoit "1" il avance, si "2" il recule (...) si "x" il augmente l'angle pitch de la webcam, si "y" il reduit l'angle yaw... j ai depuis trouvé un très bon programme sur Pobot, mais le je suis sur mon tel donc je ne peux pas te l envoyer.

EDIT: du pc, on corrige les fautes et on donne le lien en question:

http://www.pobot.org...mande-pour.html

par contre il a un défaut par rapport à ma méthode précédente: la rapidité... je perdais carrément en vitesse de réaction. mais bon faut savoir ce que l'on veut.


tu as etait plus rapide que moi ^^ mais avec tes info je l'ai trouvé


merci
decidément


encore une tres bonne realisation de julien ;)

#6 Astondb8

Astondb8

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 111 messages
  • Gender:Male
  • Location:Paris

Posté 26 juillet 2011 - 04:41

Désolé Alex mais j'ai besoin d'une explication colons étayée pour bien comprendre ton explication.

Pour l'envoi et le 1er bit ok
Mais pour le reste.
Tu envois une chaîne (donc entre cote "90")
Pui tu transforme ta chaîne en valeur numérique ?
Mais si c'est bien ça, la transformation d'une chaîne en valeurs numérique de ta chaîne va retourner les valeurs ASCII de ta chaîne non ?

Désolé mais il m'arrive d'etree parfois lourd. Et meme plus que de raison.

Cdlt
Yves

 


#7 Hexa Emails

Hexa Emails

    Membre passionné

  • Membres
  • PipPipPip
  • 439 messages
  • Gender:Male

Posté 26 juillet 2011 - 05:37

Salut Yves,

Pas de souci, le code n'est pas de moi:

trouvable ici: http://www.pobot.org/Interface-ligne-de-commande-pour.html

il enregistre TOUS les octets reçus dans une chaine de caractères (un caractère = un octet)

la chaine est du type "SD45G23" par exemple (il y a donc ici 7 octets envoyés)

"S" signifie start, on passe à la lettre suivante

"G" annonce la valeur de la variable gauche:
on rentre dans une boucle TANT QUE le caractère suivant est un chiffre, on le récupère:

si on a "45", le programme va lire 4, et va stocker dans la variable "gauche" (initialisée à zéro) la valeur 4.
puis il va lire 5 et va faire: "gauche" PREND LA VALEUR de (5 + 10 * "gauche") . cela permet de gérer les nombres décimaux ( 1234 = 1*1000+2*100+3*10+4*1 ou ici : 1234= (((0+1)*10+2)*10+3)*10+4. pas très clair à écrire...

si le programme lit un caractère dont le code ASCII n'est pas compris entre 48 et 57 (les chiffres), on sort de la boucle "TANT QUE" qui permettait d'obtenir la valeur de "gauche". il peut recevoir D (ou pas, ça marche tout de même), s'il n'y a rien il tombe sur "E" qui est ajouté automatiquement et qui marque la fin du message.

le programme d'origine fonctionne pour "G" et "D", mais on peut ajouter "A", "Z", ou même "%" , "#"... (tous les caractères ASCII sauf les chiffres)

pour le souci premier de julkien, il croyait envoyer la valeur 90 mais il envoyait la valeur 57 (code ASCII de 9) puis 48. Avec son code, pour envoyer le servo à 90° il aurait fallu taper le caractère Z (majuscule).

C'est des soucis de programmation de bas niveau, il ne faut pas oublier qu'un programme ne fait pas ce qu'on veut qu'il fasse, mais ce qu'on lui a dit de faire (et il y a parfois de grands écarts entre les 2 )

#8 Astondb8

Astondb8

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 111 messages
  • Gender:Male
  • Location:Paris

Posté 26 juillet 2011 - 06:01

Merci pour cette explication on ne peut plus clair. Je dirais meme limpide. ;-)

Merci Alexy.

Cdlt
Yves

 


#9 julkien

julkien

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 032 messages
  • Gender:Male

Posté 11 février 2012 - 05:21

Image IPB hum je rebloque sur ce point (encore...)

j'ai pourtant fait comme la derniere fois

je lui met SG50D30, ou SD30G20

il me retourne systematiquement ce

> Start command.
> servo gauche : 0
> servo droit : 0


et il ne sagit que d'un copier coler du site de pobot

pff il ya un truc qui m'echape :huh:

#10 julkien

julkien

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 032 messages
  • Gender:Male

Posté 12 février 2012 - 01:08

Image IPB hum je rebloque sur ce point (encore...)

j'ai pourtant fait comme la derniere fois

je lui met SG50D30, ou SD30G20

il me retourne systematiquement ce

> Start command.
> servo gauche : 0
> servo droit : 0


et il ne sagit que d'un copier coler du site de pobot

pff il ya un truc qui m'echape :huh:


a force de testé j'ai fini par réussir

dans le logiciel arduino

dans : Tools\programmer\ => j'ai choisi l'option parallel Programmer

la grande question c'est mais a quoi sert cette option de m....... ?

bref pour le moment cela fonctionne pourvu que ça dur ....

#11 seb03000

seb03000

    @pump_upp - best crypto pumps on telegram !

  • Membres
  • PipPipPipPipPip
  • 1 193 messages
  • Location:https://t.me/pump_upp
  • Interests:https://t.me/pump_upp

Posté 12 février 2012 - 01:12

Salut Julkien.

Je pense que c'est pour ça http://arduino.cc/en/Hacking/ParallelProgrammer?from=Main.ParallelProgrammer met je peux me trompé

totalement.

#12 julkien

julkien

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 032 messages
  • Gender:Male

Posté 12 février 2012 - 02:56

Salut Julkien.

Je pense que c'est pour ça http://arduino.cc/en...allelProgrammer met je peux me trompé

totalement.



enfin mais pourquoi ce bug alors ?
c'est curieux quand meme!?

#13 seb03000

seb03000

    @pump_upp - best crypto pumps on telegram !

  • Membres
  • PipPipPipPipPip
  • 1 193 messages
  • Location:https://t.me/pump_upp
  • Interests:https://t.me/pump_upp

Posté 12 février 2012 - 11:44

enfin mais pourquoi ce bug alors ?
c'est curieux quand meme!?


Je ne peux te dire julkien .

Seule chose que moi je peux te dire , c'est de revérifier tes

branchements , et tes soudures si tu en as fait bien sûr.

Tu travailles bien , sur une carte Arduino ???

Mes quelle version , de l'Arduino a tu ????

#14 julkien

julkien

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 032 messages
  • Gender:Male

Posté 13 février 2012 - 06:44

Je ne peux te dire julkien .

Seule chose que moi je peux te dire , c'est de revérifier tes

branchements , et tes soudures si tu en as fait bien sûr.

Tu travailles bien , sur une carte Arduino ???

Mes quelle version , de l'Arduino a tu ????


le probleme est resolu
merci

suite ici




0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users