Arduino + raspberry

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 :.

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

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);
}