[Diao Ye aprende a programar] MicroPython práctico (15) - Botón AB del tablero de control

Puntos de conocimiento: ¿Qué es un tablero de control?
La placa de control es un hardware inteligente de código abierto que populariza la educación de creadores de STEAM, la educación en inteligencia artificial y la educación en programación de robots. Integra el chip de doble núcleo de alto rendimiento ESP-32, admite la comunicación de modo dual WiFi y Bluetooth, y se puede utilizar como un nodo de IoT para realizar aplicaciones de IoT. Al mismo tiempo, la placa de control integra una pantalla OLED, luces RGB, acelerómetros, micrófonos, sensores de luz, zumbadores, interruptores de llave, interruptores táctiles e interfaces de expansión externa con dedos dorados.Admite gráficos y programación de código MicroPython, que pueden realizar robots inteligentes. , Aplicaciones de control inteligente como Maker Smart Works.

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

Características del hardware de la placa de control: Control
principal ESP-32
Procesador: Procesador de doble núcleo Tensilica LX6 (un núcleo maneja la conexión de alta velocidad; un núcleo de desarrollo de aplicaciones independiente)
frecuencia principal: frecuencia de reloj de hasta 240 MHz
SRAM: 520 KB
Flash:
Wi-Fi de 8 MB estándar: FCC/CE/TELEC/KCC
Protocolo Wi-Fi: 802.11 b/g/n/d/e/i/k/r (802.11n, velocidad de hasta 150 Mbps), agregación A-MPDU y A-MSDU, soporte 0.4us Intervalo de protección
Rango de frecuencia: 2.4~2.5 GHz
Protocolo Bluetooth: Cumple con los estándares Bluetooth v4.2 BR/EDR y BLE
Audio Bluetooth: Audio CVSD y SBC Bajo consumo de energía: 10uA
Método de suministro de energía: Fuente de alimentación Micro USB
Voltaje de funcionamiento: 3,3 V
Corriente de funcionamiento máxima: 200 mA
Corriente de carga máxima: 1000 mA Acelerómetro de tres ejes
integrado MSA300, rango de medición: ±2/4/8/16G sensor geomagnético MMC5983MA, rango de medición: ±8 Gauss, precisión 0,4 mGz, error de brújula electrónica ±0,5 ° Sensor de luz Micrófono 3 perlas de lámpara ws2812 a todo color Pantalla OLED de 1,3 pulgadas, admite pantalla de 16 * 16 caracteres, resolución 128x64 zumbador pasivo , admite 2 botones físicos (A / B), 6 botones táctiles, admite 1 interfaz de clip de cocodrilo, Fácil acceso a varios sensores resistivos









Interfaz de expansión
E/S digital de 20 canales (incluido PWM de 12 canales, entrada táctil de 6 canales)
ADC de entrada analógica de 12 bits de 5 canales, P0~P4
Interfaz de pinza de cocodrilo de entrada externa de 1 canal: EXT/GND
compatible con I2C, UART , protocolo de comunicación SPI

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
1. Interruptor de llave
Se refiere principalmente al interruptor de tecla de toque ligero, también conocido como interruptor de toque de luz. El interruptor de llave es un tipo de interruptor electrónico, que pertenece a la categoría de componentes electrónicos. Apareció por primera vez en Japón [llamado: interruptor sensible]. Cuando la presión está encendida, el interruptor se desconecta y su estructura interna se realiza mediante el cambio de fuerza de la metralla de metal. El interruptor de llave está compuesto por un inserto, una base, una metralla, un botón y una cubierta, entre ellos, un interruptor táctil resistente al agua que tiene una capa de película de poliimida en la metralla.

Los interruptores de llave tienen las ventajas de una resistencia de contacto pequeña, un error de fuerza de operación preciso y especificaciones diversificadas. Son ampliamente utilizados en equipos electrónicos y electrodomésticos, como productos audiovisuales, productos digitales, controles remotos, productos de comunicación y electrodomésticos. , productos de seguridad, juguetes, productos informáticos, equipos de gimnasia, equipos médicos, bolígrafos detectores de moneda, botones de puntero láser, etc. Debido a las condiciones ambientales del interruptor de llave (la fuerza elástica es menos de 2 veces la presión/temperatura ambiental y condiciones de humedad y rendimiento eléctrico), los equipos a gran escala y los botones de alta carga se reemplazan directamente por goma conductora o metralla de metal del interruptor de cúpula , como equipo médico, control remoto de TV, etc.

