PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → communication avec arduino
communication avec arduino
Débuté par fred, 01 juil. 2015 08:39 - 1 réponse
Membre enregistré
4 messages
Posté le 01 juillet 2015 - 08:39
Bonjour,
J'aimerais créer une IHM Windev pour piloter ma carte UNO Arduino.
Pour tester j'ai créé une petite appli sur Arduino qui éclaire une LED suite à l'appui sur une touche (a, b ...). Cela fonctionne bien avec le moniteur serie de l'arduino.
D'un autre côté j'ai créé une feuille avec un bouton sous windev, et j'aimerai éclairer une LED en faisant un clic dessus
Mais malheureusement la LED ne s'éclaire pas.
Voici mon code arduino

void setup() {
// initialize serial communication:
Serial.begin(9600);
for (int thisPin = 5; thisPin < 8; thisPin++) {
pinMode(thisPin, OUTPUT);
}
}

void loop() {
if (Serial.available() > 0) {
int inByte = Serial.read();
Serial.println(inByte);
switch (inByte) {
case 'a':
digitalWrite(5, HIGH);
break;
case 'b':
digitalWrite(6, HIGH);
break;
case 'c':
digitalWrite(7, HIGH);
break;
default:
for (int thisPin = 5; thisPin < 8; thisPin++) {
digitalWrite(thisPin, LOW);

}
}
}
}


et voici mon code windev :

clic sur BTN_sansNom
bResultat = sOuvre(4,4096,4096)
cMessage est un entier

cMessage=97 //code ascii de a
SI bResultat = Vrai ALORS
sFixeParamètre(4,9600,1,8,0)
sEcrit(4, cMessage)
Trace(cMessage)
SINON
Erreur("Erreur d'ouverture de COM...")
FIN

Est-ce que quelqu'un pourrait m'aider car je ne sais pas comment faire
par avance merci, cdt
Posté le 26 février 2016 - 14:21
Bonjour,

Je ne suis pas un spécialiste de l'Arduino, mais il me semble que ce code comporte quelques erreurs de logique :
Selon moi :

Windev :
- L'ouverture Windev ne devrait intervenir qu'une et une seule fois avant la première communication en provoquant un abandon en cas d'erreur d'initialisation. Si pas d'erreur, le mode communcation Appli <-> Arduino est actif et chaque appui du bouton déclenchera l'émission d'un A (Seul le premier 'a' provoquera l'allumage puisque le code ne prévoit pas l'envoi d'autre chose). Donc je verrai bien ça :

Clic BTN-Ouverture
-----------------
bResultat = sOuvre(4,4096,4096)
SI bResultat = Faux ALORS
ComOuverte = Faux
// Message d'Erreur d'ouverture !
SINON
sFixeParamètre(4,9600,1,8,0)
ComOuverte = Vrai
// Message ouverture OK
FIN

Clic BTN_SansNom
----------------
cMessage est un Caractère

Si ComOuverte = Faux ALORS
// Message d'Erreur COM non ouverte !
Renvoyer Faux
FIN

cMessage='a'
sEcrit(4, cMessage)
Trace(cMessage)



Arduino
- Dans le setup, il manque la mise à LOW de toutes les LED pour parer à un état de départ inconnu. Vérifier que les modalités implicite du bégin (nbre de bit, parité, stop bit, ..) sont bien cohérentes avec l'ouverture du port série par Windev.
- Sauf incompréhension de ma part, l'utilité de la fonction serial.println côté Arduino ne sert pas à grand chose car rien n'est récupéré par l'appli Windev.

void setup() {
// initialize serial communication:
Serial.begin(9600);
for (int thisPin = 5; thisPin < 8; thisPin++) { pinMode(thisPin, OUTPUT); }
AllLedOff();
}

void loop() {
if (Serial.available() > 0)
{
int inByte = Serial.read();
switch (inByte)
{
case 'a':
digitalWrite(5, HIGH);
break;
case 'b':
digitalWrite(6, HIGH);
break;
case 'c':
digitalWrite(7, HIGH);
break;
default:
AllLedOff(); }
}

/* Comprend pas la ligne qui suit car rien n'est lu côté Windev !? D'autre part, s'il s'agit d'un manque
dans Windev et sans certitude que les buffers I et O d'un Arduino soient bien séparés en mode Full Duplex,
mieux vaut mettre la ligne ici, après traitement pour éviter le risque d'écrasement du caractère lu.

Serial.println(inByte);
}
}

void AllLedOff() {
for (int thisPin = 5; thisPin < 8; thisPin++) { digitalWrite(thisPin, LOW); }
}