lua - Oscilación entre dos valores con control de frecuencia

CorePress2024-01-24  7

Me gustaría hacer una oscilación simple entre dos números (0, 1) y controlar la frecuencia (sincronización). Estoy atascado, pero creo que las funciones math.sin y os.clock pueden ayudar.

Hola. Parece que desea controlar el porcentaje de energía en un circuito con conmutación binaria. Creo que lo que estás buscando es PWM: en.wikipedia.org/wiki/Pulse-width_modulation. Espero que te ayude.

- Klemikaze

27 de marzo de 2021 a las 9:49

Gracias amigo, pero necesitaría ayuda para escribir un guión, la referencia teórica no me ayudará mucho.

-xrotores

27 de marzo de 2021 a las 9:56

Bueno, ahora sabes qué buscar. google.com/… P.d.: No conozco a Lua O :-)

- Klemikaze

27 de marzo de 2021 a las 9:57

gist.github.com/ChrisHinde/0b0e6eaf2efa42faa4d6757d973caf13 No sé para qué lo quieres, pero aquí alguien usa PWM para cambiar el brillo de los LED RGB con PWM y Lua...

- Klemikaze

27/03/2021 a las 10:01

y aquí está la documentación: nodemcu.readthedocs.io/en/release/modules/pwm

- Klemikaze

27/03/2021 a las 10:02



------------------------------------

pero creo que las funciones math.sin y os.clock pueden ayudar.

Quiero cambiar entre los valores 0 y 1 y viceversa en una cierta cantidad de tiempo. Ejemplo 0 (4 milisegundos) 1 (4 milisegundos) 0 (repetir hasta se cumple la condición)

Si desea alternar entre 0 y 1, math.sin no le ayudará. math.sin(x) calcula el seno de x. Una señal basada en el tiempo que cambia inmediatamente entre 1 y 0 generalmente se denomina onda cuadrada. Usar math.sin no tendría ningún sentido aquí ya que los valores pasarían entre 0 y 1 en forma sinosodual.

Para alternar un valor entre 0 y 1 puedes hacer varias cosas:

local value = 0

-- usually in a loop:

if value == 0 then
  value = 1
else
  value = 0
end

-- or

value = value == 0 and 1 or 0

-- or
value = (value + 1) % 2

Active esta alternancia por tiempo o agregue retrasos (normalmente bloquea su programa) entre cada alternancia.

No se puede lograr un tiempo de 4msved en vainilla Lua.

normalmente estás en un sistema operativo que no es en tiempo real os.clock proporciona poca precisión

No se me ocurre ninguna aplicación en la que tendría sentido tener un valor alterno a 125 Hz. Cosas como esta generalmente se usan en microcontroladores, no en una PC.



------------------------------------

Finalmente pude hacerlo, era más simple de lo que pensaba. Simplemente creé una función para controlar tanto la frecuencia como el estado.

function oscillation()
    if state < 1 then
        state = state + 3 * SIM_PERIOD
    else
        state = 0
    end
end

SIM_PERIOD es una variable interna del software que estoy usando, es similar a os.clock.

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare