Arduino Leonardo problème de compilation/uploading sous linux

Petite remarque : quand j'utilisais l'arduino UNO je n'avais pas de problème avec rx/tx (pour la même distribution. C'est vraiment le passage au nouvel IDE (1.0.1) pour Leonardo qui fait que ça ne marche plus. De plus j'utilisais l'API "NewSoftSerial" qui a été implanté à l'IDE désormais sous le nom (SoftSerial). Cependant quand je chercher a créer une instance "SoftSerial mySerial" il me crache dessus à la compilation. Le .h et .cpp sont bien présent dans le /librairies mais bon...

Je ne m'y suis pas forcement attardé mais je me dit que ça pourrait venir de là?

MikeLarson:
Cependant quand je chercher a créer une instance "SoftSerial mySerial" il me crache dessus à la compilation. Le .h et .cpp sont bien présent dans le /librairies mais bon...

C'est pas "SoftSerial" mais "SoftwareSerial" :wink:

Oui oui pardon j'écris mes remarques de tête (sans avoir le code devant les yeux) mais c'est bien ça que je voulais dire ^^.

Dans le doute je revérifie mon code ce soir, mais si le problème vient de là..... :grin:

MikeLarson:
Dans le doute je revérifie mon code ce soir, mais si le problème vient de là..... :grin:

Comme on dit :
"Stupid errors are allways stupid"
:grin:

Bonjour à tous! Désolé pour le temps écoulé mais je n'étais pas dans les parages.

Alors le problème de compilation est corrigé (stupid error....). Mais cela ne résouds pas mon problème de communication RX/TX, je n'arrive toujours pas à communiquer via ce port série de m****!!! :grin:

Je vais refaire des tests dans la semaine pour voir si les trames que j'envoi (et que je reçoit de l'autre coté) correspondent bien à ce que j'attends (normalement oui car avec le Uno ça marchait très bien). J'en profiterais pour voir si la fréquence de communication est bien celle attendue (9600 bauds) car la dernière fois j'avais eu un gros doute (malheureusement je n'avais pu gardé l'oscilloscope assez longtemps pour m'en assurer).

J'ai essayé de mettre à jours ma librairie rx/tx mais ça n'a rien changé (là par contre un gros doute sur la fiabilité de ma procédure de maj).

Sinon (question bête certainement), si la fréquence de communication n'est pas bonne, cela vient certainement du prescaler (ou d'une couche supérieur?), si c'est le cas comment faire pour le changer (sans devoir recoder l'ioctl qui est en pré compilé, donc non modifiable)? Existe t il une fonction bas niveau du genre "setPreScaler(...)"? Si c'est le cas où la modifier?

Je vous remercie encore une fois de votre aide et si vous remarquez que certaines de mes remarques et/ou de mes questions sont stupide dites le moi ^^ (sans m'envoyer caresser les vaches non plus :p)

Merci.

Mike

MikeLarson:
Sinon (question bête certainement), si la fréquence de communication n'est pas bonne, cela vient certainement du prescaler (ou d'une couche supérieur?), si c'est le cas comment faire pour le changer (sans devoir recoder l'ioctl qui est en pré compilé, donc non modifiable)? Existe t il une fonction bas niveau du genre "setPreScaler(...)"? Si c'est le cas où la modifier?

Il existe un utilitaire pour ça : setserial :wink:

Yep!

C'est quoi ce lien à la mord moi le noeud...

Tu voulais parler de stty ???

stty --file=/dev/ttyUSB0 -a

@+

Zoroastre.

EDIT : Tiens !!! Le lien m'a envoyer n'importe où la première fois...La seconde semble plus à propos XD

zoroastre:
C'est quoi ce lien à la mord moi le noeud...

Hu ... bon j'ai mis un lien vers le man de setserial :stuck_out_tongue:

zoroastre:
Tu voulais parler de stty ???

Non je parle bien de setserial :wink:

