Bonjour les Maker's, nouvelle étape, maintenant que j'ai réussi (et avec l'aide des Maker's du forum) à connecter l'Arduino sur la Pi et ainsi me servir de l'IDE Arduino pour programmer direct sur celui ci, ma nouvelle mission et d'utiliser un programme sur la Pi qui va communiquer avec l'Arduino en passant par l'USB en utilisant un programme test en C, pour ce faire j'ai suivi ce tuto :
https://www.monocili...sing-usb-and-c/
En utilisant cette librairie pour la communication USB :
https://www.teuniz.net/RS-232/
Par la suite j'ai eu des petits soucis, donc, si vous avez un problème de Comport en exécutant le programme en C, ouvrez le terminal sur la Pi et tapez ceci :
ls /dev/tty*
Dans les infos données on doit retrouver normalement une de ces lignes voir les deux :
/dev/ttyACM0
/dev/ttyAMA0
Une des deux lignes correspond à votre Arduino, mais là on a besoin du port, regardez sur ce lien https://www.teuniz.net/RS-232/ et tout en bas on retrouve les infos nécessaire pour ma part je suis sur le port 24.
Je vous met la liste des ports les plus fréquents via USB :
16 ttyUSB0
17 ttyUSB1
18 ttyUSB2
19 ttyUSB3
20 ttyUSB4
21 ttyUSB5
22 ttyAMA0
23 ttyAMA1
24 ttyACM0
25 ttyACM1
Coter Arduino :
Copier coller ce bout de code, il va nous permettres d'ouvrir le port pour renvoyer l'information à la Pi :
Il n'y a pas besoin de toucher à quoi que ce soit, on Téleverse.
void setup() { Serial.begin(57600); // opens serial port, 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 } }
Coter Pi :
On colle ce code avec le bon port :
#include <stdlib.h> #include <stdio.h> #include <unistd.h> #include "rs232.h" #define BUF_SIZE 128 int main() { int i=0; int cport_nr=16; /* /dev/ttyUSB0 */ //<------- ici, la valeur par défaut sera surement à changer on retrouve le 16, pour ma part je devais mettre le 24 comme port. int bdrate=57600; /* 9600 baud */ char mode[]={'8','N','1',0}; // 8 data bits, no parity, 1 stop bit char str_send[2][BUF_SIZE]; // send data buffer unsigned char str_recv[BUF_SIZE]; // recv data buffer strcpy(str_send[0], "This is a test string."); strcpy(str_send[1], "This is another test string."); if(RS232_OpenComport(cport_nr, bdrate, mode)) { printf("Can not open comport\n"); return(0); } usleep(2000000); /* waits 2000ms for stable condition */ while(1) { RS232_cputs(cport_nr, str_send[i]); // sends string on serial printf("Sent to Arduino: '%s'\n", str_send[i]); usleep(1000000); /* waits for reply 1000ms */ int n = RS232_PollComport(cport_nr, str_recv, (int)BUF_SIZE); if(n > 0){ str_recv[n] = 0; /* always put a "null" at the end of a string! */ printf("Received %i bytes: '%s'\n", n, (char *)str_recv); } i++; i %= 2; usleep(5000000); /* sleep for 5 Second */ } return(0); }
Compilez et exécutez, et si vous retrouvez ce genre d'infos à votre écran coté Pi (programme C) c'est que c'est bon, le dialogue s’effectue...
Perso je suis passé par Code::Blocks pour compiler le programme, je n'ai pas la même fenêtre que le screen ci dessous, mais, les infos bien entendu sont les mêmes.
Voili voilou, j'espère que cela vous aura aidé ^^
Je vais essayer de "remanier" le code en version C++, je m'avance peut être, mais bon, ça ne coûte rien d'essayer.
Modifié par Oliver17, 09 décembre 2017 - 06:12 .