( )
En este proyecto también introducimos el uso de múltiples dientes, una característica única de la viruta de propulsor de la paralaje.
Pantalla LCD:
La pantalla está disponible en Radio Shack y sólo necesita tres hilos para ejecutar.
Detector de infrarrojos:
Ahora, para proporcionar control de usuario y entrada al sistema de ASC, vamos a añadir un detector de infrarrojos para
que puede utilizarse una unidad de control remoto TV universal común. Este código utiliza el dispositivo de SONY
protocalls, así que establece el código remoto de TC en el primer código de SONY en su ' manual.
Estoy usando el chip detector de IR PNA4602. Parece mucho a un transistor de tres patas normal, pero no es.
Contiene filtros que hace muy fácil de utilizar con TV común y desmodulador de 38 KHZ de la en-viruta
mandos a distancia. Cuestan unos $2 cada uno.
Todos los fascinantes detalles técnicos pueden encontrarse en frutas de Ada en: http://learn.adafruit.com/ir-sensor
Proto-Shield:
Para montar el detector, estoy usando un Seeed "Proto-escudo" de Radio Shack.
Es un poco excesivo para un pequeño circuito, pero crecerá más cosas en un futuro cercano.
Un encabezado de 3 x 2 hembra se instaló como un zócalo para el chip decodificador.
Es el detector de IR escondido en la esquina superior derecha debajo de ese lío de cables.
Puesto que los pines de Proto-escudo enchufe en las cabeceras de zócalo ASC no es factible utilizar
técnicas de envoltura de cable normal. Que llevaría encima de demasiado de la longitud del perno,
lo que es cuestionable si el escudo podría ser conectado en el host Junta ASC en todos.
Por lo que estoy usando una técnica modificada - una simple envoltura alrededor del perno, después de la soldadura.
Es un trabajo delicado. Pero por el momento. es sólo tres hilos, energía (3.3V), tierra, y
señal, así que no hay problema. Ver la foto de los cables.
Software:
El software de la versión parcial de programa utiliza varios objetos de intercambio paralaje de objetos (OBEX).
Controlador remoto de IR: "IR_Remote.Spin"
Conductor del LCD: "serial_lcd.spin"
Números: "simple_numbers.spin"
Estos pueden descargarse el OBEX, pero he incluido en este archivo ZIP adjunto
a este Instructible.
Este programa demo Lee los códigos de control remoto y muestra los resultados en la pantalla LCD.
Esa parte es bastante simple y sencillo.
PERO...
¿Lo que si queríamos la pantalla LCD para apagar la luz de fondo después de unos segundos de inactividad?
Normalmente, utilizaría un manejador de interrupción para eso.
Una interrupción periódica constituiría la base de tiempo, y el controlador cuenta atrás determinar
Cuando llegó el momento de apagar la luz de fondo.
Pero la hélice no utiliza interrupciones. Eso es lo que los dientes múltiples para. Toma un poco de un
cambio de paradigma para envolver su mente alrededor de procesamiento en paralelo, pero bien vale el esfuerzo.
En este programa de demostración, hará girar apagado un pequeño procedimiento a otra corona.
Se proporciona una base de tiempo y conteo regresivo variable tiempo de espera.
Puede encontrar este código al final del programa de demostración.
Buscar - tiempo de espera de PUB .
Y tenga en cuenta que lo único que hace es esperar un segundo, entonces Compruebe ver si la variable LCDtime
es mayor que cero y disminuye si es. Eso es todo /.
También, considere esto; ¿Qué pasa si se necesitan dos (o más) bases de tiempo completamente diferente?
Asignar cada tarea a un engranaje diferente y funcionan al mismo tiempo y totalmente independientemente uno del otro.
Sólo no consigue todo más simple.
Giro puede parecer un poco extraño al principio, pero es fácil de aprender y hace el trabajo bastante bien.
Pero recuerde que muesca define la estructura del programa y cambio de carelesly la
indentación cambiará totalmente el flujo del programa. Así que ten cuidado de eso.
La Herramienta de la hélice (con toda la documentación) puede descargarse gratis de paralaje en:
http://www.Parallax.com/tabid/832/default.aspx
Código fuente de demostración:
{{ASC_LCD_IR_TimeOut.spin}}
CON
_CLKMODE = XTAL1 + PLL16X ' reloj de 80 Mhz
_XINFREQ = 5_000_000
Irpín = 23' IR receptor - perno de la hélice
LcdTimeOut = 10
LcdOn1 = $16 ' LCD; cursor off, parpadeo off
LcdLine0 = $80 ' mover a la línea 1, columna 0
LcdLine1 = $94 ' mover a la línea 2, columna 0
POL = 15' prueba de vida LED
OBJ
ir: "IR_Remote"
LCD: "serial_lcd"
NUM: "simple_numbers"
VAR
byte IRcode ' keycode de receptor IR aquí
byte LCDtime
IRcog largo
Stack1 largo [6] ' pila de espacio para LCDtimeout cog
PUB Init | frecuencia, índice, cog, lcode
' init LCD
Si lcd.start (0, 9600, 2)
LCD.putc(LCD#LcdOn1) ' sin cursor
LCD.CLS
LCD.Backlight(1)
LCD.Str (string (LcdLine0, "IR Remote"))
' Prueba de vida
dira [pol] ~ ~
! outa [pol]
' Iniciar el tiempo de espera
LCDTime: = LCDTimeout ' restablecer el tiempo de espera cada vez que se pulsa una tecla
cognew (tiempo de espera)
' Init control remoto
IRcog: = ir. Inicio (Irpín, ' Pin de IR receptor, dirección de variable
Si IRcog > 0
repetir
Si LCDtime > 0
LCD.backlight(1) ' encendido
otro ' agotado el tiempo de
LCD.backlight(0) ' girar if off
Si IRcode <> ir #NoNewCode ' tenemos un código de tecla
lcode: = IRcode
ir. Inicio (Irpín, ' configurado para el siguiente código
Si LCDtime: = 0' si estaba apagado,
LCD.backlight(1) ' encenderla
LCDTime: = LCDTimeout ' restablecer el tiempo de espera cada vez que se pulsa una tecla
LCD.gotoxy(1,1)
caso lcode
ir #one: lcd.str (string ("< 1 >))
ir #two: lcd.str (string ("< 2 >"))
ir #three: lcd.str (string ("< 3 >"))
ir #four: lcd.str (string ("< 4 >"))
ir #five: lcd.str (string ('< 5 >'))
ir #six: lcd.str (string ("< 6 >"))
ir #seven: lcd.str (string ("< 7 >"))
ir #eight: lcd.str (string ("< 8 >"))
ir #nine: lcd.str (string ("< 9 >"))
ir #zero: lcd.str (string ("< 0 >"))
ir #chUp: lcd.str (string ("chUp"))
ir #chDn: lcd.str (string ("chDn"))
ir #volUp: lcd.str(string("volUp"))
ir #volDn: lcd.str(string("volDn"))
ir #mute: lcd.str (string ("mute"))
ir #power: lcd.str(string("power"))
ir #last: lcd.str (string ("last"))
otros: lcd.str (string(""))
waitcnt ((clkfreq / 1000) * 30 + cnt)
! outa [pol]
PUB Tiempo de espera
REPEAT ' bucle para siempre
waitcnt (clkfreq + cnt) ' espera un segundo
Si bytes [= > 1' seguir contando
Byte [--' abajo