Cet article va expliquer comment déclencher des sons depuis la radio sur le module Benedini/Das mikro.
Il existe de nombreux modules sons, plus ou moins chers, de qualité variable, ainsi que de prix. Pour ma part, j’utilise des modules Benedini. On peut aussi les trouver sous la dénomination Das mikro qui est une copie chinoise des module Benedini, et qui ont tué le business de Thomas Benedini. J’utiliserai le terme Benedini dans la suite de cet article pour définir indifféremment l’original ou la copie. Il existe aussi plusieurs modèles, mais qui, du point de vue de la radio, ont un fonctionnement identique.
Il est possible d’utiliser 2 modes de fonctionnements du module son. Le premier est assez simple, on choisi une voie sur la radio, et une impulsion sur ce bouton de la radio sélectionne le son 1, 2 le son 2, … et une impulsion du bouton dans l’autre sens déclenche le son. C’est facile et ne requiert aucune modif de radio, mais on se perd vite… L’autre mode consiste a modifier la radio pour remplacer un bouton par une combinaison d’un potentiomètre rotatif à 12 positions et un interrupteur. On choisi le son au moyen du bouton rotatif, et on l’envoie avec l’interrupteur.
Ce petit article va permettre d’utiliser le second mode de fonctionnement, mais sans rien modifier sur la radio. On va utiliser un des boutons rotatif de la radio pour choisir un son, et un bouton (SH est vraiment bien adapté) pour déclencher le son. De plus, on va ajouter un petit widget pour afficher le son choisi sur la radio.
Du Lua
Première étape, créer un petit widget pour afficher le son choisi. De plus, si on appuie sur le bouton pour envoyer le son, on souhaite modifier la couleur du texte. Le langage de programmation des widgets sous EdgeTX/OpenTX est le Lua. Ici, j’écris le widget pour EdgeTX. C’ est important de le noter car la gestion des couleurs est différente entre les 2 systèmes.
Un widget Lua doit implémenter 4 fonctions:
– create: appelé une fois au démarrage du widget
– update: appelé a chaque fois que l’utilisateur modifie les paramètres du widget
– background: appelé périodiquement lorsque le widget n’est PAS visible
– refresh: appelé périodiquement lorsque le widget est visible
Dans ce cas-ci, on en a besoin de 3, le background nous sera inutile.
Un widget peut aussi définir une variable locale options
qui contient jusqu’à 6 paramètres, leur type, et des paramètres en fonction du type. Par exemple, Value
prend comme paramètres une valeur par défaut, une valeur minimum, et une valeur maximum, alors que COLOR
ne prendra qu’un seul paramètre, la couleur par défaut.
Cela donne donc:
---- #########################################################################
---- # #
---- # Copyright (C) Nicolas Seinlet #
---- # #
---- # License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html #
---- # #
---- # This program is free software; you can redistribute it and/or modify #
---- # it under the terms of the GNU General Public License version 2 as #
---- # published by the Free Software Foundation. #
---- # #
---- # This program is distributed in the hope that it will be useful #
---- # but WITHOUT ANY WARRANTY; without even the implied warranty of #
---- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
---- # GNU General Public License for more details. #
---- # #
---- #########################################################################
local options = {
{ "soundsource", SOURCE, 1 },
{ "soundtrigger", SOURCE, 1 },
}
local function create(zone, options)
local wgt = { zone=zone, options=options}
return wgt
end
local function update(wgt, options)
wgt.options = options
end
local function background(wgt)
return
end
function refresh(wgt)
local val = getValue(wgt.options.soundsource);
-- #100/88/76/64/52/40/28/16/0
local TEXT_COLOR = COLOR_THEME_PRIMARY2
if getValue(wgt.options.soundtrigger) > 0 then
TEXT_COLOR = COLOR_THEME_FOCUS
end
if val < -900 then
lcd.drawText(wgt.zone.x+5, wgt.zone.y+5, "Start", TEXT_COLOR+BOLD)
elseif val < -820 then
lcd.drawText(wgt.zone.x+5, wgt.zone.y+5, "Horn", TEXT_COLOR+BOLD)
elseif val < -700 then
lcd.drawText(wgt.zone.x+5, wgt.zone.y+1, "Open", TEXT_COLOR+BOLD)
lcd.drawText(wgt.zone.x+5, wgt.zone.y+15, "door", TEXT_COLOR+BOLD)
elseif val < -580 then
lcd.drawText(wgt.zone.x+5, wgt.zone.y+1, "Close", TEXT_COLOR+BOLD)
lcd.drawText(wgt.zone.x+5, wgt.zone.y+15, "door", TEXT_COLOR+BOLD)
elseif val < -460 then
lcd.drawText(wgt.zone.x+5, wgt.zone.y+5, "Roof", TEXT_COLOR+BOLD)
elseif val < -340 then
lcd.drawText(wgt.zone.x+5, wgt.zone.y+1, "Start", TEXT_COLOR+BOLD)
lcd.drawText(wgt.zone.x+5, wgt.zone.y+15, "GPS", TEXT_COLOR+BOLD)
elseif val < -220 then
lcd.drawText(wgt.zone.x+5, wgt.zone.y+1, "Align", TEXT_COLOR+BOLD)
lcd.drawText(wgt.zone.x+5, wgt.zone.y+15, "GPS", TEXT_COLOR+BOLD)
elseif val < -100 then
lcd.drawText(wgt.zone.x+5, wgt.zone.y+1, "Stop", TEXT_COLOR+BOLD)
lcd.drawText(wgt.zone.x+5, wgt.zone.y+15, "GPS", TEXT_COLOR+BOLD)
elseif val > 900 then
lcd.drawText(wgt.zone.x+5, wgt.zone.y+5, "V +", TEXT_COLOR+BOLD)
elseif val > 820 then
lcd.drawText(wgt.zone.x+5, wgt.zone.y+5, "V -", TEXT_COLOR+BOLD)
elseif val > 700 then
lcd.drawText(wgt.zone.x+5, wgt.zone.y+5, "Inter", TEXT_COLOR+BOLD)
elseif val > 580 then
lcd.drawText(wgt.zone.x+5, wgt.zone.y+5, "S12", TEXT_COLOR+BOLD)
elseif val > 460 then
lcd.drawText(wgt.zone.x+5, wgt.zone.y+5, "S11", TEXT_COLOR+BOLD)
elseif val > 340 then
lcd.drawText(wgt.zone.x+5, wgt.zone.y+5, "S10", TEXT_COLOR+BOLD)
elseif val > 220 then
lcd.drawText(wgt.zone.x+5, wgt.zone.y+5, "S09", TEXT_COLOR+BOLD)
elseif val > 100 then
lcd.drawText(wgt.zone.x+5, wgt.zone.y+5, "S08", TEXT_COLOR+BOLD)
else
lcd.drawText(wgt.zone.x+5, wgt.zone.y+5, "", BLACK+BOLD)
end
end
return { name="Benedini", options=options, create=create, update=update, refresh=refresh, background=background }
Il se place dans le répertoire WIDGETS
de la radio
De la configuration
Pour envoyer la commande au module son, un script Lua sera utilisé comme source de mixage. Il faut que la radio permette cette option, ce qui se fait simplement en cochant une case dans la configuration de la radio.
Cocher cette option ajoutera une page de configuration dans le modèle, permettant de choisir des scripts Lua comme source de mixage.
Et encore du Lua
Afficher le son choisi, c’est bien, mais il faut aussi envoyer la commande sur la voie ad-hoc. Si le module son est connecte a la voie 6 du récepteur, on choisira notre script comme source, et on ajoutera une condition, que cela ne s’exécute que si le bouton est presse. Ainsi on envoie le son que si on appuie sur SH
par exemple.
Le script en lui-même est relativement simple. On définit des plages de valeurs, et en fonction de la plage dans laquelle on se trouve, on envoie la valeur exacte pour le son choisi.
local P={}
P.input =
{
{ "sound-in", SOURCE,},
}
P.output =
{"to-play",
}
-- periodically called function
P.run=function(sound)
if sound < -900 then
return -1024
elseif sound < -820 then
return -901
elseif sound < -700 then
return -778
elseif sound < -580 then
return -655
elseif sound < -460 then
return -532
elseif sound < -340 then
return -410
elseif sound < -220 then
return -287
elseif sound < -100 then
return -164
elseif sound > 900 then
return 1024
elseif sound > 820 then
return 901
elseif sound > 700 then
return 778
elseif sound > 580 then
return 655
elseif sound > 460 then
return 532
elseif sound > 340 then
return 410
elseif sound > 220 then
return 287
elseif sound > 100 then
return 164
else
return 0
end
end
return P
Il se place dans le répertoire SCRIPTS/MIXES
de la radio
La combinaison de ces 2 scripts permet de commander a distance le module son Benedini.