system
1
Bonjour,
Je suis un debutant et je voudrais dans le cadre de mon projet, faire communiquer mon raspberry et mon arduino via le port usb serie.
Principe : j'envoie une valeur depuis un programme ecrit en c situé dans mon raspberry à l'arduino auquel il est connecté à l'aide du cable usb
Comment faire ?
Merci :.
jfs
2
Il y a éventuellement la possibilité de faire un sketch avec Processing et de le faire tourner sur la Rasp.... après installation de Java.
feugana1:
Bonjour,
je voudrais faire communiquer mon raspberry et mon arduino via le port usb serie.
Principe : j'envoie une valeur depuis un programme ecrit en c situé dans mon raspberry à l'arduino auquel il est connecté à l'aide du cable usb
Connectée par l'USB, la carte arduino est vue comme un port série. Suivant le type de carte arduino le port est soit:
/dev/ttyUSB0
/dev/usbACM0
Donc en C il suffit d'ouvrir un flux sur le bon port série et la communication est établie.
Bonjour,
fdufnews:
Donc en C il suffit d'ouvrir un flux sur le bon port série et la communication est établie.
... mais avec les paramètres par défaut du port.
C'est pas aussi simple que d'ouvrir un fichier dans /dev si on veut paramétrer la vitesse de com ou autre :
http://www.cmrr.umn.edu/~strupp/serial.html
system
5
Bonjour à tous
j'ai réussi à établir une conneexion lecture et ecriture entre le raspberry et l'arduino
Voici le code
using namespace std;
#include <iostream>
#include <stdio.h> // standard input / output functions
#include <stdlib.h>
#include <string.h> // string function definitions
#include <unistd.h> // UNIX standard function definitions
#include <fcntl.h> // File control definitions
#include <errno.h> // Error number definitions
#include <termios.h> // POSIX terminal control definitions
int ouvrir(char *fichier)
{
/* Open File Descriptor */
int USB = open(fichier,O_RDWR| O_NOCTTY);
/* Error d'ouverture */
if ( USB < 0 )
{
cout << "Error " << errno << " opening " << "/dev/ttyACM0" << ": " << strerror (errno) << endl;
}
/*Configure the port */
struct termios tty;
struct termios tty_old;
memset (&tty, 0, sizeof tty);
/* Error Handling */
if ( tcgetattr ( USB, &tty ) != 0 )
{
cout << "Error " << errno << " from tcgetattr: " << strerror(errno) << endl;
}
/* Save old tty parameters */
tty_old = tty;
/* Set Baud Rate */
cfsetospeed (&tty, (speed_t)B9600);
cfsetispeed (&tty, (speed_t)B9600);
/* Setting other Port Stuff */
tty.c_cflag &= ~PARENB; // Make 8n1
tty.c_cflag &= ~CSTOPB;
tty.c_cflag &= ~CSIZE;
tty.c_cflag |= CS8;
tty.c_cflag &= ~CRTSCTS; // no flow control
tty.c_cc[VMIN] = 1; // read doesn't block
tty.c_cc[VTIME] = 5; // 0.5 seconds read timeout
tty.c_cflag |= CREAD | CLOCAL; // turn on READ & ignore ctrl lines
/* Make raw */
cfmakeraw(&tty);
/* Flush Port, then applies attributes */
tcflush( USB, TCIFLUSH );
if ( tcsetattr ( USB, TCSANOW, &tty ) != 0)
{
cout << "Error " << errno << " from tcsetattr" << endl;
}
return USB;
}
int main(int argc, char *argv[])
{
int USB = ouvrir("/dev/ttyACM0");
/* Allocate memory for read buffer */
unsigned char buf [256];
memset (&buf, '\0', sizeof buf);
/******Writing in the buffer*****/
char cmd[] = {'p','o','b','c','\0'};
int n_written = 0;
do
{
//cout << &cmd[n_written]<< endl;
//n_written contient le nombre de caractères deposés
n_written += write( USB, &cmd[n_written], 1 );
}
while (cmd[n_written-1] != '\0' && n_written > 0);
/******Reading from the port*****/
char n = 0;
std::string response;
while((n > 0))
{
n = read( USB, &buf, 1 );
cout << "Read: " << buf << endl;
//J'ai commenté cette ligne :) Bugg //
//response.append(&buf);
}
//cout << "La chaine lue est : " << buf << endl;
n=n-1;
if (n < 0)
{
cout << "Error reading: " << strerror(errno) << endl;
}
else if (n == 0)
{
cout << "Read nothing!" << endl;
}
else
{
cout << "Response: " << response;
}
/* Error Handling */
if (n < 0)
{
cout << "Error reading: " << strerror(errno) << endl;
}
/* Print what I read... */
cout << "La chaine lue est : " << buf << endl;
close(USB);
}