Con respecto a la posición del pin del interruptor de llave de cinco pines: dos pines forman un grupo, y cuando la presión se aplica correctamente al cuerpo del interruptor, los cuatro pines se encienden y el quinto pin se usa para conexión a tierra.

El interruptor de llave es la cuarta generación de productos de interruptores desarrollados con los requisitos del desarrollo de la tecnología electrónica.El primer volumen es de 12 mm 12 mm, 8 mm 8 mm y ahora es de 6 mm 6 mm. Hay tres tipos de estructuras de productos: vertical, horizontal y horizontal con tierra, y ahora hay dos tipos de combinación (3M, 4M, SM, 6M, SM) y combinación de interruptor de llave de potenciómetro, que cumplen con los requisitos de varios productos electrónicos domésticos . Hay tres tamaños de instalación: 6,5 mm 4,5 mm, 5,5 mm 4 mm y 6 mm 4 mm. Hay pequeños interruptores de llave de 4,5 mm x 4,5 mm e interruptores de llave con chip en el extranjero, y los interruptores de llave con chip son adecuados para montaje en superficie.

Ahora hay un interruptor de quinta generación: el interruptor de membrana, que tiene la misma función que el interruptor de llave y se usa principalmente en instrumentos electrónicos y máquinas herramienta CNC, pero tiene una gran resistencia y una sensación de mano pobre. Para superar el fenómeno de la mala sensación de la mano, también hay lengüetas de contacto en lugar de usar una capa de plata como punto de contacto en el interruptor de membrana.

El interruptor de llave se divide en dos categorías: el interruptor de llave que usa la lengüeta de metal como pieza de contacto del interruptor, la resistencia de contacto es pequeña, la mano se siente bien y hay un sonido nítido de "tic". Un interruptor que utiliza goma conductora como ruta de contacto se suele denominar interruptor de goma conductora. El interruptor se siente bien, pero la resistencia de contacto es grande, generalmente 100-300n. La estructura del interruptor de llave es moverse hacia abajo por la llave, de modo que la lengüeta de contacto o el bloque de goma conductora haga contacto con la pieza de soldadura para formar un camino.

La fuerza de operación del interruptor de llave está relacionada con el estado de la lengüeta. La fuerza inicial es proporcional a la distancia de compresión de la lengüeta. Cuando la lengüeta se comprime entre un 5 % y un 70 %, la fuerza operativa disminuye repentinamente, acompañada de un sonido de "tic". Los interruptores de goma de tortuga guía generalmente tienen dos estructuras. La curva de fuerza operativa varía mucho con la geometría del bloque de caucho.

Humedad relativa: <95 %
Tensión nominal: 12 V
Corriente nominal: 50 mA
Temperatura: -25~70 ℃

Los principales usos de los interruptores de llave son televisores a color, televisores en blanco y negro, equipos de audio, grabadoras de video, cámaras, computadoras, consolas de juegos, máquinas de fax, walkie-talkies, bastones, dispositivos de control de máquinas herramienta, fotocopiadoras, impresoras, instrumentos electrónicos, medidores y otros electrodomésticos.

inserte la descripción de la imagen aquí

2. Hay dos botones de presión A y B en el borde superior del tablero de control

Es de nivel bajo cuando se presiona el botón, de lo contrario es de nivel alto. El proceso de presionar los botones en el panel de control A y B es el siguiente: cuando se presiona, el nivel cambia de alto a bajo, y el momento en que el nivel alto (1) cambia al nivel bajo (0) se denomina flanco descendente. . Cuando se suelta el botón, el nivel cambia de bajo a alto, y el momento en que el nivel bajo (0) cambia al nivel alto (1) se denomina flanco ascendente. Podemos obtener el estado clave actual obteniendo el cambio de nivel.
P5 y P11 son los pines IO de los botones A y B de la placa de control Para evitar conflictos, los pines P5 y P11 de la placa de expansión solo se pueden usar para entrada de nivel digital, y la placa de expansión invertirá el nivel de entrada .

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

