Salut,
Voilà j’ai obtenu (grâce à vous ;D) une communication entre un prog C++ et la board. Voici mes codes:
#define ESC 0x1B
void setup() {
Serial.begin(115200);
pinMode(13, OUTPUT);
digitalWrite(13, HIGH);
}
void loop() {
int data;
char escCar;
escCar=0x1B;
if (Serial.available()>0) {
delay(20);
Serial.print("/data ");
data=Serial.read();
if (data=='S') {
digitalWrite(13, LOW);
Serial.print("Data=");
Serial.println(data);
}
if (data=='U') {
digitalWrite(13, HIGH);
}
if (data=='X') {
digitalWrite(13, LOW);
Serial.println(escCar);
}
}
}
Prog sous Visual:
#include <iostream>
using namespace std;
#include "windows.h"
#define QUIT 27
int main(int argc, char *argv[])
{
DWORD error;
cout << "Hello adruino World.... Forza !!!" << endl;
// On déclare un port série et on l'ouvre.
HANDLE serialPort; // Handle du port.
char serialName[20];
strcpy(serialName, "COM4"); // On définit le port série et on l'ouvre.
serialPort=CreateFileA((LPCSTR) serialName, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
// On vérifie la bonne ouverture.
if (serialPort==INVALID_HANDLE_VALUE) {
error=GetLastError();
switch (error) {
case ERROR_ACCESS_DENIED:
cout << "... Acces denied sur" << serialName << ". Port dejà ouvert..." << endl;
exit (-11);
break;
case ERROR_FILE_NOT_FOUND:
cout << "... Le port série " << serialName << " n'existe pas" << endl;
exit (-11);
break;
}
}
// On paramètre le port série.
DCB serialParams={0};
serialParams.DCBlength=sizeof(serialParams);
// On récupère l'état du port.
if (!GetCommState(serialPort, &serialParams)) {
// Error getting...
// On ferme le port série.
CloseHandle(serialPort);
exit(-2);
}
// On modifie les paramètres.
serialParams.BaudRate=CBR_115200; // Vitesse.
serialParams.ByteSize=8; // 8
serialParams.Parity=NOPARITY; // n
serialParams.StopBits=ONESTOPBIT; // 1
// On modifie les paramètres
if (!SetCommState(serialPort, &serialParams)) {
// Error setting...
// On ferme le port série.
CloseHandle(serialPort);
exit(-3);
}
// Mise en place du timeout.
COMMTIMEOUTS timeouts={0};
timeouts.ReadIntervalTimeout=50;
timeouts.ReadTotalTimeoutConstant=50;
timeouts.WriteTotalTimeoutMultiplier=10;
timeouts.WriteTotalTimeoutConstant=50;
timeouts.WriteTotalTimeoutMultiplier=10;
if (!SetCommTimeouts(serialPort, &timeouts)) {
// timeout error...
// On ferme le port série.
CloseHandle(serialPort);
exit(-4);
}
// On envoie le 'S'.
char sendData[40];
char receiveData[40];
char charToSend;
DWORD bytesSent, bytesRead;
sendData[0]='S';
receiveData[0]=0;
while (receiveData[0]!=QUIT) {
cin >> charToSend;
sendData[0]=charToSend;
if (!WriteFile(serialPort, sendData, 1, &bytesSent, NULL)) {
// Error sending data...
// On ferme le port série.
CloseHandle(serialPort);
exit(-5);
}
if (!ReadFile(serialPort, receiveData, 40, &bytesRead, NULL)) {
// Error readding data...
// On ferme le port série.
CloseHandle(serialPort);
exit(-5);
}
if (bytesRead) {
receiveData[bytesRead]=0;
strcpy(receiveData, receiveData+6);
cout << "Car recu <" << receiveData << ">" << endl;
}
}
// On ferme le port série.
CloseHandle(serialPort);
return(0);
}
On tape S, la board éteint sa led et envoie S (83),
On tape U, on rallume la led,
On tape X, la board renvoie le code ESC et le prog C++ quitte…
Voilà, merci encore ;D!
Joe.