communication script lua --> Arduino Mega

Tout sur les cartes et la programmation des modules ARDUINO

Re: communication script lua --> Arduino Mega

Messagede fab » Ven 20 Jan 2017 15:13

Je n'ai pas rêver :
http://www.aircockpit.com/viewtopic.php?f=146&t=5711#p69221 il y a :
Code: Tout sélectionner
/////// 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
}
}
/////////


puis ici : http://www.aircockpit.com/viewtopic.php?f=146&t=5711&start=10#p69239 il y a :
Code: Tout sélectionner
/////// function for relay board
void RelayBoard (int RelayNber,int State)
{
if(State == 0)//off
{
digitalWrite(RelayPin[(RelayNber-38)],LogicOFF);// Turns Relay --> Off
}
if(State == 1)//On
{
digitalWrite(RelayPin[(RelayNber-38)],LogicON); // Turns Relays -->On
}
}
/////////



Je suis perdu aussi furieuxfumée

Je crois que je mélange les 2 codes ecroulerire

Si tu pouvais publier les 2 codes que tu essaies dans une même réponses ... avec le bouton "code"pour chacun des extraits ce serait mieux !
Avatar de l’utilisateur
fab
 
Messages: 4414
Inscription: 26/12/12
Localisation: Roubaix

Re: communication script lua --> Arduino Mega

Messagede JacquesZ » Ven 20 Jan 2017 17:00

A320 hérétique a écrit:Salut Jacques,

comment ça marche coté compil avec LUA ? il y a un rapport de compil ? car, en effet, dans d'autres langages ,il faut déclarer la fonction avant de s'en servir, sinon erreur de compil ... en tous les cas, ça m'a l'air d'être un gros morceau, ce LUA ?!

Coté Arduino, je ne te suis pas dans ton hypothèse concernant la virgule entre 2 séquences, elle ne gène pas, elle sera juste ignorée par le test if Marker "= R"

ps : ne perdons pas de vue que le script et le sketch sont réputés fonctionner, c'est pour ça que j'incline vers une erreur de paramétrage plutôt qu'un pb de code ; j'attends la vérif du port COM.

Lua pour autant que je sache n'est pas un langage compilé, mais interprété puis compilé à la volée(just in time). Donc pas de message lié à la compilation, juste le message avec la Ligne où s'est produite l'erreur
Il y a peut être une trace dans les logs de Fsuipc, à voir.

Sur Lua pour Air Manager, une fonction doit être déclarée AVANT son utilisation, de ce fait même (compilation à la volée).
Avec un vrai langage compilé il n'y a pas ce soucis car le compilateur lit l'intégralité du code en deux ou 3 passes généralement avant de produire le code exécutable en assembleur ou en pseudo code (pseudo compilé) pour certains langages Microsoft.

Pour le côté Arduino, je suis d'accord avec toi, d'ailleurs j'ai édité ensuite mon message pour dire que cette piste n'était pas la bonne puisque il y avait bouclage sur un serial.read() tant que la lettre R n'était pas trouvée.
Ce qui me gênait c'est que le signal de fin de Ligne n'est pas \0 comme d'habitude, mais une virgule!
Comme je n'ai pas sous la main mon PC pour tester, depuis l'iPhone c'est pas évident;-)

@Fab, bien vu, je n'ai pas non plus compris pourquoi ce micmac avec les numéros de relais qui passent de 38 à 53 vers 1 à 16, c'est semble t'il pour un numéro de carte.
Je suggère qu'on crée un script de test simplifié avec un seul relais pour voir si ça fonctionne avec un seul relais en ouverture/fermeture

JP tu semble t'être inspiré d'un script trouvé sur un phaurome, tu peux nous envoyer le lien, ça permettrait d'avancer?

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 » Ven 20 Jan 2017 19:46

Bonsoir,

Oui j'ai tout à apprendre y compris sur les balises en haut des message :)

Je travaille parallèlement avec un ami sur les 2 fichiers pour essayer de trouver une solution. Quelques progrès ont été faits mais ça n'est pas concluant. Excusez-moi pour les variations de fichiers.

Voici les fichier .ino et .lua à jour :

Code: Tout sélectionner
//-------- 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}
;//
int Relnber =16; //How many relays on this board ,here 16 relays - not all used
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-43)],LogicOFF);// Turns Relay  --> Off
  }
  if(State == 1)//On
  {
    digitalWrite(RelayPin[(RelayNber-43)],LogicON); // Turns Relays  -->On
  }
}
/////////



et lua :

Code: Tout sélectionner
--------------- LUA Script Program for FSX/Arduino communication ---------------
---------------------------- Switch and relays ---------------------------------
-----------------------------16 Janvier 2017 -----------------------------------                               
------------------ File Name : ADHEjp2.lua ----------------------------
------------------ Information :CARTE ADHEMAR - COM 19-----------
 
 
speed = 9600    --Communication setting at 9600 baud
handshake = 0
serial_wait = 100

