En fait, ce que j'ai compris, c'est que le programme Arduino était déjà occupé à exécuter un programme pour l'affichage du OLED et donc, comme aucun port n'était ouvert sur Arduino, il ne risquait pas de renvoyer quoi que ce soit.

Raspberry Pi -> Arduino USB C++
#22
Posté 20 octobre 2017 - 10:39
En fait, ce que j'ai compris, c'est que le programme Arduino était déjà occupé à exécuter un programme pour l'affichage du OLED et donc, comme aucun port n'était ouvert sur Arduino, il ne risquait pas de renvoyer quoi que ce soit.
Ah je pensais que là tu utilisais le même code arduino du tuto tout simplement.
#23
Posté 20 octobre 2017 - 10:39
Désolé Arobasseb, c'est moi qui et chier dans la colle si je puis dire
#24
Posté 20 octobre 2017 - 10:44
Désolé Arobasseb, c'est moi qui et chier dans la colle si je puis dire
Pas grave , mais c'est vrai qu'en debug distant on ne fait qu'avec les informations données et donc des hypothèses qui peuvent paraître saugrenues. Mais le plus important finalement, après le fait que ça fonctionne maintenant, c'est que tu ais partagé tout les points où tu as bloqué et leur résolution, sachant que toutes ces erreurs arrivent à n'importe qui, donc que du positif
#25
Posté 20 octobre 2017 - 12:56
Bon, j'ai modifier mon premier post, j'espère que je n'ai rien oublié ^^
Edit : par contre je me suis rendu compte d'un truc, c'est que je perd des caractères à la fin sur le retour de l'Arduino.
j'ai testé à plusieurs bauds différents de 9600 à 115200 mais c'est toujours pareil...
Modifié par Oliver17, 20 octobre 2017 - 01:10 .
#26
Posté 22 octobre 2017 - 04:45
Pura vida
Ma chaine youtube https://www.youtube....EQ5MTR3A/videos
Tutoriel MIT Inventor2 https://www.robot-ma...e-robot-mobile/
#27
Posté 22 octobre 2017 - 04:51
Houla, je ne suis plus sur cette lib, j'essaye la lib fstream en c++.
#28
Posté 08 novembre 2017 - 09:01
J'ai fait un test avec ta lib rs-232.
Code arduino :
void setup() { Serial.begin(115200); } void loop() { while (Serial.available() > 0) { // if any data available char incomingByte = Serial.read(); // read byte Serial.print(incomingByte); // send it back } }
Code cpp sur le raspberry :
#include <stdlib.h> #include <stdio.h> #include <unistd.h> #include "rs232.h" int main() { int counter=0, i, n, cport_nr=16, bdrate=115200; unsigned char buf[4096]; char str[1024]; char mode[]={'8','N','1',0}; if(RS232_OpenComport(cport_nr, bdrate, mode)) { printf("Can not open comport\n"); return(0); } printf("Comport opened\n"); while(1) { n = RS232_PollComport(cport_nr, buf, 4095); if(n > 0) { buf[n] = 0; /* always put a "null" at the end of a string! */ for(i=0; i < n; i++) { if(buf[i] < 32) /* replace unreadable control-codes by dots */ { buf[i] = '.'; } } printf("received %i bytes: %s\n", n, (char *)buf); } sprintf(str, "Hello %d", counter++); RS232_cputs(cport_nr, str); printf("sent: %s\n", str); usleep(1000000); /* sleep for 100 milliSeconds */ } return(0); }
Ben ... ça fonctionne bien :
root@raspberrypi2b:/home/pi/testserial/RS-232# gcc demo_rx.c rs232.c -Wall -Wextra -o2 -o test_rx root@raspberrypi2b:/home/pi/testserial/RS-232# ./test_rx Comport opened sent: Hello 0 received 7 bytes: Hello 0 sent: Hello 1 received 7 bytes: Hello 1 sent: Hello 2 received 7 bytes: Hello 2 sent: Hello 3 received 7 bytes: Hello 3 sent: Hello 4 received 7 bytes: Hello 4 sent: Hello 5 received 7 bytes: Hello 5 sent: Hello 6 received 7 bytes: Hello 6 sent: Hello 7 received 7 bytes: Hello 7 sent: Hello 8 received 7 bytes: Hello 8 sent: Hello 9 received 7 bytes: Hello 9 sent: Hello 10 received 8 bytes: Hello 10 sent: Hello 11 received 8 bytes: Hello 11 sent: Hello 12 ^C root@raspberrypi2b:/home/pi/testserial/RS-232#
Notes :
Pour trouver le device du port usb, tu débranche et tu branche le câble usb. tu lance la commande dmesg. La dernière ligne donne :
FTDI USB Serial Device converter now attached to ttyUSB0
C'est donc (pour moi) /dev/ttyUSB0. Soit le 16 dans le programme.
Pour t'aider, il y a aussi la commande lsusb.
Si tu le fait (et tu fait bien de le faire) avec le user pi, il faut lui donner le droit d'aller sur le port usb :
sudo usermod -a -G dialout pi
J'ai fait ce test avec un raspberryPI 2 B et un arduino nano.
Modifié par Path, 08 novembre 2017 - 09:05 .
ajout de notes
#30
Posté 09 novembre 2017 - 09:54
C'est un truc de dingue quand même, je viens de regarder ton code, c'est la même chose, bon, je test ça tout à l'heure si je peux.
PS : j'allais le dire pour les messages plus long lorsque j'ai vu le "Hello 1"
Edit : sinon pour trouver ton port sur pi tu fais ls /dev/tty*
Ça se retrouve assez facilement aussi
Merci
#31
Posté 09 novembre 2017 - 12:57
Donc, voici ce que j'ai fais,
Code Arduino :
void setup() { Serial.begin(115200); //opens serial ports, sets data rate to 57600 baud } void loop() { while (Serial.available() > 0) { //if any data available char incomingByte = Serial.read(); //read byte Serial.write (incomingByte); //send it back } }
Code Raspberry C++ :
#include <iostream> #include "rs232.h" #define BUF_SIZE 128 using namespace std; int main() { int cport_nr(24); // dev/ttyACM0 int bdrate(115200); // Baud char mode []={'8','N','1',0}; // 8 data bits, no parity, 1 stop bit char str_send[BUF_SIZE]; unsigned char str_recv[BUF_SIZE]; // recv data buffer strcpy(str_send, "coucou robot maker plop plop."); if (RS232_OpenComport(cport_nr, bdrate, mode)) { cout <<"Can not open comport"<< endl; return 0; } sleep(2); // waits 2s for stable condition cout << "Raspberry connecté : "<< endl; while(1) { RS232_cputs(cport_nr, str_send);// send string on serial cout <<"Envoie à Arduino : " << str_send << endl; sleep(1); // waits for reply 1s int n = RS232_PollComport(cport_nr, str_recv, BUF_SIZE); if (n > 0) { str_recv[n] = 0; // always put a "null" at the end of a string cout <<"Reçu : "<< n <<" bytes. " << endl; cout << str_recv << endl; } } return 0; }
Le résultat :
Raspberry connecté : Envoie à Arduino : coucou robot maker plop plop. Reçu : 17 bytes coucou robot makr
etc etc avec un rendu aléatoire du nombre de bytes par moment, cela peut être 16 comme 18 bytes.
#32
Posté 09 novembre 2017 - 05:19
Bon et bien avec la patience de Path, on a trouvé mon problème après de multiples tests, ce serait la carte Arduino Uno qui a un défaut.
D'ou ma perte de données au retour.
Encore merci Path pour ta patience
#33
Posté 09 novembre 2017 - 06:53
De rien, je vais devoir aller me faire un verre en terrasse pour oublier
Nan je plaisante. On a passé 4h sur discord mine de rien. Au passage, je suis content de t'avoir montré comment je fais pour programmer la pi. A distance avec ssh et sftp. On peut aussi passer par serveur git pour transférer les sources de ta machine vers le pi. Mais une autre fois ^^ En tout cas, ton pi pourra embarquer un linux headless, sans écran, ni clavier, ni souris, plus propice à son intégration dans un robot. On a vu aussi qu'on pouvait se passer d'un gros IDE pour faire ces petits programmes tout simples.
Et désolé pour ta uno ...
- Oliver17 aime ceci
#34
Posté 25 novembre 2017 - 08:17
Résultat des courses, la liaison fonctionne entre PI2ou PI3 et arduino nano. Pas avec la mega ni avec le uno.
Il n'y aurait pas un driver à installer sur la pi pour ces 2 arduino ? Ou est-ce que ça demande de passer un convertisseur du genre ftdi ? Ou alors c'est tout simplement un paramétrage de la lib rs232 qui nous échappe.
- Oliver17 aime ceci
#35
Posté 29 novembre 2017 - 07:58
Mon robot est équipé d'un RPI3 et d'un Arduino Mega , la communicaion USB entre eux fonctionne parfaitement sans rien n'ajouter
Pura vida
Ma chaine youtube https://www.youtube....EQ5MTR3A/videos
Tutoriel MIT Inventor2 https://www.robot-ma...e-robot-mobile/
#36
Posté 29 novembre 2017 - 08:02
@Gerardosamara : avec quel langage ??
Là le but est d'utiliser C++ et de ne pas utiliser python.
#37
Posté 29 novembre 2017 - 08:19
Mon robot est équipé d'un RPI3 et d'un Arduino Mega , la communicaion USB entre eux fonctionne parfaitement sans rien n'ajouter
Moi aussi

Ps. Je dis ça pour embêter Oliver, j’ ai pas pu me retenir ^^
#38
Posté 29 novembre 2017 - 08:21
Ma conclusion @Oliver17 est que ce montage ne demande pas de passer par un convertisseur du genre FTDI.
Pour le langage coté RPI3 , c'est en Python . Coté Arduino , j'utilise l'IDE Arduino
Je ne maitrise pas le C++
Pura vida
Ma chaine youtube https://www.youtube....EQ5MTR3A/videos
Tutoriel MIT Inventor2 https://www.robot-ma...e-robot-mobile/
#39
Posté 08 décembre 2017 - 11:09
Plop les Maker's, j'ai enfin réussi (pas seul c'est clair), à faire communiquer Pi - Arduino Mega via TX/RX avec les programmes postés plus haut, en résumer, on ne passe plus par l'usb, trop le bordel, là le but en passant par un Convertisseur de niveau logique 3.3V 5V et donc en utilisant le TX/RX et en gardant ce code :
Code arduino :
void setup() { Serial.begin(9600); } void loop() { while (Serial.available() > 0) { // if any data available char incomingByte = Serial.read(); // read byte Serial.write(incomingByte); // send it back } }
Code c sur le raspberry :
#include <stdlib.h> #include <stdio.h> #include <unistd.h> #include "rs232.h" int main() { int counter=0, i, n, cport_nr=0, //0 = ttyS0 bdrate=9600; unsigned char buf[4096]; char str[1024]; char mode[]={'8','N','1',0}; if(RS232_OpenComport(cport_nr, bdrate, mode)) { printf("Can not open comport\n"); return(0); } printf("Comport opened\n"); while(1) { n = RS232_PollComport(cport_nr, buf, 4095); if(n > 0) { buf[n] = 0; /* always put a "null" at the end of a string! */ for(i=0; i < n; i++) { if(buf[i] < 32) /* replace unreadable control-codes by dots */ { buf[i] = '.'; } } printf("received %i bytes: %s\n", n, (char *)buf); } sprintf(str, "Hello les makers, je fais un test avec beaucoup de caractére :) %d", counter++); RS232_cputs(cport_nr, str); printf("sent: %s\n", str); usleep(1000000); /* sleep for 100 milliSeconds */ } return(0); }
Résultat :
Comport opened sent: Hello les makers, je fais un test avec beaucoup de caractére :) 0 received 66 bytes: Hello les makers, je fais un test avec beaucoup de caractére :) 0 sent: Hello les makers, je fais un test avec beaucoup de caractére :) 1 received 66 bytes: Hello les makers, je fais un test avec beaucoup de caractére :) 1 sent: Hello les makers, je fais un test avec beaucoup de caractére :) 2 received 66 bytes: Hello les makers, je fais un test avec beaucoup de caractére :) 2 sent: Hello les makers, je fais un test avec beaucoup de caractére :) 3 received 66 bytes: Hello les makers, je fais un test avec beaucoup de caractére :) 3 sent: Hello les makers, je fais un test avec beaucoup de caractére :) 4 received 66 bytes: Hello les makers, je fais un test avec beaucoup de caractére :) 4 sent: Hello les makers, je fais un test avec beaucoup de caractére :) 5 received 66 bytes: Hello les makers, je fais un test avec beaucoup de caractére :) 5 sent: Hello les makers, je fais un test avec beaucoup de caractére :) 6 received 66 bytes: Hello les makers, je fais un test avec beaucoup de caractére :) 6 sent: Hello les makers, je fais un test avec beaucoup de caractére :) 7 received 66 bytes: Hello les makers, je fais un test avec beaucoup de caractére :) 7 sent: Hello les makers, je fais un test avec beaucoup de caractére :) 8 received 66 bytes: Hello les makers, je fais un test avec beaucoup de caractére :) 8 sent: Hello les makers, je fais un test avec beaucoup de caractére :) 9 received 66 bytes: Hello les makers, je fais un test avec beaucoup de caractére :) 9 sent: Hello les makers, je fais un test avec beaucoup de caractére :) 10 received 67 bytes: Hello les makers, je fais un test avec beaucoup de caractére :) 10 sent: Hello les makers, je fais un test avec beaucoup de caractére :) 11 received 67 bytes: Hello les makers, je fais un test avec beaucoup de caractére :) 11 sent: Hello les makers, je fais un test avec beaucoup de caractére :) 12 received 67 bytes: Hello les makers, je fais un test avec beaucoup de caractére :) 12 sent: Hello les makers, je fais un test avec beaucoup de caractére :) 13 received 67 bytes: Hello les makers, je fais un test avec beaucoup de caractére :) 13 sent: Hello les makers, je fais un test avec beaucoup de caractére :) 14 received 67 bytes: Hello les makers, je fais un test avec beaucoup de caractére :) 14 sent: Hello les makers, je fais un test avec beaucoup de caractére :) 15
On peut donc dire que tout est là
J'ai donc utilisé le com ttyS0 (serial) dans la console faites : ls -l /dev vous verrez ainsi si il y a bien
serial0 -> ttyS0 (c'est surtout cette ligne pour le coup qui nous intéresses)
serial1 -> ttyAMA0
Par la suite, faites votre petit branchement avec le convertisseur de niveau logique cité plus haut, ou un convertisseur jouant le même rôle, et zou.
Mon prochain test, reprendre le programme en C++ que j'avais retranscris du C et voir si cela fonctionne.
Je remercie tout de même ceux à qui j'ai bien pris la tête pour m'aider ^^ Path, R1D1, Mike (même si Mike n'a rien foutue lol humour mange donc tes cordons bleu froids ) et autres personnes que j'aurais pu zapper (poisson rouge).
Merci
#40
Posté 08 décembre 2017 - 12:45

Plus sérieusement, merci d´avoir repporté ici.
Répondre à ce sujet

Aussi étiqueté avec au moins un de ces mots-clés : rs232, Tx Rx, Arduino, Raspberry Pi 3, C++
0 utilisateur(s) li(sen)t ce sujet
0 members, 0 guests, 0 anonymous users