Edit: wait ... c'est setserial ou stty pour le baudrate ... c'est malin j'ai un gros doute :stuck_out_tongue_closed_eyes:
Edit2: les deux font le changement de baudrate (c'est pas sympa de me faire douter :P)
Exemple:

setserial /dev/ttyUSB0 baud_base 115200

Yep!

Faut installer un paquet, non ???

Perso, moi je ne l'ai pas sous Debian netinstall...(user ou root)

philippe# aptitude search setserial
p setserial - Contrôle de configuration des ports séries

stty est la commande par defaut.

@+

Zoroastre.

zoroastre:
Faut installer un paquet, non ???

Alors ça j'en sait rien, dés l'instant ou une distribution linux me passe sous la main ça devient une usine à gaz avec plein de module noyaux et de paquets installé de partout :grin:

zoroastre:
stty est la commande par defaut.

Bin alors autant utilisé stty ... :grin:

stty --file=/dev/ttyUSB0 19200

10° --ROOT-- - 21:21:37
root@debian-k:/home/philippe# stty --file=/dev/ttyUSB0 -a

speed 19200 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke

11° --ROOT-- - 21:21:46
root@debian-k:/home/philippe# stty --file=/dev/ttyUSB0 9600

12° --ROOT-- - 21:22:31
root@debian-k:/home/philippe# stty --file=/dev/ttyUSB0 -a

speed 9600 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke

J'en parle un peu ici : http://arduino.cc/forum/index.php/topic,68722.0.html

@+

Zoroastre.

Oula oula! ^^
D'abord merci de répondre!

Alors je tiens à préciser que mon problème ne vient pas du port série USB de leonardo, mais bien des pins Rx/Tx de ce dernier (je préfère le préciser dans le cas où je me serais mal exprimé dans le passé).

Donc si j'ai bien compris j'utilise la commande setserial afin de modifier le baudrate? Seulement je pensais que lorsque je préciser la commande Serialsomething.begin(9600) ça initialisé ce dernier. A moins que (comme j'ai pu lire) linux réinitialise automatique les conf des communication série (et donne ainsi une toute autre valeur). Peut être dis je n'importe quoi (c'est for possible, le bidouillage d'environnement n'est pas du tout mon fort je suis plutôt autom, IA ^^).

Si jamais je doit bel bien réaliser cette tâche, quel tty dois je changé??

Encore merci pour votre aider! (C'était quand même plus simple sur le UNO! ^^)

Mike

MikeLarson:
Alors je tiens à préciser que mon problème ne vient pas du port série USB de leonardo, mais bien des pins Rx/Tx de ce dernier (je préfère le préciser dans le cas où je me serais mal exprimé dans le passé).

Attention port série != port usb sur la leonardo :wink:
Contrairement à tous les autres carte arduino la leonardo à deux port série : Serial qui pointe sur le port série usb, et Serial1 qui pointe sur les broches RxTx hardware.
J'avais complétement zapé cette particularité.

Du reste, il est inutile de configurer le baudrate du port série usb (coté pc) car c'est un port série émulé !
Quelque soit le baudrate le port série usb tournera toujours à la vitesse du bus usb (quelque chose comme 2Mo/s) :wink:

Oui c'est bien pour ça que je tenais à le préciser ^^
Donc du coup que faire?
Il serait temps que j'apprenne à me dépatouiller tout seul mais pour l'instant quand ça parle d'environnement, de conf, etc. je suis perdu :stuck_out_tongue:

Merci

PS : personnellement j'utilise la classe SoftwareSerial et j'initialise mon instance ainsi : mySerial = SoftwareSerial(pinRX, pinTX);
Dans le setup je fais un mySerial.begin(9600); et par la suite je ne fais que des mySerial.write(something);

MikeLarson:
PS : personnellement j'utilise la classe SoftwareSerial et j'initialise mon instance ainsi : mySerial = SoftwareSerial(pinRX, pinTX);
Dans le setup je fais un mySerial.begin(9600); et par la suite je ne fais que des mySerial.write(something);

Qu'st ce que tu entend par pinRx/pinTx ? Deux broches digital quelconque ou D0/D1 ?
Si tu utilise D0/D1 c'est Serial1 qu'il faut utiliser et non SoftwareSerial.

skywodd:
Qu'st ce que tu entend par pinRx/pinTx ? Deux broches digital quelconque ou D0/D1 ?
Si tu utilise D0/D1 c'est Serial1 qu'il faut utiliser et non SoftwareSerial.

Sérieusement?.... Oui j'utilise D0/D1 mais je pensais qu'avec SoftwareSerial ça marcherait... Penses tu que mon problème pourrait venir de là? Ca me surprendrais mais bon plus rien ne m'étonne ^^

MikeLarson:
Sérieusement?.... Oui j'utilise D0/D1 mais je pensais qu'avec SoftwareSerial ça marcherait... Penses tu que mon problème pourrait venir de là? Ca me surprendrais mais bon plus rien ne m'étonne ^^

Si tu utilise D0/D1 -> Serial1, faut pas chercher plus loin :wink:

Très bien ^^ Mais cela ne réglera pas mon problème non?

MikeLarson:
Très bien ^^ Mais cela ne réglera pas mon problème non?

Pour la partie série hardware ça va bien aidé, pour le probléme d'upload le mystére reste entier ...

skywodd:
Pour la partie série hardware ça va bien aidé, pour le probléme d'upload le mystére reste entier ...

Ha mais le problème d'upload est résolu ^^ Maintenant le problème qu'il me reste c'est bel et bien celui de la com série (Rx/Tx) pour communiquer avec une autre carte.
Je vais essayer dimanche de remettre Serial1 et je verrais bien ^^

Merci de votre aide