jorim23
Murphy's Law: Anything you try to fix will take longer and cost more than you think.
Ik heb het volgende stukje code:
DEVICE 16F628A ;Gebruik een 16F628A type
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL TRUE
lcd_rspin = porta.4
lcd_enpin = porta.3
ALL_DIGITAL = True
delayms 500
Cls
While 1 = 1
PRINT at 1,1,@ Lookup INKEY [1,2,3,"*",4,5,6,0,7,8,9,"#",0,0,0], " "
PRINT at 2,1,Lookup INKEY,["123*456E789#A0BC "]
Wend
Nu het volgende: Als de code om is gezet in een .Hex file en ik laat m draaien(het programmatje) dan klopt hij denk ik niet helemaal.
Hij laat op de eetste regel keurig zien welk nummer ik intoets maar daar achter staat de hele tijd 35.
Wie kan mij vertellen waarom dat zo is en hoe ik het weg kan halen?
Hij laat trouwens in plaats van een * een 0 zien, waarbij op de 2de regel een A staat en voor een # hetzelfde maar dan met een B. Hoe krijg ik het voor elkaar om daar een * en een # van te maken?
Ook begind het programma elke keer als ik de spanning erop zet met een 5. Hoe kan ik het zo krijgen, dat het bij het begin gewoon blanco is?
picsels
Volgend project: 7-seg gaming displays; dan dec-1982 labvoeding afmaken, dan funcgen met ad9833 afmaken, dan...
Als het picbasic is, kopieer dan svp je werkende code.
Want wat je nu hebt neergezet compileert niet; de 1e printregel is fout: een @ teveel en een ',' te weinig.
jorim23
Murphy's Law: Anything you try to fix will take longer and cost more than you think.
Raar, bij mij compilerd hij hem wel. Ik gebruik de lite versie van proton(had ik er trouwens niet bijverteld, sorry daarvoor).
Exwieze me;), foutje inderdaad. Dit moet de goede zijn.
DEVICE 16F628A ;Gebruik een 16F628A type
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL TRUE
lcd_rspin = porta.4
lcd_enpin = porta.3
ALL_DIGITAL = True
delayms 500
Cls
While 1 = 1
PRINT at 1,1,@ Lookup INKEY, [1,2,3,"*",4,5,6,0,7,8,9,"#",0,0,0], " "
PRINT at 2,1,Lookup INKEY,["123*456E789#A0BC "]
Wend
[Bericht gewijzigd door jorim23 op (66%)]
picsels
Volgend project: 7-seg gaming displays; dan dec-1982 labvoeding afmaken, dan funcgen met ad9833 afmaken, dan...
Da's zeker bijzonder.
Waarom heb je de beide print-regels anders neergeschreven?
De 1e met een @ en géén komma na de INKEY.
De 2e printregel ziet er anders (en beter) uit.
Als je verkeerde tekens ziet, kun je ze toch eenvoudigweg omdraaien in de string tussen de haken []?
jorim23
Murphy's Law: Anything you try to fix will take longer and cost more than you think.
Op 13 oktober 2007 22:04:47 schreef picsels:
Waarom heb je de beide print-regels anders neergeschreven?
De 1e met een @ .
De 2e printregel ziet er anders (en beter) uit.
Omdat ik dan op de eerste regel alleen een blokje krijg en geen nummer(de 53 aan t eind is dan overgins weg)
Als je verkeerde tekens ziet, kun je ze toch eenvoudigweg omdraaien in de string tussen de haken []?
Hoe bedoel je dat?
picsels
Volgend project: 7-seg gaming displays; dan dec-1982 labvoeding afmaken, dan funcgen met ad9833 afmaken, dan...
Omdat ik dan op de eerste regel alleen een blokje krijg en geen nummer(de 53 aan t eind is dan overgins weg)
Is dat dan ook wat je wilt?
Hoe bedoel je dat?
Als je een '*' krijgt, en je verwacht een '0', dan moet je die twee omdraaien in de string die tussen haken staat.
Dus zoiets:
Print At 2,1,LookUp InKey,["1230456E789#A*BC "](sterretje en de nul zijn omgedraaid)
jorim23
Murphy's Law: Anything you try to fix will take longer and cost more than you think.
Op 13 oktober 2007 22:34:35 schreef picsels:
[...]
Is dat dan ook wat je wilt?
Nee, ik wil het nummer zien die ik op dat moment heb ingedrukt(en uiteindelijk letters, maar dat komt later wel)
[...]
Als je een '*' krijgt, en je verwacht een '0', dan moet je die twee omdraaien in de string die tussen haken staat.
Dus zoiets:Print At 2,1,LookUp InKey,["1230456E789#A*BC "](sterretje en de nul zijn omgedraaid)
Ik wil, als ik * indruk een * zien, maar dat wil niet lukken(hetzelfde geld voor het hekje). Ik heb t ook al eens geprobeerd met de ASCII codes, maar dat werkte ook niet.
picsels
Volgend project: 7-seg gaming displays; dan dec-1982 labvoeding afmaken, dan funcgen met ad9833 afmaken, dan...
Je moet weten welke toets welk nummer oplevert.
Dus voer het onderstaande programma uit en druk een keer op iedere toets:
While 1 = 1
Cls
Print At 1,1,Dec InKey
Wend
Nu weet je precies welke toets welk getal (0..15) oplevert.
In deze volgorde zet je de overeenkomstige tekens in de string achter de lookup.
Kijk in de help bij het voorbeeld bij 'inkey'. De belangrijkste zin is:
The above example is only a demonstration, the values inside the LOOKUP command will need to be re-arranged for the type of keypad used, and it's connection configuration.
jorim23
Murphy's Law: Anything you try to fix will take longer and cost more than you think.
picsels
Volgend project: 7-seg gaming displays; dan dec-1982 labvoeding afmaken, dan funcgen met ad9833 afmaken, dan...
Variantje:
Dim toets As Byte
While 1 = 1
toets = InKey
If InKey <> 16 Then
Cls
Print At 1,1,Dec toets
End If
Wend
Had even niet opgelet (de inkey is geen blocking instruction.)
Hiermee zou er toch wat moeten verschijnen, anders is er hardwarematig iets niet goed.
[Bericht gewijzigd door picsels op (11%)]
Fantomaz
Ik moet hier weer vaker komen... Wat kun je zo'n forum als deze gaan missen. :-)
Ik mis hier het lookup commando.
Hoe weet de PIC dan welke volgorde er aangehouden moet worden cq wat hij moet "printen"?
picsels
Volgend project: 7-seg gaming displays; dan dec-1982 labvoeding afmaken, dan funcgen met ad9833 afmaken, dan...
Op 14 oktober 2007 10:32:23 schreef Fantomaz:
Ik mis hier het lookup commando.
Ik mis nog veel meer.
Ik hoop toch dat het programma meer doet dan alleen cijfers op een LCD zetten.
Bovenstaand voorbeeld is bedoeld om te zien welke toets, welke waarde oplevert. Vervolgens kun je daarmee in de lookup de cijfers en tekens in de goede volgorde zetten.
jorim23
Murphy's Law: Anything you try to fix will take longer and cost more than you think.
Ik heb het stukje code geprobeert. Hij werkt wel maar t is niet helemaal wat ik bedoel.
Het stukje wat er na INKEY komt, in de code die ik heb, klopt opzich wel(dus als ik de 1 indruk, krijg ik ook een 1), maar wat er niet klopt is dat ik in plaats van een * een 0 zie staan en op de 2de regel een A. Dat is ook zo bij het hekje alleen zie ik dan op de 2de regel een B.
Verder begint het programmatje elke keer bij 5 en staat er achter elk nummer wat ik in druk een 35(dus zoiets als, 5 35 of 1 35).
Ik weet dus niet hoe ik die 35 weg kan halen en hoe ik een * of een hekje zichtbaar maak, als ik deze in druk.
jorim23
Murphy's Law: Anything you try to fix will take longer and cost more than you think.
Oke, ik ben nu zo ver dat ik op de 2de regel wel een * en een hekje zie staan, maar als ik het volgende stukje programmeer,
PRINT at 1,1,@ Lookup INKEY,[1,2,3,0,4,5,6,0,7,8,9,0,"*",0,"#"], " "
PRINT at 2,1,Lookup INKEY,["123*456E789#*0#C"]zie ik op de eerste regel, bij het indrukken van het * of hekje, de ASCII code staan(dus 42 en 35). Wannneer ik de toets weer los laat veranderd nummer 42(*) in 2 en nummer 35(hekje) in 5. Rara politiepet.
Fantomaz
Ik moet hier weer vaker komen... Wat kun je zo'n forum als deze gaan missen. :-)
Als je nou die waarden eerst in een variabele zet en je gooit daar een voorwaarde tegenaan, zou je de hekjes en de sterretjes kunnen aanpassen naar wat anders, voor ze weer te geven op je schermpje.
jorim23
Murphy's Law: Anything you try to fix will take longer and cost more than you think.
Na eindeloos gestoei werkt het eindelijk:)
Dit was uiteidelijk de code:
DEVICE 16F628A ;Gebruik een 16F628A type
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL TRUE
delayms 500
Cls
lcd_rspin = porta.4
lcd_enpin = porta.3
While 1 = 1
PRINT at 1,1,Lookup INKEY,["123*456E789#*0#"]
PRINT at 2,1,Lookup INKEY,["123*456E789#*0#C"]
Wend
Mensen bedankt voor de hulp.
Fantomaz
Ik moet hier weer vaker komen... Wat kun je zo'n forum als deze gaan missen. :-)
Leg nu de werking eens uit, Jorim.
Want ik heb het gevoel dat er iets mist.
Waarin registreert de PIC nou dat er een toets ingedrukt wordt?
En waarom heb je nou 2 regeltjes met nagenoeg dezelfde code? (met en zonder de "C")
Frits Kieftenbelt
Ohm sweet Ohm | www.picbasic.nl
Het registeren van een toetsindruk doet de instructie INKEY.
Maar het stukje code dat hier geschreven is vind ik onlogisch, of er ontgaat me wat.
Fantomaz
Ik moet hier weer vaker komen... Wat kun je zo'n forum als deze gaan missen. :-)
Jorim had nogal wat problemen met (volgens mij) zijn volgorde van cijfers.
Het eindresultaat ontgaat me ook volledig en we hebben hier ook nog wat mailcontact over.
In ieder geval had het weglaten van het "@" teken resultaat.
Ik realiseer me nu; Is dat niet het tekentje voor wanneer je iets als ASCII wilt weergeven?
Het zou wel verklaren waarom er steeds de ASCII code's van hekje en sterretje voorbij kwamen.
Frits Kieftenbelt
Ohm sweet Ohm | www.picbasic.nl
Het at teken (@) kan voor DEC in de plaats komen (niet DEC van decrement maar van decimaal.
Dus:
PietJanHein = 1234
PRINT DEC PietJanHein
geeft hetzelfde resultaat als:
PietJanHein = 1234
PRINT @PietJanHein
Let hier wel op dat het @ teken zonder spatie vast aan de variabele moet zitten.
picsels
Volgend project: 7-seg gaming displays; dan dec-1982 labvoeding afmaken, dan funcgen met ad9833 afmaken, dan...
Op 15 oktober 2007 00:37:08 schreef Frits Kieftenbelt: Maar het stukje code dat hier geschreven is vind ik onlogisch, of er ontgaat me wat.
Ik veronderstel dat dit een beetje spielerei is; kijken hoe e.e.a. werkt.
Sowieso is het beter om het resultaat van de INKEY in een variabele te proppen. Kun je er ook nog bepaalde conditionele acties aan koppelen.
En daarbij is het ook weer beter om dit in een subroutine te doen. Hoef je het maar één keer te programmeren, kun je er op verschillende plekken gebruik van maken en heb je in je programma niet de overhead van 2x (of vaker) de LOOKUP en de string-opslag.
jorim23
Murphy's Law: Anything you try to fix will take longer and cost more than you think.
Zou ik dan beter zoiets kunnen maken als:
Dim Nummer as BYTE
Nummer = lookup inkey,["123*456E789#*0#"]
;Programma
While 1=1
print Nummer
WendFantomaz
Ik moet hier weer vaker komen... Wat kun je zo'n forum als deze gaan missen. :-)
Nee, je moet die inkey in de loop zetten.
Anders leest hij hem maar een keer uit en komt hij daarna in de loop. (een fractie van een seconde, nadat je de PIC opstart)
Dim Nummer as BYTE
Programma:
While 1=1
Nummer = lookup inkey,["123*456E789#*0#"]
print Nummer
Wend
Ik weet dat dit lijkt op hoe je het eerst had (print inkey etc), maar wat Picsel ook al aanhaald, kun je de variabele eerst nog bewerken.
Ik weet dat dat je bedoeling is. 
Je kunt dan in die loop die variabele controleren en kleine subloopjes maken.
Daarin kun je tellen hoevaak de toets ingedrukt wordt waardoor je weer een ander karakter kunt gebruiken.
Bij toets "2" dus:
1x = A
2x = B
3x = C
4x = 2