dev1 = com.open("COM19", speed, handshake)--RelayBoard N°1   <-----Change COM nber if needed

--dev1 = com.open("CNCA1", speed, handshake)--RelayBoard N°1   <-----Change COM nber if needed
--dev2 = com.open("CNCA0", speed, handshake)--SwitchBoard    <-----Change COM nber if needed

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

 ipc.display("Connected to COM xx ")--Display message
 ipc.setdisplay(5,50,280,400) --Size of display window (initx,inity,width,length)



while 1 do

----Readings from P3D

Batteryvoltage     =ipc.readDBL(0x2834)-- 64 bit
MasterBattSwitch   =ipc.readSD (0x281C)-- 32 bit
GeneratorSwitch    =ipc.readSD (0x3B78)-- 32 bit
EngineOilpressure  =ipc.readUW (0x08BA)-- 16 bit
BpCarPressure   =ipc.readSD (0x08F8)-- 32 bit
AutoC   =ipc.readSD (0x07BC)-- 32 bit
Hyd1   =ipc.readSD (0x08D8)-- 32 bit
KiasRaw   =ipc.readSD (0x02BC)-- 32 bit
AirBrakes   =ipc.readSD (0x0BD4)-- 32 bit
RpmRaw   =ipc.readUW (0x0898)-- 16 bit
GenAlternBusVolt   =ipc.readDBL(0x2880)-- 64 bit
GroundFlight       =ipc.readUW(0x0366)-- 16 bit

GearCtl            =ipc.readSD(0x0BE8)-- 32 bit
LhGear             =ipc.readSD(0x0BF4)-- 32 bit
RhGear             =ipc.readSD(0x0BF0)-- 32 bit
NoseGear           =ipc.readSD(0x0BEC)-- 32 bit

RhExtRaw   =ipc.readSD (0x1254)-- 32 bit
CenTankARaw   =ipc.readSD (0x0B74)-- 32 bit
CenTankBRaw   =ipc.readSD (0x1244)-- 32 bit
CenTankCRaw   =ipc.readSD (0x124C)-- 32 bit
LhExtRaw   =ipc.readSD (0x125C)-- 32 bit
LhTankRaw   =ipc.readSD (0x0B7C)-- 32 bit
RhTankRaw   =ipc.readSD (0x0B94)-- 32 bit
TasRaw       =ipc.readUW (0x11D0)-- 16 bit
ThrotPos   =ipc.readUW (0x088C)-- 16 bit -- Throtlle position
TrueAirSpeedRaw    =ipc.readSD (0x02B8)-- 32 bit -- TAS
TotalAirTemp       =ipc.readSW (0x11D0)-- 16 bit -- TAT
OutsideAirTempRaw  =ipc.readSW (0x0E8C)-- 16 bit -- OAT
FuelTotQtyLbs      =ipc.readSD (0x126C)-- 32 bit
MachFsxRaw         =ipc.readUW (0x11C6)-- 16 bit -- Mach number FSX
EngineFailureFire  =ipc.readSD (0x3AE0)-- 32 bit -- When Engine Falure - FIRE light comes ON


--Convert-

Rpmpercent = math.floor(((RpmRaw * 100) / 16384)+ .5)
Kias = math.floor(( KiasRaw /128)+ .5)
Tas = math.floor ((TasRaw /128) + .5)
Hyd1 = Hyd1/4 --appears to be 4*psi said Peter Dowson !! so divided by 4 to get real psi
RhExt       =  math.floor((RhExtRaw*100       /( 128 * 65536))+.5) --Get % ->0% = empty
CenTankA    =  math.floor((CenTankARaw*100    /( 128 * 65536))+.5) --Get % ->0% = empty
 
CenTankB =  math.floor((CenTankBRaw*100    /( 128 * 65536))+.5)
 
CenTankC    =  math.floor((CenTankCRaw*100    /( 128 * 65536))+.5)
 
LhExt       =  math.floor((LhExtRaw*100       /( 128 * 65536))+.5)
 
LhTank      =  math.floor((LhTankRaw*100      /( 128 * 65536))+.5)
 
RhTank      =  math.floor((RhTankRaw*100
 /( 128 * 65536))+.5)
TatCelsius  =  math.floor((TotalAirTemp -32) * (5/9) / 142.8)
TatFsx      =  math.floor( (TatCelsius * 256)+0.5)
TrueAirSpeed = math.floor ((TrueAirSpeedRaw / 128) +.5)
OutsideAirTemp = math.floor ((OutsideAirTempRaw / 256) +.5)
SpeedOfSound =((math.sqrt (OutsideAirTemp + 273))* 39)
FuelTotQtyLiter =  math.floor((FuelTotQtyLbs /1.77 )+.5)
MachFsxAjusted = ((math.floor ((MachFsxRaw / 20480)*100)+ .5)/100)


