( )
Dans ce projet, nous introduirons également l’utilisation de plusieurs dents, une caractéristique unique de la puce de l’hélice de la parallaxe.
Affichage à cristaux liquides :
L’affichage est disponible chez Radio Shack et n’a besoin de trois fils d’exécuter.
Détecteur IR :
Maintenant, pour fournir le contrôle utilisateur et entrées dans le système ASC, nous allons ajouter un détecteur infra-rouge donc
qu’une unité de télécommande TV universelle commune peut être utilisée. Ce code utilise l’appareil de SONY
protocalls, a donc mis le code de TC pour le premier code SONY inclus dans son "livret.
J’utilise la puce de détecteur IR PNA4602. Il ressemble beaucoup à un transistor normal à trois pattes, mais ce n’est pas.
Il contient sur puce 38KHZ démodulateur et filtres qui le rend très facile à utiliser avec TV commune
télécommandes. Ils coûtent environ 2 $ chaque.
Tous les détails techniques fascinantes se trouvent à Ada fruits à: http://learn.adafruit.com/ir-sensor
Proto-Shield :
Pour monter le détecteur, j’utilise un Seeed « Proto-bouclier » de Radio Shack.
C’est un peu exagéré pour un tel petit circuit, mais il se développera plus de choses dans un proche avenir.
Un en-tête femelle 3 x 2 a été installé comme un socket pour la puce de décodage.
C’est le détecteur IR se cachant dans le coin supérieur droit en vertu de ce désordre de fils.
Étant donné que les broches de Proto-bouclier brancher dans les en-têtes de socket ASC que n’est pas possible d’utiliser
techniques normales de l’enrouler. Qui prendrait trop de la longueur de l’axe,
rend douteuse si le bouclier pourrait être connecté à l’hôte du Conseil de l’ASC du tout.
Alors j’utilise une technique modifiée - une enveloppe unique autour de la broche, puis souder.
C’est un travail délicat. Mais pour l’instant. C’est seulement trois fils, puissance (3.3V), au sol, et
signal, donc pas de problème ici. Voir la photo de fils.
Logiciel :
Le logiciel de démonstration utilise plusieurs objets de la parallaxe OBEX (Object Exchange).
Pilote de distance infrarouge: « IR_Remote.Spin »
Pilote de l’écran LCD: « serial_lcd.spin »
Numéros: « simple_numbers.spin »
Ceux-ci peuvent être téléchargés de l’OBEX, mais j’ai inclus dans ce fichier ZIP joint
à cette Instructible.
Ce programme de démo lit les codes de la télécommande et affiche les résultats sur l’écran LCD.
Cette partie est assez simple et rapide.
MAIS...
Que se passe-t-il si nous voulions l’écran LCD pour éteindre le rétro-éclairage après quelques secondes d’inactivité ?
Normalement, nous utiliserions un gestionnaire d’interruption pour cela.
Une interruption périodique fournirait la base de temps, et le gestionnaire de décompte pour déterminer
quand il était temps d’arrêter le rétro-éclairage.
Mais l’hélice ne pas utiliser les interruptions. C’est ce que les roues dentées multiples sont pour. Il faut un peu d’un
changement de paradigme pour envelopper votre esprit autour de traitement parallèle, mais il vaut la peine.
Dans ce programme de démo, on tournera une petite procédure à un autre rouage.
Il fournira une base de temps et compte à rebours d’une variable de délai d’attente.
Vous pouvez trouver ce code à la fin du programme de démonstration.
Recherchez - PUB Timeout.
Et notez que tout ce qu’est d’attendre une seconde, puis vérifier voir si la variable LCDtime
est supérieur à zéro et decrement, dans ce cas. C’est ça /.
Aussi, pensez à ceci ; que se passe-t-il si vous avez besoin de deux (ou plusieurs) des bases de temps complètement différent ?
Affecter chaque tâche à un autre ROUAGE et ils courent simultanément et complètement indépendamment les uns des autres.
Il juste n’y soit plus simple.
Essorage peut sembler un peu étrange au début, mais il est facile à apprendre et fait le travail tout à fait bien.
Mais n’oubliez pas qu’indentation définit la structure du programme et carelesly changer la
indentation va changer complètement le flux du programme ! Donc faire attention à cela.
L' Outil de l’hélice (avec toute la documentation) peut être téléchargé gratuitement de la parallaxe à :
http://www.Parallax.com/tabid/832/default.aspx
Démo Source Code :
{{ASC_LCD_IR_TimeOut.spin}}
CON
_CLKMODE = XTAL1 + PLL16X ' horloge 80 Mhz
_XINFREQ = 5_000_000
IRpin = 23' IR Receiver - hélice Pin
LcdTimeOut = 10
LcdOn1 = $16 ' LCD ; curseur hors, blink hors
LcdLine0 = 80 $ ' passer à la ligne 1, colonne 0
LcdLine1 = $94 ' passer à la ligne 2, colonne 0
POL = 15' preuve de vie LED
OBJ
IR: « IR_Remote »
LCD: « serial_lcd »
num: « simple_numbers »
VAR
octet IRcode ' keycode de récepteur IR ici
Byte LCDtime
long IRcog
Stack1 long [6] ' espacedisquepour cog LCDtimeout de la pile
PUB Init | FREQ, index, cog, lcode
' init LCD
Si lcd.start (0, 9600, 2)
LCD.putc(LCD#LcdOn1) ' pas de curseur
LCD.CLS
LCD.backlight(1)
LCD.Str (string (LcdLine0, « IR Remote »))
"Preuves de vie
dira [pol] ~ ~
! outa [pol]
« Démarrer le Timeout
LCDTime: = LCDTimeout ' réinitialiser le délai d’attente chaque fois qu’une touche est enfoncée
cognew (TimeOut),
' Init IR télécommande
IRcog: = ir. Démarrer (IRpin, « Pin de œil infrarouge, l’adresse de la variable
Si IRcog > 0
Répétez
Si LCDtime > 0
LCD.backlight(1) ' allume
else ' a expiré
LCD.backlight(0) ' tourner si off
Si IRcode <> ir #NoNewCode ' nous avons un code de touche
lcode: = IRcode
IR. Démarrer (IRpin, "mis en place pour prochain code
Si LCDtime: = 0' si il était éteint,
LCD.backlight(1) ' le réactiver
LCDTime: = LCDTimeout ' réinitialiser le délai d’attente chaque fois qu’une touche est enfoncée
LCD.gotoxy(1,1)
lcode affaire
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"))
autres : lcd.str (string(""))
waitcnt ((clkfreq / 1000) * 30 + cnt)
! outa [pol]
PUB Délai d’attente
Répéter ' boucle pour toujours
waitcnt (clkfreq + cnt) ' attendre une seconde
Si octet [= > 1' tenir compte
Byte [--' vers le bas