Encoder rotatif avec DCS BIOS et Arduino

Fabrication de cockpit et divers ( palonnier , panels ..) c est ICI
Avatar de l’utilisateur

Topic author
coolhands
Jeune Pilote
Jeune Pilote
Messages : 1622
Inscription : 12 mai 2004

Encoder rotatif avec DCS BIOS et Arduino

#1

Message par coolhands »

Salut

J'ai besoin d'un petit coup de main je viens de faire des modif de ma console droite et centrale de mon pit en ajoutant une arduino dans chaque.
Tout fonctionne correctement sauf les encoders rotatifs du Select Comm1 et Select Comm2. quand je tourne cela fonctionne pas régulièrement voir des fois plus du tout c'est complétement aléatoire. Je vous mets mon code ci dessous en espérant que quelqu'un à la solution
J'utilise la dernière version de DCS Bios

/*
Tell DCS-BIOS to use a serial connection and use interrupt-driven
communication. The main program will be interrupted to prioritize
processing incoming data.

This should work on any Arduino that has an ATMega328 controller
(Uno, Pro Mini, many others).
*/
#define DCSBIOS_IRQ_SERIAL

#include "DcsBios.h"

/* MASTER ARM */
DcsBios::LED masterModeAaLt(0x740c, 0x0200, 53);
DcsBios::LED masterModeAgLt(0x740c, 0x0400, 52);
DcsBios::Switch2Pos masterArmSw("MASTER_ARM_SW", 51, true);
DcsBios::Switch2Pos masterModeAa("MASTER_MODE_AA", 48);
DcsBios::Switch2Pos masterModeAg("MASTER_MODE_AG", 49);

/* EMERGENCY JETTISON */
DcsBios::Switch2Pos emerJettBtn("EMER_JETT_BTN", 50);

/* MAP GAIN/SPIN RECOVERY PANEL */
DcsBios::PotentiometerEWMA<5, 128, 5> hmdOffBrt("HMD_OFF_BRT", A7);
DcsBios::Switch3Pos irCoolSw("IR_COOL_SW", 25, 23);
DcsBios::LED spinLt(0x742a, 0x0800, 47);
DcsBios::Switch2Pos spinRecoverySw("SPIN_RECOVERY_SW", 24);

/* STBY INSTRUMENTS */
DcsBios::RotaryEncoder stbyPressAlt("STBY_PRESS_ALT", "-3200", "+3200", 26, 27);
DcsBios::RotaryEncoder saiSet("SAI_SET", "-3200", "+3200", 28, 29);
DcsBios::Switch2Pos saiCage("SAI_CAGE", 30);

/* UFC EFD */
DcsBios::PotentiometerEWMA<5, 128, 5> ufcBrt("UFC_BRT", A4);
DcsBios::RotaryEncoder ufcComm1ChannelSelect("UFC_COMM1_CHANNEL_SELECT", "DEC", "INC", 31, 22);
DcsBios::Switch2Pos ufcComm1Pull("UFC_COMM1_PULL", 32);
DcsBios::PotentiometerEWMA<5, 128, 5> ufcComm1Vol("UFC_COMM1_VOL", A6);
DcsBios::RotaryEncoder ufcComm2ChannelSelect("UFC_COMM2_CHANNEL_SELECT", "DEC", "INC", 36, 34);
DcsBios::Switch2Pos ufcComm2Pull("UFC_COMM2_PULL", 33);
DcsBios::PotentiometerEWMA<5, 128, 5> ufcComm2Vol("UFC_COMM2_VOL", A5);

/* HUD PANEL */
DcsBios::PotentiometerEWMA<5, 128, 5> hudAoaIndexer("HUD_AOA_INDEXER", A2);
DcsBios::PotentiometerEWMA<5, 128, 5> hudSymBrt("HUD_SYM_BRT", A3);

/* IFEI EFD */
DcsBios::Switch2Pos ifeiModeBtn("IFEI_MODE_BTN", 43);
DcsBios::RotaryEncoder ifeiUpBtn("IFEI_UP_BTN", "DEC", "INC", 41, 42);
DcsBios::Switch2Pos ifeiEtBtn("IFEI_ET_BTN", 44);

