liaison serie/usb pc--arduino

Bonjour, quelqu’un pourrait -il me dire pourquoi je suis obligé de demarrer un programme d’emulation de terminale(ex: minicom)
pour pouvoir communiquer avec ma carte arduino(en utilisant un programme C et une connexion serie/usb)

Merci pr votre aide

Bonjour,

Non tu n'est pas obligé. Ton programme peut directement lire/écrire le port série pour communiquer avec l'arduino.

Quelques exemples : http://playground.arduino.cc//Main/InterfacingWithSoftware

Merci de m avoir repondu

Non tu n'est pas obligé.

Au fait j'ai pas le choix. si je demarre pas un emulateur ( le Serial moniteur ou un autre ex minicom) mon programme ne recoit rien de l'arduino. Et si je démarre un émulateur et que je lance le programme en C : une partie des bytes attendus est affiché par mon code C et l'autre partie est affiché par le serial moniteur.

Merci

Voici le bout de code que je veux faire fonctionner. essayez le si vous avez le temps. Comme ca je saurais si c’est un problème matériel de mon coté ou si ca vient du code . Merci

coté PC :

#include <stdio.h>
#include <unistd.h>			//Used for UART
#include <fcntl.h>			//Used for UART
#include <termios.h>		        //Used for UART
#include <sys/time.h>
#include <inttypes.h>
#include <sys/ioctl.h>


int main() {

	
	int fd = -1;
	struct termios options;
	tcgetattr(fd, &options);
	cfsetispeed(&options, B9600); //<Set baud rate
	cfsetospeed(&options, B9600); //<Set baud rate
	options.c_cflag |= (CLOCAL | CREAD); 
    	options.c_cflag &= ~PARENB; 
    	options.c_cflag &= ~CSTOPB; 
    	options.c_cflag &= ~CSIZE; 
    	options.c_cflag |= CS8; 
    	tcsetattr(fd,TCSANOW,&options);
	
	fd = open("/dev/ttyACM0", O_RDWR | O_NOCTTY | O_NDELAY);
	if (fd == -1)
	{
		//ERROR - CAN'T OPEN SERIAL PORT
		printf("Error - Unable to open UART. Ensure it is not in use by another application\n");
	}
	fcntl(fd, F_SETFL,0);

	//partie TX
	int wri = write(fd,"a",1);
	if (wri < 0)
				{
					printf("UART TX error\n");
				}
	return 0;



}

coté Arduino:

#include <Arduino.h>
#include <stdlib.h>
#include <string.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
#define MAX_CMD_LEN 2048

//Reception de commande
char incomingByte;
int index;
char command_line[MAX_CMD_LEN];


void setup() {
  //open serial communication and Set data rate
  Serial.begin(9600);
  //LCD
  lcd.begin(16, 2);
  lcd.setCursor(0, 0);
  Serial.flush();
  
}
void loop() {

  if (Serial.available()) {
    lcd.clear();
    incomingByte = Serial.read();
    //lcd.print(incomingByte);
    switch (incomingByte)
    {
      case '<': 
        
        break;
      case '>':
        
        break;
      default : 
        lcd.print(incomingByte);
    }
  }
}

Bon j'ai trouvé le problem il fallait marqué just un temps de repos a ce niveau

fd = open("/dev/ttyACM0", O_RDWR | O_NOCTTY | O_NDELAY);
    if (fd == -1)
    {
        //ERROR - CAN'T OPEN SERIAL PORT
        printf("Error - Unable to open UART. Ensure it is not in use by another application\n");
    }
    fcntl(fd, F_SETFL,0);
       sleep(3);