3. Controle la pantalla OLED para mostrar A o B a través de los botones A y B

#MicroPython动手做(13)——掌控板之RGB三色灯
#通过A、B按键,控制OLED屏幕显示A或B

from mpython import *
import framebuf
import font.dvsm_16

def display_font(_font, _str, _x, _y, _wrap, _z=0):
    _start = _x
    for _c in _str:
        _d = _font.get_ch(_c)
        if _wrap and _x > 128 - _d[2]: _x = _start; _y += _d[1]
        if _c == '1' and _z > 0: oled.fill_rect(_x, _y, _d[2], _d[1], 0)
        oled.blit(framebuf.FrameBuffer(bytearray(_d[0]), _d[2], _d[1],
        framebuf.MONO_HLSB), (_x+int(_d[2]/_z)) if _c=='1' and _z>0 else _x, _y)
        _x += _d[2]


while True:
    if button_a.value() == 0:
        oled.fill(0)
        display_font(font.dvsm_16, "A", 62, 26, False)
        oled.show()
    if button_b.value() == 0:
        oled.fill(0)
        display_font(font.dvsm_16, "B", 62, 26, False)
        oled.show()

Programación de gráficos mPython X

inserte la descripción de la imagen aquí

4. Los botones A y B encienden las luces RGB

#MicroPython动手做(15)——掌控板之AB按键
#A、B按键点亮DEB灯

from mpython import *

import time

def on_button_a_down(_):
    time.sleep_ms(10)
    if button_a.value() == 1: return
    rgb.fill((int(0), int(153), int(0)))
    rgb.write()
    time.sleep_ms(1)
    time.sleep(0.5)
    rgb.fill( (0, 0, 0) )
    rgb.write()
    time.sleep_ms(1)

def on_button_b_down(_):
    time.sleep_ms(10)
    if button_b.value() == 1: return
    rgb.fill((int(155), int(0), int(0)))
    rgb.write()
    time.sleep_ms(1)
    time.sleep(0.5)
    rgb.fill( (0, 0, 0) )
    rgb.write()
    time.sleep_ms(1)

button_a.irq(trigger=Pin.IRQ_FALLING, handler=on_button_a_down)

button_b.irq(trigger=Pin.IRQ_FALLING, handler=on_button_b_down)

Programación de gráficos mPython

inserte la descripción de la imagen aquí

5. Presione las teclas A y B para tocar diferentes notas.
Presione los pines A y B de la placa de control al mismo tiempo para mostrar A y B. Presionando solamente la tecla A (totalmente negra) o B (totalmente blanca) se borrará la

#MicroPython动手做(15)——掌控板之AB按键
#按下A、B键播放播放不同音符

from mpython import *
import music

def callback_button_ab_pressed():
  music.pitch(262, 250);
  oled.fill(0)
  oled.DispChar("AB", 55, 26)
  oled.show()


def callback_button_a_pressed():
  music.pitch(165, 250);
  oled.fill(0)
  oled.show()


def callback_button_b_pressed():
  music.pitch(523, 250);
  oled.fill(1)
  oled.show()


def on_button_ab_pressed():
  while True:
    if button_a.value() == 0 and button_b.value() == 0:
      yield callback_button_ab_pressed()
    else:
      yield

def on_button_a_pressed():
  while True:
    if button_a.value() == 0:
      yield callback_button_a_pressed()
    else:
      yield

def on_button_b_pressed():
  while True:
    if button_b.value() == 0:
      yield callback_button_b_pressed()
    else:
      yield

func_button_ab_pressed = on_button_ab_pressed()
func_button_a_pressed = on_button_a_pressed()
func_button_b_pressed = on_button_b_pressed()
while True:
  next(func_button_ab_pressed)
  next(func_button_a_pressed)
  next(func_button_b_pressed)