--------------- Relayssection---------------

---- Relay 43---ADHEMAR - LO SPEED #6

   if GearCtl == 16383 and Kias <= 195 then LoAdhemLight = 1 end
   if GearCtl == 16383 and Kias > 195 then LoAdhemLight = 0 end
 
   if GearCtl == 0 and Kias <= 184 then LoAdhemLight = 1 end
   if GearCtl == 0 and Kias > 184 then LoAdhemLight = 0 end   

Dev=dev1 Board="R" RelValue=LoAdhemLight
com.write(Dev,Board)
com.write(Dev,43)
com.write(Dev,",")
com.write(Dev,RelValue)
com.write(Dev,",")


---- Relay 44---ADHEMAR - MID SPEED #7

   if GroundFlight == 1 then MidAdhemLight = 0 end
   
   if GearCtl == 16383 and Kias >= 168 and Kias <= 250 then MidAdhemLight = 1 end
   if GearCtl == 16383 and Kias > 250 then MidAdhemLight = 0 end
   if GearCtl == 16383 and Kias < 168 then MidAdhemLight = 0 end
   
   if GearCtl == 0 and Kias >= 158 and Kias <= 230 then MidAdhemLight = 1 end
   if GearCtl == 0 and Kias > 230 then MidAdhemLight = 0 end
   if GearCtl == 0 and Kias < 158 then MidAdhemLight = 0 end

Dev=dev1 Board="R" RelValue=MidAdhemLight
com.write(Dev,Board)
com.write(Dev,44)
com.write(Dev,",")
com.write(Dev,RelValue)
com.write(Dev,",")

---- Relay 45---ADHEMAR - HI SPEED #8

   if GroundFlight == 1 then HiAdhemLight = 0 end
   
   if GearCtl == 16383 and Kias >= 222 and Kias <= 275 then HiAdhemLight = 1 end
   if GearCtl == 16383 and Kias > 275 then HiAdhemLight = 0 end
   if GearCtl == 16383 and Kias < 222 then HiAdhemLight = 0 end
   
   if GearCtl == 0 and Kias >= 205 and Kias <= 245 then HiAdhemLight = 1 end
   if GearCtl == 0 and Kias > 245 then HiAdhemLight = 0 end
   if GearCtl == 0 and Kias < 205 then HiAdhemLight = 0 end

Dev=dev1 Board="R" RelValue=HiAdhemLight
com.write(Dev,Board)
com.write(Dev,45)
com.write(Dev,",")
com.write(Dev,RelValue)
com.write(Dev,",")

---- Relay 46---LOI SOL/VOL

      if GroundFlight == 0 and GearCtl == 16383 then Solenoid = 1 else Solenoid = 0 end
Dev=dev1 Board="R" RelValue=Solenoid
com.write(Dev,Board)
com.write(Dev,46)
com.write(Dev,",")
com.write(Dev,RelValue)
com.write(Dev,",")


end


Voici la vidéo du lancement du fichier ADHEjp2.lua sous P3D. La vidéo est parlante.



