( )
In dit project zullen we ook het gebruik van meerdere RADERTJES, een uniek kenmerk van de Parallax Propeller-chip invoeren.
LC-Display:
De display is verkrijgbaar bij Radio Shack en moet alleen drie draden uit te voeren.
IR-Detector:
Nu, voor controle van de gebruiker en de input voor de ASC-systeem, zullen we toevoegen een infra-rood detector zo
dat een gemeenschappelijk universele TV afstandsbediening kan worden gebruikt. Deze code gebruikt de SONY device
protocalls, dus de externe TC code ingesteld op de eerste SONY-code vermeld haar ' boekje.
Ik ben met behulp van de PNA4602 IR detector chip. Het kijkt een partij zoals een normale drie-legged transistor, maar het niet.
Het bevat op de chip 38 KHZ demodulator en filters waardoor het zeer gemakkelijk te gebruiken met gemeenschappelijke TV
afstandsbedieningen. Ze kosten ongeveer 2 dollar per stuk.
Alle fascinerende technische details kunnen worden gevonden op Ada Fruit op: http://learn.adafruit.com/ir-sensor
Proto-Shield:
Het monteren van de detector, ben ik met behulp van een Seeed "Proto-Shield" van Radio Shack.
Het is een beetje overkill voor een dergelijke kleine circuit, maar meer spullen in de nabije toekomst zal groeien.
Een 3 x 2 vrouwelijke header werd geïnstalleerd als een aansluiting voor de decoder-chip.
Dat is de IR-detector verbergen in de hogere juiste hoek onder die puinhoop van draden.
Aangezien de Proto-Shield-pinnen sluit aan op de ASC socket headers is het niet haalbaar is om te gebruiken
normale wire-wrap technieken. Dat zou houden te veel van de lengte van de pin,
waardoor het twijfelachtig zijn als het schild kon worden aangesloten op de host ASC bord helemaal.
Dus ik ben met behulp van een gemodificeerde techniek - een enkele wikkel rond de pin, dan soldeer.
Het is de gevoelig werk. Maar voor het moment. het is slechts drie draden, macht (3,3 v), gemalen, en
signaal, dus geen probleem hier. Zie de foto van de draden.
Software:
De demosoftware gebruikt verschillende objecten uit de Parallax Object Exchange (OBEX).
Extern stuurprogramma voor IR: "IR_Remote.Spin"
LCD-chauffeur: "serial_lcd.spin"
Nummers: "simple_numbers.spin"
Deze kunnen gedownload worden van de OBEX, maar heb ik ze opgenomen in dit ZIP-bestand dat is gekoppeld
aan deze Instructible.
Deze demo programma leest de afstandsbedieningscodes en worden de resultaten weergegeven op het LCD-display.
Dat deel is vrij eenvoudig en ongecompliceerd.
MAAR...
Wat als we wilden de LCD display uitschakelen van de rug-licht na een paar seconden van inactiviteit?
Normaal gesproken zouden we een interrupt handler daarvoor gebruiken.
Een periodieke interrupt zou de basis van de tijd leveren, en de handler zou tellen om te bepalen
toen was het tijd om het afsluiten van de achtergrondverlichting.
Maar de schroef maakt geen gebruik van interrupts. Dat is wat de meerdere raderen zijn voor. Het duurt een beetje van een
paradigmaverschuiving naar de wikkel van uw gedachten rond parallelle verwerking, maar het is de moeite meer dan waard.
In deze demo-programma, zullen we een procedure voor geringe naar een ander radertje spin-off.
Het zal bieden een basis en een time-out variabele tellen.
U vindt deze code aan het eind van de demonstratie-programma.
Kijk voor - PUB Timeout.
En merk dat alles wat het doet is wacht een seconde, dan check om te zien of de variabele LCDtime
groter is dan nul, en verlagen het als het is. Thats it /.
Bedenk ook dit; Wat als u twee (of meer) verschillend tijd grondslagen nodig?
Elke taak toewijzen aan een verschillende COG en ze lopen gelijktijdig en volledig onafhankelijk van elkaar.
Het krijgen gewoon niet ieder eenvoudiger.
Spin kan kijken een beetje vreemd op het eerste, maar het is makkelijk te leren en doet het werk heel goed.
Maar vergeet niet dat inspringen de structuur van het programma, en het veranderen van de carelesly bepaalt de
inspringing verandert volledig de stroom van het programma! Dus wees voorzichtig dat.
De Propeller Tool (met alle documentatie) kan gratis worden gedownload van Parallax bij:
http://www.Parallax.com/TabId/832/default.aspx
De broncode van de demo:
{{ASC_LCD_IR_TimeOut.spin}}
CON
_CLKMODE = XTAL1 + PLL16X ' 80 Mhz klok
_XINFREQ = 5_000_000
IRpin = 23' IR ontvanger - Propeller Pin
LcdTimeOut = 10
LcdOn1 = $16 ' LCD; cursor uitschakelen, knipperen af
LcdLine0 = $80 ' verplaatsen naar lijn 1, kolom 0
LcdLine1 = 94 dollar ' verplaatsen naar lijn 2, kolom 0
POL = 15' bewijs van leven LED
OBJ
IR: "IR_Remote"
LCD: "serial_lcd"
NUM: "simple_numbers"
VAR
byte IRcode ' keycode van IR ontvanger hier
byte LCDtime
lange IRcog
lange Stack1 [6] ' Stack ruimte voor LCDtimeout Kogge
PUB Init | freq index, Kogge, lcode
"init LCD
als lcd.start (0, 9600, 2)
LCD.putc(LCD#LcdOn1) ' geen cursor
LCD.CLS
LCD.backlight(1)
LCD.Str (string (LcdLine0, "IR Remote"))
' Bewijs van leven
Dira [pol] ~ ~
! outa [pol]
' Start Timeout
LCDTime: LCDTimeout = "reset timeout telkens wanneer een toets wordt ingedrukt
cognew (time-out)
"Init IR afstandsbediening
IRcog: = ir. Start (IRpin, ' Pin van de IR ontvanger, adres van de variabele
Als IRcog > 0
Herhaal
Als LCDtime > 0
LCD.backlight(1) ' het inschakelen
anders ' time-out
LCD.backlight(0) ' schakelen als uit
Als IRcode <> ir #NoNewCode "we hebben een toetscode
lcode: = IRcode
IR. Start (IRpin, ' ingesteld voor de volgende code
Als LCDtime: = 0' als was het weg,
LCD.backlight(1) ' zwenking op weerom voort
LCDTime: LCDTimeout = "reset timeout telkens wanneer een toets wordt ingedrukt
LCD.gotoxy(1,1)
Case 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 ("laatste"))
andere: lcd.str (string(""))
waitcnt ((clkfreq / 1000) * 30 + cnt)
! outa [pol]
PUB Timeout
Herhaal ' eeuwig
waitcnt (clkfreq + cnt) ' wacht één seconde
als byte [= > 1' houden tellen
byte [--' naar beneden