/* EFD GO NOGO + RESET */
DcsBios::LED lhAdvGo(0x740a, 0x0010, 40);
DcsBios::LED lhAdvNoGo(0x740a, 0x0020, 39);
DcsBios::Switch2Pos hudVideoBit("HUD_VIDEO_BIT", 38);

void setup() {
DcsBios::setup();
}

void loop() {
DcsBios::loop();
}
Avatar de l’utilisateur

steph737
Nouvelle Recrue
Nouvelle Recrue
Messages : 140
Inscription : 20 avril 2021

Re: Encoder rotatif avec DCS BIOS et Arduino

#2

Message par steph737 »

Salut,

Tu n'es pas le seul ! Je suppose que tu utilise également des encodeurs "standards pour arduino" .... j'avoue que je me suis pas penché sur la question parce que les comms finalement on les changent pas toutes les 5 minutes.... et que les réglages CRS et HDG se font avec des inters 3P sur le F18....

Le pb c'est qu'on dirait bien que Dsc-bios n'est plus suivi donc si il y a qq chose à faire de ce côté ça va pas être simple... Sinon écrire une routine pour "ralentir" le flux provenant de l'encodeur vu que ça marche si on tourne doucement a priori. Pas idéal non plus.
Avatar de l’utilisateur

pilour6
Elève Pilote
Elève Pilote
Messages : 768
Inscription : 27 mai 2006

Re: Encoder rotatif avec DCS BIOS et Arduino

#3

Message par pilour6 »

hello,
pourquoi pour certains encodeurs tu met des valeurs:
DcsBios::RotaryEncoder stbyPressAlt("STBY_PRESS_ALT", "-3200", "+3200", 26, 27);
et pour d'autres IND, DEC:
DcsBios::RotaryEncoder ufcComm1ChannelSelect("UFC_COMM1_CHANNEL_SELECT", "DEC", "INC", 31, 22);
Avatar de l’utilisateur

Topic author
coolhands
Jeune Pilote
Jeune Pilote
Messages : 1622
Inscription : 12 mai 2004

Re: Encoder rotatif avec DCS BIOS et Arduino

#4

Message par coolhands »

A vrai dire je ne fais que copier coller le code de DCS Bios, mais je me suis amusé à essayer de changer le code justement et pas de différence.
Est ce qu'il est nécessaire d'utiliser des encoders KY040 pour arduino ou peut on utiliser des EC11 comme c'est le cas pour moi. Je pense pas que cela change quelque chose.
Avatar de l’utilisateur

Topic author
coolhands
Jeune Pilote
Jeune Pilote
Messages : 1622
Inscription : 12 mai 2004

Re: Encoder rotatif avec DCS BIOS et Arduino

#5

Message par coolhands »

Avatar de l’utilisateur

Hombre
Apprenti-Mécano
Apprenti-Mécano
Messages : 311
Inscription : 26 juin 2014

Re: Encoder rotatif avec DCS BIOS et Arduino

#6

Message par Hombre »

Bonjour à tous,

Pour le peut d'expérience que j'ai sur arduino. je peux dire que lorsque l'on travaille avec un encodeur rotatif, il pose problème. En effet on ne peut pas mettre n'importe quel encodeur. Par exemple, sur les radios du M2000 il faut mettre de mémoire un encodeur à 11 ou 16 impulsions par tour. Si l'on met un qui fait moins ou plus de pulses par tour il fera n'importe quoi. De la à savoir par rapport au code si l'on peut définir le type de rotary je sais pas.
Cdt
Avatar de l’utilisateur

Topic author
coolhands
Jeune Pilote
Jeune Pilote
Messages : 1622
Inscription : 12 mai 2004

Re: Encoder rotatif avec DCS BIOS et Arduino

#7

Message par coolhands »

En tout cas depuis que je suis passé sur le code Flightpanels j'ai plus le moindre soucis avec mon pit.
Répondre

Revenir à « Cockpit & mod perso »