(L'intégration ne fonctionne pas mais copie coller fonctionne)

@JacquesZ : J'ai un ami simmer (Pseudo Yveca qui postait ici) qui me donne un sérieux coup de main pour les scripts. Il consulte encore ce forum et pourra apporter plus de précisions que moi! Certains changements sur le lua sont dûs à Yveca (Jacques) car il teste les fichiers de son côté.
Dernière édition par mirageiii2009 le Sam 21 Jan 2017 14:22, é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 fab » Ven 20 Jan 2017 20:13

Impec !

Il y a un truc qui me perturbe :
Code: Tout sélectionner
RelayPin[(RelayNber-43)]


RelayPin[] est un tableau de 16 éléments qui contiennent les numéros de pin (de 53 à 38)
RelayPin[0]=53
RelayPin[1]=52
RelayPin[2]=51
---
RelayPin[15]=38


Donc RelayNber-43 doit fournir un résultat de 0 à 15
Avatar de l’utilisateur
fab
 
Messages: 4414
Inscription: 26/12/12
Localisation: Roubaix

Re: communication script lua --> Arduino Mega

Messagede A320 hérétique » Ven 20 Jan 2017 20:14

@Jacques : merçi ! si donc interprété, y a-t-il un mode ligne de commande, ça permettrait de se faire très vite une idée ?

@Mirage :
Bon point, la com est bien établie.
Pour reprendre la suggestion de Jacques, essaies ce script, il devrait faire clignoter le relai 43 ttes les secondes ; si OK, le pb se situerait au niveau de la com avec P3D, on verra après.

Michel
ps : je ne connais pas LUA, donc peut-être une erreur très grossière, mais je ne pense pas ... c'est de la recopie


Code: Tout sélectionner
--------------- LUA Script Program for FSX/Arduino communication ---------------
---------------------------- Switch and relays ---------------------------------


-- Test clignotement relay 43 --
 
 
speed = 9600    --Communication setting at 9600 baud
handshake = 0
serial_wait = 100

dev1 = com.open("COM19", speed, handshake)--RelayBoard N°1   <-----Change COM nber if needed

--dev1 = com.open("CNCA1", speed, handshake)--RelayBoard N°1   <-----Change COM nber if needed
--dev2 = com.open("CNCA0", speed, handshake)--SwitchBoard    <-----Change COM nber if needed

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

 ipc.display("Connected to COM xx ")--Display message
 ipc.setdisplay(5,50,280,400) --Size of display window (initx,inity,width,length)



while 1 do




--------------- Relayssection---------------

---- Relay 43---ADHEMAR -
 

Dev=dev1 Board="R" RelValue=0
com.write(Dev,Board)
com.write(Dev,43)
com.write(Dev,",")
com.write(Dev,RelValue)
com.write(Dev,",")

wait(1)

Dev=dev1 Board="R" RelValue=1
com.write(Dev,Board)
com.write(Dev,43)
com.write(Dev,",")
com.write(Dev,RelValue)
com.write(Dev,",")

wait(1)

end
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 » Ven 20 Jan 2017 20:44

Lua n'est pas un langage interprété en principe.
Je pense que la version de Lua installée sur FSUIPC est un compilateur "Just in Time", probablement crée à la base en C. Il ne compile pas à l'avance mais en temps réel au moment de l'exécution.

C'est un pseudo-interpréteur, au lancement il lit chaque ligne de code à l'avancement et la compile dans la foulée pour accélérer l'exécution. Pour une boucle par exemple, le code sera quelques msec plus lent à la première passe le temps de l'analyse et de sa transformation, mais comme le code compilé est ensuite stocké en mémoire, c'est lui qui sera exécuté.
Il n'y a pas de possibilité de modifier en temps réel des variables via une ligne de commande sauf s'il ya une console de débogage.
Ce genre de langage est très rapide, bien plus qu'un interpréteur simple qui retraduit à chaque itération l'ensemble du code.

Je ne suis pas pour autant spécialiste du sujet, et ne pourrait pas t'en dire beaucoup plus, si ce n'est que pour la version FSUIPC il n'y a pas de possibilité de ligne de commande pour envoyer des commandes, pour autant que je sache.

On peut demander à FSUIPC d'afficher la console de debug via l'onglet Logging de FSUIPC en cochant "Send to Console Window"

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 JacquesZ » Sam 21 Jan 2017 10:48

@JP:
Pour le lien YouTube, la balise [Youtube] n'existe pas dans cette version de PhpBB (le logiciel de gestion/affichage du forum).

Par contre les balises [url][\url] accessibles via le bouton "URL" au dessus permettent de transformer une adresse quelconque (y compris YouTube) en lien cliquable. Tu sélectionnes le lien au complet et tu cliques sur URL, le lien sera encadré par les balises [url] et [\\url] et ça donne ça:

https://youtu.be/SqZhFECr8pk


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 » Sam 21 Jan 2017 11:37

Merci Jacques pour ces précisions, il faudra que j'approfondisse ça quand j'aurai un moment ; pas eu besoin jusqu'à présent, pour mon simu, A320 Fmgs et Sioc ont suffi ...
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 fab » Sam 21 Jan 2017 12:40

@JP et jacques ...

La balise Youtube fonctionne il faut enlever le "S" de "https"
"https://youtu.be/SqZhFECr8pk"
devient
"http://youtu.be/SqZhFECr8pk"

ce qui donne



Fabien
Avatar de l’utilisateur
fab
 
Messages: 4414
Inscription: 26/12/12
Localisation: Roubaix

Re: communication script lua --> Arduino Mega

Messagede mirageiii2009 » Sam 21 Jan 2017 14:23

fab a écrit:@JP et jacques ...

La balise Youtube fonctionne il faut enlever le "S" de "https"
"https://youtu.be/SqZhFECr8pk"
devient
"http://youtu.be/SqZhFECr8pk"

ce qui donne



Fabien

Merci Jacques et Fab! C'est corrigé sur mon message et appris pour le futur!
Avatar de l’utilisateur
mirageiii2009
 
Messages: 181
Inscription: 26/04/09
Localisation: le + souvent dans mon ERJ-145...

PrécédenteSuivante

Retourner vers Interface & logiciel ARDUINO





Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité