communication script lua --> Arduino Mega

Tout sur les cartes et la programmation des modules ARDUINO

communication script lua --> Arduino Mega

Messagede mirageiii2009 » Mer 18 Jan 2017 16:11

Bonjour,

Je tente de commander une carte relais branchée sur une carte Arduino MEGA à partir d'un script lua situé dans le répertoire /modules de P3D et déclaré dans FSUIPC (Registered).

Quand je lance le lua, les relais cyclent bien mais restent alimentés en permanence et la carte Mega ne semble plus concernée par les instructions du fichier lua.

J'ai l'intuition qu'il s'agit d'un problème de communication entre le lua et la carte...
Voici le début du script qui est supposé connecter la carte Mega :

speed = 9600 --Communication setting at 9600 baud
handshake = 0
serial_wait = 100

dev1 = com.open("COM19", speed, handshake)


if (dev1) == 0 then
ipc.display("Error in opening device(s) port(s)")
ipc.sleep(5000)
ipc.exit()
end

Toute suggestion ou aide est la bienvenue!

Merci!
JP
Dernière édition par mirageiii2009 le Jeu 19 Jan 2017 10:30, édité 1 fois.
Avatar de l’utilisateur
mirageiii2009
 
Messages: 181
Inscription: 26/04/09
Localisation: le + souvent dans mon ERJ-145...

Re: communication script lua --> Arduino Mega

Messagede A320 hérétique » Mer 18 Jan 2017 18:29

Bonjour,

il faudrait à minima que tu montres le skecth arduino qui va avec ...

Michel
http://www.myA320sim.com
Simu mixte P3D/FS2020, serveur P3Dv4/A320 FMGS (7700k et GTX 1070 sous W10 64), client P3Dv4/FS2020 (i9-12900K et RTX 3080 Ti sous W10 64), 3 vdp Optoma GT1080E, client A320 FMGS (2600k sous W10 64).
Avatar de l’utilisateur
A320 hérétique
 
Messages: 3353
Inscription: 2/09/12
Localisation: Pornic

Re: communication script lua --> Arduino Mega

Messagede mirageiii2009 » Jeu 19 Jan 2017 06:37

Bonjour Michel,

Voici le sketch Arduino téléversé sur une Mega en Com 19 :



//-------- Controlling x relays receiving data from a LUA script thru serial ----------//
//--------- JP jan 2016 ------------------------------------------------------------//


int RelayNber,State;
int Dx ;// delay if needed
int RelayPin []= {53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38}
;//pos 0 =>11 pos 1=>10 This means --> Relay1 on Pin 11 ,Relay2 on Pin 10
int Relnber =16; //How many relays on this board ,here 11 relays
int LogicON = LOW;
int LogicOFF = HIGH;
int RelayState ;
char n,Marker;

////Note : Format of data if console to be used --> R1,1 (relay1 On) R1,0 (relay1 Off) R2,1 (relay2 On) R2,0 (relay2 Off)///

void setup()
{
Serial.begin( 9600);//COM speed(baud rate)
for(n=0;n<Relnber;n++ )
{
pinMode(RelayPin [n], OUTPUT);
}
}

void loop()
{//loop
Dx=0;//delay is set to zero millisec
if(Serial.available()>0)
{//sa
Marker = Serial.read();//read Marker for category
if( Marker == 'R' )
{
RelayNber = Serial.parseInt();//get relay nber
State = Serial.parseInt(); // get numeric character BEFORE the comma
RelayBoard (RelayNber,State);// call function
}
}//sa

} //loop

/////// function for relay board
void RelayBoard (int RelayNber,int State)
{
if(State == 0)//off
{
digitalWrite(RelayPin[(RelayNber-39)],LogicOFF);// Turns Relay --> Off
}
if(State == 1)//On
{
digitalWrite(RelayPin[(RelayNber-39)],LogicON); // Turns Relays -->On
}
}
/////////
Avatar de l’utilisateur
mirageiii2009
 
Messages: 181
Inscription: 26/04/09
Localisation: le + souvent dans mon ERJ-145...

Re: communication script lua --> Arduino Mega

Messagede fab » Jeu 19 Jan 2017 08:16

Première chose : dans le LUA, le numéro de port est le bon ? (COM18)

Tu écris : Voici le sketch Arduino téléversé sur une Mega en Com 19 gratgrat

Remplace COM18 par COM19 cligneoeil
Dernière édition par fab le Jeu 19 Jan 2017 08:20, édité 1 fois.
Avatar de l’utilisateur
fab
 
Messages: 4414
Inscription: 26/12/12
Localisation: Roubaix

Re: communication script lua --> Arduino Mega

Messagede JacquesZ » Jeu 19 Jan 2017 08:18

D'après le script Arduino, les relais sont activés quand la carte reçoit la chaîne ´RXY' avec X le numéro du relais, et Y l'état on/off (0/1)

Le script Arduino semble correct, même s'il a l'air de tourner très (trop) vite, et peut peut-être rater des infos.
Essaies aussi d'augmenter le délai dans la boucle loop(), car il y à la référence à une variable Dx=0 qui n'est pas utilisée dans le code de la fonction loop(), il ne manquerait pas une boucle for par hasard?

Il faut voir si le script Lua envoie bien RX1, puis RX0 pour ouvrir les relais

Jacques
Ma chaîne YouTube Tutos sur l’A320 par un Pilote de Ligne: https://youtube.com/channel/UCljftuoKBcgeR-WBgYJpuoA
Avatar de l’utilisateur
JacquesZ
 
Messages: 2848
Inscription: 24/11/10

Re: communication script lua --> Arduino Mega

Messagede mirageiii2009 » Jeu 19 Jan 2017 10:30

fab a écrit:Première chose : dans le LUA, le numéro de port est le bon ? (COM18)

Tu écris : Voici le sketch Arduino téléversé sur une Mega en Com 19 gratgrat

Remplace COM18 par COM19 cligneoeil

Bonjour Fab,

C'est une erreur de copie sur le forum. C'est bien sur le COM 19. rigolus
Avatar de l’utilisateur
mirageiii2009
 
Messages: 181
Inscription: 26/04/09
Localisation: le + souvent dans mon ERJ-145...

Re: communication script lua --> Arduino Mega

Messagede mirageiii2009 » Jeu 19 Jan 2017 10:31

JacquesZ a écrit:D'après le script Arduino, les relais sont activés quand la carte reçoit la chaîne ´RXY' avec X le numéro du relais, et Y l'état on/off (0/1)

Le script Arduino semble correct, même s'il a l'air de tourner très (trop) vite, et peut peut-être rater des infos.
Essaies aussi d'augmenter le délai dans la boucle loop(), car il y à la référence à une variable Dx=0 qui n'est pas utilisée dans le code de la fonction loop(), il ne manquerait pas une boucle for par hasard?

Il faut voir si le script Lua envoie bien RX1, puis RX0 pour ouvrir les relais

Jacques

Bonjour Jacques,

Merci pour ta réponse. Je fais des tests et je reviens! C'est un peu le flou artistique pour moi..
Avatar de l’utilisateur
mirageiii2009
 
Messages: 181
Inscription: 26/04/09
Localisation: le + souvent dans mon ERJ-145...

Re: communication script lua --> Arduino Mega

Messagede A320 hérétique » Jeu 19 Jan 2017 10:43

Bonjour,

En effet, d'accord avec Jacques
La comm est bien établie, puisque quand tu lances le script lua les relais collent ; ça veut également dire qu'arduino recoit bien une séquence à base de Rx,1 (x = n° relais).
Il faudrait vérifier que tu envoies bien les ordres d'ouverture Rx,0

Par ailleurs, com à 9600 bds ça n'est pas rapide, rajoutes avant le premier serial.parseint une ligne delay(Dx); et remplaces Dx=0 par Dx=1. , de façon à laisser le temps aux char d'arriver

Michel
http://www.myA320sim.com
Simu mixte P3D/FS2020, serveur P3Dv4/A320 FMGS (7700k et GTX 1070 sous W10 64), client P3Dv4/FS2020 (i9-12900K et RTX 3080 Ti sous W10 64), 3 vdp Optoma GT1080E, client A320 FMGS (2600k sous W10 64).
Avatar de l’utilisateur
A320 hérétique
 
Messages: 3353
Inscription: 2/09/12
Localisation: Pornic

Re: communication script lua --> Arduino Mega

Messagede JacquesZ » Jeu 19 Jan 2017 17:33

Tu peux copier également le script lua pour fsuipc s'il te plaît?

Ce serait pour connaître la véritable séquence de caractères envoyée, car le script arduino attend et décode "en l'état" une chaîne du type: "RX0" ou "RX1" soit 3 caractères.
Or il me semble que ce qui lui est envoyé par FSUIPC est plutôt du genre "RX,0" , c'est à dire avec une virgule entre les deux, donc un caractère de plus.
Si c'est le cas, l'arduino décode mal le message, il prend la virgule pour l'état du relais.
Le deuxième parse.int() du code Arduino, au lieu de lire l'état du relais lit le caractère virgule(,), et donc la variable State n'est jamais égale à 0 mais à Char(","), soit une valeur correspondant au code ASCII du caractère ",", et donc le relais ne s'ouvre jamais puisque le test State==0 n'est jamais vrai...

Je rajouterai dans le code Arduino une Ligne du genre
car=serial.read()
entre les deux lignes existantes
RelayNber=parse.int()
et
State=parse.int()
pour "sauter" le caractère "," et forcer l'avance dans le buffer des caractères, chaque appel à parse.int() ou serial.read() lisant un caractère du buffer série après l'autre.

Jacques
Ma chaîne YouTube Tutos sur l’A320 par un Pilote de Ligne: https://youtube.com/channel/UCljftuoKBcgeR-WBgYJpuoA
Avatar de l’utilisateur
JacquesZ
 
Messages: 2848
Inscription: 24/11/10

Re: communication script lua --> Arduino Mega

Messagede A320 hérétique » Jeu 19 Jan 2017 18:22

Jacques,

je ne pense pas que le pb soit là, car le parseint "saute" les char non numériques (c'est son intérêt par rapport au simple read), dont la virgule ;
Il faudrait voir ce qui arrive sur la carte, pas simple car j'imagine que la liaison usb est déjà prise ! une façon pas trop compliquée serait de rajouter un afficheur lcd 2x16, je fais souvent ça (c'est même à demeure sur ma plateforme de test) ; ou alors, utiliser la led pin 13 pour afficher un éventuel timeout.

Michel
http://www.myA320sim.com
Simu mixte P3D/FS2020, serveur P3Dv4/A320 FMGS (7700k et GTX 1070 sous W10 64), client P3Dv4/FS2020 (i9-12900K et RTX 3080 Ti sous W10 64), 3 vdp Optoma GT1080E, client A320 FMGS (2600k sous W10 64).
Avatar de l’utilisateur
A320 hérétique
 
Messages: 3353
Inscription: 2/09/12
Localisation: Pornic

Suivante

Retourner vers Interface & logiciel ARDUINO





Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités

cron