Programación gráfica Mind+
inserte la descripción de la imagen aquí

6. Obtenga el estado clave, presione la tecla A para encender la luz, presione la tecla B para apagar la luz

#MicroPython动手做(15)——掌控板之AB按键
#按A键开灯,按B键关灯

from mpython import *

while True:
    # 按键A按下为低电平
    if button_a.value() == 0 :   
        # 按键延时
        sleep_ms(20)
        # 再次检测是否按下
        if button_a.value()==0:
            # 设置为三色
            rgb[0] = (130,0,0)  
            rgb[1] = (0,100,0)
            rgb[2] = (0,0,255)
        rgb.write()
    # 按键B按下为低电平
    if button_b.value() == 0 :   
        # 按键延时
        sleep_ms(20)
        # 再次检测是否按下
        if button_b.value()==0:
            # 关灯
            rgb[0] = (0, 0, 0)   
            rgb[1] = (0, 0, 0)
            rgb[2] = (0, 0, 0)
            rgb.write()

Antes de usar, importe el módulo mpython:

from mpython import *

Botón A y Botón B presionados:

button_a.value() == 0      #按键 A 按下
button_b.value() == 0      #按键 B 按下

Tenga en cuenta que
button_a es el nombre de objeto del botón A, y el nombre de objeto del botón B es button_b, que es una clase derivada de machine.Pin y hereda el método de Pin, por lo que puede usar la función de valor para leer el valor del pin, devuelva 1 para representar una señal de nivel alto y devuelva 0 para representar una señal de nivel bajo, por lo que cuando no se presiona el botón, el valor1. valor cuando se presiona el estado0

7. Botón de interrupción
Presione el botón A para encender la luz y el zumbador integrados, presione el botón B para apagar la luz y el zumbador integrados

#MicroPython动手做(15)——掌控板之AB按键
#按键中断

from mpython import *     #导入mpython模块
import music              #导入music模块

def ledon(_):             #先定义中断处理函数:开灯和蜂鸣器
    rgb.fill((128,0,0))   #打开板载灯,全部设置为红色,半亮度
    rgb.write()           #将颜色输出到灯
    music.pitch(1000)     #打开蜂鸣器:1000赫兹

def ledoff(_):            #先定义中断处理函数:关灯和蜂鸣器
    rgb.fill((0,0,0))     #关闭全部板载灯
    rgb.write()           #将颜色输出到灯
    music.pitch(0)        #关闭蜂鸣器

button_a.irq(trigger=Pin.IRQ_FALLING, handler=ledon)     #设置按键 A 中断,下降沿触发,开灯和蜂鸣器

button_b.irq(trigger=Pin.IRQ_FALLING, handler=ledoff)    #设置按键 B 中断,下降沿触发,关灯和蜂鸣器

while True:                            #在没有中断时,程序执行在循环内
    pass

Nota:
De forma predeterminada, el programa anterior está vacío en el ciclo y no ejecuta ninguna instrucción. Al detectar una pulsación de interrupción del botón b, vuelva a llamar a la función correspondiente.

button_a.irq(trigger=Pin.IRQ_FALLING, handler=ledon) es la función correspondiente al controlador de interrupción llamado. trigger Configura eventos que pueden disparar interrupciones, los valores posibles son: Pin.IRQ_FALLING interrupción de flanco descendente; Pin.IRQ_RISING interrupción de flanco ascendente; Pin.IRQ_LOW_LEVEL interrupción de bajo nivel; Pin.IRQ_HIGH_LEVEL interrupción de alto nivel. handler es una función opcional que se llama cuando se activa la interrupción y devuelve un objeto de devolución de llamada. Para obtener información detallada sobre el uso, consulte button_[a,b].irq.

Aviso

Al definir una función de manejo de interrupciones, la función debe contener cualquier parámetro; de lo contrario, no se puede usar. Los parámetros en las funciones ledon() y ledoff() son _.

Supongo que te gusta

Origin blog.csdn.net/weixin_41659040/article/details/131999131
Recomendado
Clasificación