Szervó teszt
Szervó teszt
Szükségem lenne egy loopos beállításra, hogy a távirányitó jobbra-balra mozgassa a szervot magától, mondjuk 3mp lassítással, míg én elbotorkálók a repcsivel a távolba. Létezik erre megoldás? Köszi.
Re: Szervó teszt
Egy példa elegáns megoldásra:
Ez a program folyamatosan mozgat egy szervócsatornát a végpontjai között lassan, mindkét irányba 3 másodperc alatt.
Ez a program feltételezi, hogy modern EdgeTX rádiót használsz (például Zorro, Boxer, TX16S stb.), és tisztában vagy az alapvető EdgeTX beállításokkal.
**A Logika Megértése:**
* **Globális Változók:** Globális változókat fogunk használni a szervó pozíciójának nyomon követésére és a mozgás irányának meghatározására.
* **Logikai Kapcsoló:** Egy logikai kapcsolóval egy "órát" vagy "időzítőt" hozunk létre, amely rendszeres időközönként aktiválja a szkriptet.
* **Különleges Funkció (Lua Szkript):** Egy Lua szkript lesz a program magja, amely az időzítő és az irány alapján frissíti a szervó pozícióját.
* **Keverő (Mixer):** Egy keverő fogja a Lua szkriptünk kimenetét a kívánt szervócsatornára alkalmazni.
---
### EdgeTX Programozás Lépésről Lépésre
#### 1. Globális Változók Létrehozása
* Menj a **MODELL BEÁLLÍTÁSOK** menübe (nyomd meg a `[MODEL]` gombot, vagy tartsd lenyomva a `[SYS]` gombot, és válaszd a `MODELL BEÁLLÍTÁSOK` lehetőséget).
* Navigálj a **Globális Változók** fülre (általában `GV1`-től `GV10`-ig).
* Állíts be két globális változót:
* **GV1 (ServoPos):**
* `Név:` `ServoPos`
* `Min:` `-100` (vagy a kívánt minimális PWM érték, jellemzően -100%)
* `Max:` `100` (vagy a kívánt maximális PWM érték, jellemzően 100%)
* `Egységek:` `%`
* `Pontosság:` `0`
* `Kezdeti Érték:` `-100`
* **GV2 (Direction):**
* `Név:` `Direction`
* `Min:` `-1`
* `Max:` `1`
* `Egységek:` ` ` (nincs egység)
* `Pontosság:` `0`
* `Kezdeti Érték:` `1` (1 az növekedéshez, -1 a csökkenéshez)
#### 2. Logikai Kapcsoló Létrehozása (Időzítő)
* Menj a **LOGIKAI KAPCSOLÓK** fülre.
* Keress egy üres logikai kapcsolót (pl. `LS1`).
* Állítsd be a következőképpen:
* **LS1:**
* `Funkció:` `a<x` (vagy `a>x` attól függően, hogyan szeretnéd aktiválni, de egy egyszerű időzítő jobb itt).
* **Jobb megközelítés az időzítéshez:** Használj `RAGADÓS` vagy `IDŐZÍTŐ` típusú logikai kapcsolót, de a folyamatos mozgáshoz a Lua szkript fogja közvetlenül kezelni az időzítést a `getTimer` funkcióval.
* Ehelyett egy logikai kapcsolót egyszerűen "mindig bekapcsolva" hagyunk, vagy periodikusan aktiváljuk a szkriptet, ha azt szeretnénk, hogy a szkript *csak* akkor fusson, ha egy bizonyos feltétel teljesül. Folyamatos mozgáshoz a szkriptet folyamatosan futtatjuk.
* **Alternatíva (egyszerűbb ehhez a célhoz): Valójában nincs szükségünk logikai kapcsolóra magának az időzítőnek, ha a szkript folyamatosan fut.** A szkript maga kezeli az időzítését.
#### 3. A Lua Szkript Létrehozása
* Csatlakoztasd a rádiód a számítógéphez, és férj hozzá az SD kártyájához.
* Navigálj a `SCRIPTS/FUNCTIONS/` mappába.
* Hozz létre egy új szöveges fájlt `servosweep.lua` néven (vagy bármilyen más névvel, amit preferálsz).
* Nyisd meg a fájlt egy szövegszerkesztővel, és illeszd be a következő kódot:
```lua
-- servosweep.lua
-- A globális változókat gvars[1], gvars[2] stb. módon érjük el.
-- GV1 = ServoPos (-100-tól 100-ig)
-- GV2 = Direction (1 a növekedéshez, -1 a csökkenéshez)
local SWEEP_TIME = 3000 -- 3 másodperc milliszekundumban egy irányba
local UPDATE_INTERVAL = 20 -- Frissítés 20 milliszekundenként (állítsd be a simaság vs. CPU használat érdekében)
local lastUpdateTime = 0
-- Ezt a funkciót az EdgeTX folyamatosan hívja, amikor egy speciális funkcióhoz van rendelve
return function()
local currentTime = getTimer() -- Jelenlegi rendszeridő lekérése milliszekundumban
if (currentTime - lastUpdateTime) >= UPDATE_INTERVAL then
lastUpdateTime = currentTime
local currentServoPos = gvars[1]
local currentDirection = gvars[2]
-- Számítsuk ki a lépésméretet frissítési intervallumonként
-- A teljes tartomány 200 (-100-tól 100-ig)
-- Lépés egy irányba (3 másodperc) = 200 / (SWEEP_TIME / UPDATE_INTERVAL)
local stepSize = (200 / SWEEP_TIME) * UPDATE_INTERVAL
if currentDirection == 1 then
-- Növelés
currentServoPos = currentServoPos + stepSize
if currentServoPos >= 100 then
currentServoPos = 100
currentDirection = -1 -- Irányváltás
end
else
-- Csökkentés
currentServoPos = currentServoPos - stepSize
if currentServoPos <= -100 then
currentServoPos = -100
currentDirection = 1 -- Irányváltás
end
end
-- Globális Változók Frissítése
gvars[1] = currentServoPos
gvars[2] = currentDirection
end
-- Visszatérünk az aktuális szervópozícióval, hogy egy keverőben felhasználhassuk
-- Az EdgeTX -1024 és 1024 közötti értéket vár a keverő bemeneteként
-- Tehát a -100 és 100 közötti tartományunkat ennek megfelelően skálázzuk.
return gvars[1] * 10.24
end
```
#### 4. Különleges Funkció Létrehozása
* Menj a **KÜLÖNLEGES FUNKCIÓK** fülre.
* Keress egy üres különleges funkciót (pl. `SF1`).
* Állítsd be a következőképpen:
* **SF1:**
* `Kapcsoló:` `BE` (Ez azt jelenti, hogy a szkript folyamatosan futni fog, amíg a modell aktív. Ezt megváltoztathatod egy fizikai kapcsolóra, ha be/kikapcsolni szeretnéd a mozgást.)
* `Akció:` `Szkript futtatása`
* `Paraméter:` `servosweep` (Válaszd ki az imént létrehozott Lua szkriptet)
#### 5. Keverő (Mixer) Létrehozása
* Menj a **KEVERŐK** fülre.
* Keress egy üres keverősort a kívánt szervócsatornához (pl. `CH1`).
* Állítsd be a következőképpen:
* **CH1 (vagy a kívánt szervócsatorna):**
* `Forrás:` `GV1` (Válaszd ki az 1. globális változót, `ServoPos`)
* `Súly:` `100%`
* `Eltolás (Offset):` `0`
* `Görbe:` `---` (Lineáris)
* `Min:` `-100`
* `Max:` `100`
---
### A Lua Szkript Magyarázata:
* `SWEEP_TIME`: Meghatározza, mennyi időbe telik a szervónak az egyik végponttól a másikig mozogni (pl. -100-tól 100-ig).
* `UPDATE_INTERVAL`: Milyen gyakran frissíti a szkript a szervó pozícióját (milliszekundumban). A kisebb értékek simább mozgást eredményeznek, de több CPU-t használnak.
* `lastUpdateTime`: Az utolsó frissítés időbélyegét tárolja a frissítési sebesség szabályozásához.
* `getTimer()`: Egy EdgeTX Lua függvény, amely a jelenlegi rendszeridőt adja vissza milliszekundumban.
* `gvars[1]` és `gvars[2]`: Így férhetsz hozzá a `ServoPos` és `Direction` globális változókhoz a szkripten belül.
* `stepSize`: Kiszámítja, mennyit kell változnia a `ServoPos`-nak minden `UPDATE_INTERVAL` során ahhoz, hogy a mozgás befejeződjön a `SWEEP_TIME` alatt.
* Az `if currentDirection == 1` blokk a szervó pozíciójának növelését kezeli.
* Az `else` blokk a szervó pozíciójának csökkentését kezeli.
* Az `if currentServoPos >= 100` és `if currentServoPos <= -100` feltételek kezelik az irányváltást, amikor egy végpontot elér a szervó.
* `return gvars[1] * 10.24`: A Lua szkriptnek -1024 és 1024 közötti értéket kell visszaadnia, hogy megfelelően használható legyen keverőforrásként. A -100 és 100 közötti tartományunkat ennek megfelelően skálázzuk.
---
### Tesztelés Előtt:
* **Első a biztonság:** Húzd ki a propellereket, vagy győződj meg róla, hogy a modelled rögzítve van, ha csatlakoztatva van a vevőhöz.
* **Szervó Kalibrálása:** Győződj meg róla, hogy a szervó végpontjai megfelelően kalibrálva vannak a vevőben vagy a repülésvezérlőben, ha szükséges.
* **Lassan Tesztelj:** Kezdd úgy, hogy a szervó csatlakoztatva van, de terhelés nélkül.
---
### A Szkript Feltöltéséhez:
1. Csatlakoztasd az EdgeTX rádiód a számítógéphez USB-n keresztül "USB Storage" (USB Tárhely) módban.
2. Navigálj a `SCRIPTS/FUNCTIONS/` mappába a rádió SD kártyáján.
3. Másold a `servosweep.lua` fájlt ebbe a mappába.
4. Biztonságosan távolítsd el a rádiót a számítógépről.
---
### A Program Futtatásához:
1. Kapcsold be az EdgeTX rádiódat.
2. Válaszd ki a konfigurált modelledet.
3. Ha a speciális funkció `Kapcsoló` értékét `BE` állásba tetted, a szervónak azonnal el kell kezdenie a mozgást. Ha fizikai kapcsolóhoz rendelted, kapcsold be azt a kapcsolót.
Ez a program folyamatosan mozgat egy szervócsatornát a végpontjai között lassan, mindkét irányba 3 másodperc alatt.
Ez a program feltételezi, hogy modern EdgeTX rádiót használsz (például Zorro, Boxer, TX16S stb.), és tisztában vagy az alapvető EdgeTX beállításokkal.
**A Logika Megértése:**
* **Globális Változók:** Globális változókat fogunk használni a szervó pozíciójának nyomon követésére és a mozgás irányának meghatározására.
* **Logikai Kapcsoló:** Egy logikai kapcsolóval egy "órát" vagy "időzítőt" hozunk létre, amely rendszeres időközönként aktiválja a szkriptet.
* **Különleges Funkció (Lua Szkript):** Egy Lua szkript lesz a program magja, amely az időzítő és az irány alapján frissíti a szervó pozícióját.
* **Keverő (Mixer):** Egy keverő fogja a Lua szkriptünk kimenetét a kívánt szervócsatornára alkalmazni.
---
### EdgeTX Programozás Lépésről Lépésre
#### 1. Globális Változók Létrehozása
* Menj a **MODELL BEÁLLÍTÁSOK** menübe (nyomd meg a `[MODEL]` gombot, vagy tartsd lenyomva a `[SYS]` gombot, és válaszd a `MODELL BEÁLLÍTÁSOK` lehetőséget).
* Navigálj a **Globális Változók** fülre (általában `GV1`-től `GV10`-ig).
* Állíts be két globális változót:
* **GV1 (ServoPos):**
* `Név:` `ServoPos`
* `Min:` `-100` (vagy a kívánt minimális PWM érték, jellemzően -100%)
* `Max:` `100` (vagy a kívánt maximális PWM érték, jellemzően 100%)
* `Egységek:` `%`
* `Pontosság:` `0`
* `Kezdeti Érték:` `-100`
* **GV2 (Direction):**
* `Név:` `Direction`
* `Min:` `-1`
* `Max:` `1`
* `Egységek:` ` ` (nincs egység)
* `Pontosság:` `0`
* `Kezdeti Érték:` `1` (1 az növekedéshez, -1 a csökkenéshez)
#### 2. Logikai Kapcsoló Létrehozása (Időzítő)
* Menj a **LOGIKAI KAPCSOLÓK** fülre.
* Keress egy üres logikai kapcsolót (pl. `LS1`).
* Állítsd be a következőképpen:
* **LS1:**
* `Funkció:` `a<x` (vagy `a>x` attól függően, hogyan szeretnéd aktiválni, de egy egyszerű időzítő jobb itt).
* **Jobb megközelítés az időzítéshez:** Használj `RAGADÓS` vagy `IDŐZÍTŐ` típusú logikai kapcsolót, de a folyamatos mozgáshoz a Lua szkript fogja közvetlenül kezelni az időzítést a `getTimer` funkcióval.
* Ehelyett egy logikai kapcsolót egyszerűen "mindig bekapcsolva" hagyunk, vagy periodikusan aktiváljuk a szkriptet, ha azt szeretnénk, hogy a szkript *csak* akkor fusson, ha egy bizonyos feltétel teljesül. Folyamatos mozgáshoz a szkriptet folyamatosan futtatjuk.
* **Alternatíva (egyszerűbb ehhez a célhoz): Valójában nincs szükségünk logikai kapcsolóra magának az időzítőnek, ha a szkript folyamatosan fut.** A szkript maga kezeli az időzítését.
#### 3. A Lua Szkript Létrehozása
* Csatlakoztasd a rádiód a számítógéphez, és férj hozzá az SD kártyájához.
* Navigálj a `SCRIPTS/FUNCTIONS/` mappába.
* Hozz létre egy új szöveges fájlt `servosweep.lua` néven (vagy bármilyen más névvel, amit preferálsz).
* Nyisd meg a fájlt egy szövegszerkesztővel, és illeszd be a következő kódot:
```lua
-- servosweep.lua
-- A globális változókat gvars[1], gvars[2] stb. módon érjük el.
-- GV1 = ServoPos (-100-tól 100-ig)
-- GV2 = Direction (1 a növekedéshez, -1 a csökkenéshez)
local SWEEP_TIME = 3000 -- 3 másodperc milliszekundumban egy irányba
local UPDATE_INTERVAL = 20 -- Frissítés 20 milliszekundenként (állítsd be a simaság vs. CPU használat érdekében)
local lastUpdateTime = 0
-- Ezt a funkciót az EdgeTX folyamatosan hívja, amikor egy speciális funkcióhoz van rendelve
return function()
local currentTime = getTimer() -- Jelenlegi rendszeridő lekérése milliszekundumban
if (currentTime - lastUpdateTime) >= UPDATE_INTERVAL then
lastUpdateTime = currentTime
local currentServoPos = gvars[1]
local currentDirection = gvars[2]
-- Számítsuk ki a lépésméretet frissítési intervallumonként
-- A teljes tartomány 200 (-100-tól 100-ig)
-- Lépés egy irányba (3 másodperc) = 200 / (SWEEP_TIME / UPDATE_INTERVAL)
local stepSize = (200 / SWEEP_TIME) * UPDATE_INTERVAL
if currentDirection == 1 then
-- Növelés
currentServoPos = currentServoPos + stepSize
if currentServoPos >= 100 then
currentServoPos = 100
currentDirection = -1 -- Irányváltás
end
else
-- Csökkentés
currentServoPos = currentServoPos - stepSize
if currentServoPos <= -100 then
currentServoPos = -100
currentDirection = 1 -- Irányváltás
end
end
-- Globális Változók Frissítése
gvars[1] = currentServoPos
gvars[2] = currentDirection
end
-- Visszatérünk az aktuális szervópozícióval, hogy egy keverőben felhasználhassuk
-- Az EdgeTX -1024 és 1024 közötti értéket vár a keverő bemeneteként
-- Tehát a -100 és 100 közötti tartományunkat ennek megfelelően skálázzuk.
return gvars[1] * 10.24
end
```
#### 4. Különleges Funkció Létrehozása
* Menj a **KÜLÖNLEGES FUNKCIÓK** fülre.
* Keress egy üres különleges funkciót (pl. `SF1`).
* Állítsd be a következőképpen:
* **SF1:**
* `Kapcsoló:` `BE` (Ez azt jelenti, hogy a szkript folyamatosan futni fog, amíg a modell aktív. Ezt megváltoztathatod egy fizikai kapcsolóra, ha be/kikapcsolni szeretnéd a mozgást.)
* `Akció:` `Szkript futtatása`
* `Paraméter:` `servosweep` (Válaszd ki az imént létrehozott Lua szkriptet)
#### 5. Keverő (Mixer) Létrehozása
* Menj a **KEVERŐK** fülre.
* Keress egy üres keverősort a kívánt szervócsatornához (pl. `CH1`).
* Állítsd be a következőképpen:
* **CH1 (vagy a kívánt szervócsatorna):**
* `Forrás:` `GV1` (Válaszd ki az 1. globális változót, `ServoPos`)
* `Súly:` `100%`
* `Eltolás (Offset):` `0`
* `Görbe:` `---` (Lineáris)
* `Min:` `-100`
* `Max:` `100`
---
### A Lua Szkript Magyarázata:
* `SWEEP_TIME`: Meghatározza, mennyi időbe telik a szervónak az egyik végponttól a másikig mozogni (pl. -100-tól 100-ig).
* `UPDATE_INTERVAL`: Milyen gyakran frissíti a szkript a szervó pozícióját (milliszekundumban). A kisebb értékek simább mozgást eredményeznek, de több CPU-t használnak.
* `lastUpdateTime`: Az utolsó frissítés időbélyegét tárolja a frissítési sebesség szabályozásához.
* `getTimer()`: Egy EdgeTX Lua függvény, amely a jelenlegi rendszeridőt adja vissza milliszekundumban.
* `gvars[1]` és `gvars[2]`: Így férhetsz hozzá a `ServoPos` és `Direction` globális változókhoz a szkripten belül.
* `stepSize`: Kiszámítja, mennyit kell változnia a `ServoPos`-nak minden `UPDATE_INTERVAL` során ahhoz, hogy a mozgás befejeződjön a `SWEEP_TIME` alatt.
* Az `if currentDirection == 1` blokk a szervó pozíciójának növelését kezeli.
* Az `else` blokk a szervó pozíciójának csökkentését kezeli.
* Az `if currentServoPos >= 100` és `if currentServoPos <= -100` feltételek kezelik az irányváltást, amikor egy végpontot elér a szervó.
* `return gvars[1] * 10.24`: A Lua szkriptnek -1024 és 1024 közötti értéket kell visszaadnia, hogy megfelelően használható legyen keverőforrásként. A -100 és 100 közötti tartományunkat ennek megfelelően skálázzuk.
---
### Tesztelés Előtt:
* **Első a biztonság:** Húzd ki a propellereket, vagy győződj meg róla, hogy a modelled rögzítve van, ha csatlakoztatva van a vevőhöz.
* **Szervó Kalibrálása:** Győződj meg róla, hogy a szervó végpontjai megfelelően kalibrálva vannak a vevőben vagy a repülésvezérlőben, ha szükséges.
* **Lassan Tesztelj:** Kezdd úgy, hogy a szervó csatlakoztatva van, de terhelés nélkül.
---
### A Szkript Feltöltéséhez:
1. Csatlakoztasd az EdgeTX rádiód a számítógéphez USB-n keresztül "USB Storage" (USB Tárhely) módban.
2. Navigálj a `SCRIPTS/FUNCTIONS/` mappába a rádió SD kártyáján.
3. Másold a `servosweep.lua` fájlt ebbe a mappába.
4. Biztonságosan távolítsd el a rádiót a számítógépről.
---
### A Program Futtatásához:
1. Kapcsold be az EdgeTX rádiódat.
2. Válaszd ki a konfigurált modelledet.
3. Ha a speciális funkció `Kapcsoló` értékét `BE` állásba tetted, a szervónak azonnal el kell kezdenie a mozgást. Ha fizikai kapcsolóhoz rendelted, kapcsold be azt a kapcsolót.