¿Eres un gurú del software que trae lágrimas y sonrisas de alegría a los usuarios de Arduino de todo el mundo?
¿Eres un gurú del software que trae lágrimas y sonrisas de alegría a los usuarios de Arduino de todo el mundo?
En mi columna anterior sobre este tema, discutí el hecho de que cuando creo bocetos (programas) de Arduino que hacen cosas como controlar los efectos de iluminación, me gusta experimentar con diferentes combinaciones de valores.
El ejemplo que usamos se basa en mi muy divertido temporizador de cuenta regresiva.En particular, el efecto del aleatorizador simple que se muestra en la figura este video.
Una versión rudimentaria del efecto que se ve en el video es generar una serie de números aleatorios (50 en este ejemplo), poner un retraso entre ellos (10 ms en este ejemplo), hacer una pausa en el valor final durante 1 segundo y luego ejecutar cosas de nuevo
Además, una cosa que puede hacer para aumentar este efecto es agregar una amortiguación lineal (ralentización) como se muestra a continuación.
En este caso, inicia una transición (generando y mostrando números aleatorios) a cierta velocidad, mantiene esta velocidad durante un período de tiempo denominado tiempo de mantenimiento y luego se ralentiza gradualmente durante un período denominado tiempo de decaimiento hasta que se detiene. Sobre los números finales. Dada una forma de especificar una tasa inicial (transiciones por segundo), un tiempo sostenido y un tiempo de caída, el programa puede usar estos valores para calcular aspectos internos como el número de transiciones y retrasos. entre ellos.
Puede especificar valores iniciales para estas variables en su programa. También necesitamos una forma de cambiar estos valores para que podamos experimentar con diferentes efectos. Las tres soluciones que consideramos fueron:
- Use declaraciones #define para codificar valores, editar y volver a compilar para probar nuevos valores/efectos.
- Un panel de control basado en hardware que utiliza interruptores físicos y potenciómetros.
- Panel de control basado en software con interruptores y potenciómetros virtuales.
Curva de las cuatro estaciones
Esta columna se centrará en los paneles de control basados en software, pero primero (no lo olvide) también querrá probar muchos otros efectos. Algunos de estos efectos se pueden resumir gráficamente como se muestra a continuación.
En cuanto a las curvas exponenciales, el decaimiento en (c) comienza lentamente y luego se acelera, mientras que el decaimiento en (d) comienza rápido y luego se ralentiza. No pude decidir cómo distinguir entre estos efectos (términos como ‘cóncavo’ y ‘convexo’ dependen de su punto de vista). Así que elegí ‘eeeKKK’ y ‘EEEkkk’ en función del sonido que podría producirse si se reflejaran estas curvas. Estoy en una montaña rusa (las minúsculas y las mayúsculas corresponden a los límites de frecuencia y volumen inferior y superior, respectivamente; se aceptan otras sugerencias de nombres).
Observe también la curva en forma de “S” que comienza lentamente, acelera y luego desacelera nuevamente. Cada una de estas curvas tiene una ecuación asociada. Todo lo que necesita es la capacidad de seleccionar el efecto que desea probar y manipular las variables apropiadas para determinar la solución visualmente más atractiva.
Usando el monitor serie “ideal”
Como mencioné en mi última columna, utilicé el monitor serial incorporado del IDE de Arduino para ver los resultados. de Arduino, pero nunca he usado un Arduino para impulsar un valor en el Arduino. En el lado positivo, he visto esto mencionado en mi libro Arduino. Conceptos básicos de la entrada en serie Un hilo en los foros de Arduino explica todo esto con gran detalle.
Para Arduino, los únicos comandos de salida en serie que he usado son Serial.print() y Serial.println(), pero debe haber otros.
Ignoremos el monitor serie Arduino por ahora. En su lugar, supongamos que está trabajando con un monitor serie “ideal”. En este caso, suponga que usa el equivalente de los comandos Serial.print() y Serial.println() de Arduino para mostrar la siguiente información en la ventana del monitor serial de la computadora host:
Recuerde, esto es algo que estoy construyendo a medida que avanzo. La forma en que lo imagino son los dos caracteres mayores que ‘>>’ para indicar con qué efecto estás tratando. Además, qué parámetro dentro de ese efecto.
De forma predeterminada, utiliza un efecto Lineal y el parámetro Velocidad inicial al inicio, como se muestra en la imagen de arriba. Al hacer clic en las teclas de flecha hacia arriba o hacia abajo, se cambia el valor asociado con el parámetro Tasa inicial en un incremento definido por el programa (los valores mínimos y máximos permitidos también están definidos por el programa). Además de cambiar el valor del parámetro dentro del programa, este nuevo valor también se muestra en la ventana del monitor serie.
Dado que actualmente estamos usando un efecto lineal, las únicas letras que se pueden escribir en el teclado para moverse entre los parámetros de este efecto son ‘I’, ‘S’ y ‘D’. El “>>” asociado con estos parámetros se moverá en consecuencia.
Si desea elegir un efecto diferente,
¿Esto no ralentiza el programa?
Una de mis grandes preocupaciones era que usar la comunicación serial de Arduino de esta manera ralentizaba mi programa. Esto se basó en mi experiencia de escribir constantemente valores de variables y bucles mientras depuraba un programa.
Pero Ivan dice que si en realidad no está escribiendo o accediendo a los datos del monitor serial, el impacto en su código es insignificante. Solo cuando accede y muestra algo, las cosas se ralentizan.
Usando el monitor serial incorporado de Arduino IDE
Volvamos a nuestra discusión sobre el monitor serie integrado de Arduino. La ventaja de esta pequeña estafa es que está estrechamente integrada y bien documentada. La pega es que es un terminal (muy) tonto con capacidades limitadas.
Por ejemplo, no puede decirle que coloque el cursor donde lo desee en la pantalla. Para los menús, esto significa que todo el sistema de menús debe reescribirse cada vez que seleccione un elemento nuevo, cambie un valor, etc. Por lo tanto, varias copias del menú que se muestra arriba se desplazan hacia arriba en la pantalla, con la versión actual debajo.
Por supuesto, también puede usar líneas de caracteres “——–” para separar las copias. El resultado final ciertamente funciona, pero es dolorosamente torpe (definitivamente no es algo que quieras mostrarle a tu madre). y sus amigas en un cóctel).
Usando un emulador VT100
Hay disponible una variedad de ventanas de terminales seriales, que incluyen: Término realpor ejemplo, de particular interés es que muchos de estos admiten códigos de escape VT100.
Para entender por qué esto es importante, primero VT100 es un terminal presentado por Digital Equipment Corporation (DEC) en 1978. Este terminal admitía un conjunto de códigos de escape (o secuencias de escape) para el control del cursor y otras tareas.
Estos códigos de escape son
Para nuestro sistema de menús, esto es genial. Solo tiene que dibujar el menú principal una vez, luego usar secuencias de escape para agregar caracteres como “>>”, eliminarlos (sobreescribiéndolos con espacios) y actualizar los valores en la pantalla.
Necesito un héroe/heroína de codificación
Mi amigo Ivan implementó un sistema de menús basado en el emulador VT100 para uno de sus propios proyectos de hobby con Arduino, pero dice que no era para los débiles de corazón. Enviar secuencias de escape es fácil (solía hacerlo mucho a principios de la década de 1980). La parte complicada es conectar un terminal serial compatible con VT100 al puerto serial que el Arduino está usando.
No sé ustedes, pero constantemente estoy yendo y viniendo entre diferentes Arduinos (generalmente Unos y Megas) y los puertos COM que usan.
Ivan me mostró cómo, asumiendo que estás en una PC, primero ve al Panel de control, luego al Administrador de dispositivos, luego baja y encuentra el puerto COM en cuestión. Entonces todo lo que tienes que hacer es… Lo siento, me quedé dormido mientras él hablaba.
El problema es que cualquier buen programador puede escribir una aplicación JavaScript que se ejecuta en un navegador web que hace todo esto usando API que forman parte del sistema operativo Windows. En un mundo ideal, imagina algo como esto:
- Descargue una aplicación de terminal serie compatible con VT100 gratuita e instálela en su PC.
- Descargue la aplicación gratuita “Menú de bricolaje” (es JavaScript que se ejecuta en su navegador).
- Descargue la biblioteca “Menú de bricolaje” para Arduino.
- Estoy escribiendo mi programa Arduino. Como parte de esto, #incluirá la biblioteca de menús de bricolaje y escribirá código para dibujar y dar servicio a su menú en particular.
- Después de cargar el programa en Arduino y ejecutarlo, en el IDE de Arduino[シリアル モニター]Inicie una aplicación de JavaScript en lugar de hacer clic en un icono. Esto identificará automáticamente el puerto COM que Arduino está utilizando, iniciará una aplicación de terminal serial compatible con VT100, ingresará al modo VT100 y se conectará a Arduino.
En este punto, Arduino estaba dibujando un menú en la pantalla, después de lo cual pude usar el teclado para seleccionar elementos del menú y cambiar/especificar parámetros.
Entonces, sé lo que quiero, pero no sé cómo lograrlo. Lo que realmente necesitamos es un gurú del software que pueda agitar una varita mágica de software para hacernos la vida mucho más fácil. Teniendo en cuenta cuántos usuarios de Arduino hay en el mundo, creo que esta sería una solución increíblemente popular y le daría prestigio y gloria a su creador (tengo que felicitarme por intentarlo).
Entonces, ¿eres el gurú del software que trae lágrimas y sonrisas de alegría a los usuarios de Arduino en todo el mundo? No dude en enviarme un correo electrónico a [email protected] si está interesado en trabajar en esto.