Dan heb je er omheen waarschijnlijk iets niet goed staan.
Ik heb letterlijk copy/paste gedaan vanuit de IDE en dit compileert beslist!
We hebben het toch over de Proton+ PICBASIC compiler?

[Edit]
Ik vermoed dat je in delen hebt gekopieerd en dat 'Select Toets' is weggevallen.
Dan krijg je die melding.

You don't fool me.
Ik ken mijn pappenheimers >:)

Ik krijg nu tijdens het compilen een foutmelding.
List index out of bounce(1)
Kan dat komen omdat ik een demoversie gebruik?

bounce? Staat die te springen dan? Ik neem aan bounds. Kan google je daar niets over vertellen, daar geloof ik niets van.

Nou vooruit dan maar. Je gebruikt een lijst met een aantal elementen. Die lijst heeft een bereik. Bijvoorbeeld van 1 t/m 3. Jij kiest vervolgens het element op index 4. Index 4 valt dan buiten het bereik van de lijst. Gevolg index is buiten bereik (List index out of bounds).

Overigens gaat het waarschijnlijk niet lukken om wat je wilt, te stoppen in maar 50 regels code.
(Tenzij die regelbeperking er inmiddels uit is gehaald.)

Ik ben even aan het stoeien geweest met de code maar ik kom ergens nog niet helemaal uit. Ik heb bij een aantal nummers meer dan 8 tekens staan en bij een aantal mindewr dan 8. Als ik het nummer indruk die minder dan 8 karakters heeft, moet ik net zo lang door drukken voordat hij weer bij het eerste karakter uit kom.
Ook blijf ik nog steeds het probleem houden dat de letters buiten het beeld komen te staan.
Verder heb ik ook, als ik de 4 indruk, case 3 overslaat en gelijk naar case 4 gaat. Terwijl ik bij de 4 eigenlijk case 3 hoor te krijgen.

Ik zou de hoofdletters achterwege laten.
Misschien kun je nog een voorwaarde achter een andere toets (ster of hekje?) verwerken die tussen uper en lower case switched.

Als ik bij de volgende code, de Aantalindrukken variabel wil maken(dus als ik maar 2 tekens heb in een Case(of meer), dat hij na de laatste teken weer bij de eerste weer bij de eerste begint), hoe moet ik dat dan doen?

Moet ik dan iets veranderen bij: aantalindrukken>9??


	Dim Toets           As Byte
    Dim Teken           As Byte
    Dim AantalIndrukken As Byte
    Dim VorigeToets     As Byte
    Dim AantalTekens    As Byte
	
	While 1 = 1
        GoSub OphalenToets   
       If Toets = VorigeToets Then
            Inc AantalIndrukken
            If AantalIndrukken > 9 Then AantalIndrukken = 0
        Else
            Inc AantalTekens
            AantalIndrukken = 0
            VorigeToets = Toets            
        End If
        GoSub VertaalToetsNaarTeken
        GoSub TekenOpLCD
    Wend 
	
	OphalenToets:
    Repeat
        Toets = inkey, 
       If Toets <> 16 Then
            DelayMS 50
            While InKey <> 16: Wend
            DelayMS 10
        End If
    Until Toets <> 16
    Return        
 
 VertaalToetsNaarTeken:
        select Toets 
            case 0:
				teken = Lookup Aantalindrukken, [",.?:!()1"]
            Case 1:  
                teken = LookUp AantalIndrukken,["abcABC2-"]        
            Case 2:  
                teken = LookUp AantalIndrukken,["defDEF3="]
            Case 3:
                teken = Lookup Aantalindrukken,["ghiGHI4"]
            case 4:
                teken = LOOKUP Aantalindrukken,["jklJKL5"]
            Case 5:
                teken = Lookup Aantalindrukken,["mnoMNO6"]
            case 6:
                teken = Lookup Aantalindrukken,["pqrsPQRS7"]            
            case 7:
                teken = Lookup Aantalindrukken,["tuvTUV8"]
            case 8:
                teken = Lookup Aantalindrukken,["wxyzWXYZ9"]
            case 9:
                teken = Lookup Aantalindrukken,["*%^&+/\"]
            case 10:
                teken = Lookup Aantalindrukken,[" 0"]
            case 11:
                teken = Lookup Aantalindrukken,["#_<>;'|{}"]
    EndSelect
    Return

TekenOpLCD:
    Print At 2,AantalTekens,Teken
    Return

Ik weet niet of je in een lookup ook een loopje kunt bouwen of een voorwaarde kunt instellen.
Je zo dan, wanneer er geen waarde wordt herkend, een return in kunnen bowen die weer terug gaat naar het oorspronkelijke programma.

Ik ken de lookup niet uit ervaring en zou hem daarom ook niet gebruiken. ;)
"Wat de boer niet kent", zeg maar...

Ik zou het anders doen...
(nogmaals, vanwege de onkunde met lookup)


[inkey lees gedeelte in variabele "toets"]
toetsen:
If toets = 2 then 
 inc toets2
  tts2:                      ;label tbv loop
  select toets2
  case 1:
   print at x,y, "a" 
  case 2:
   print at x,y, "b" 
  case 3:
   print at x,y, "c"
  case 4:
   print at x,y, "A"
  case 5:
   print at x,y, "B"
  case 6:
   print at x,y, "C"
  case 7:
   print at x,y, "1"
  elsecase (ik weet niet meer precies hoe die code heette)
   toets2 = 1              ;als de waarde wat anders is dan 1 tm 7 dan "toets2" resetten en terug naar tts2 loop
   goto tts2
Endif
goto toetsen

Dit dan voor elke toets doen
Je komt nadat je een toets hebt ingedrukt, in het subloopje van die toets.
Je kunt daar pas uit wanneer een van de 7(in dit geval) karakters is gekozen.

Ik weet dat er hier en daar nog wat aan schort.
BV hoelang je de tijd hebt om een toets in te drukken tot hij geselecteerd blijft.
Tis een opzetje...

Maak je routine universeel door een array te gebruiken die je in de routine volschrijft en in het hoofdprogramma of bovenliggende routine uitleest.

Je programma begint nu aardig complex te worden, tijd voor een blokschema en het indelen in subroutines.

Dat snap ik niet helemaal denk ik.
Als ik een array gebruik wordt het dan niet net zo onoverzichtelijk?

Ik heb net in de help gelezen over array's maar ik kom er niet helemaal uit.
Als ik t tot nu toe begrijp, moet ik een array aan maken met alle mogelijke karakters die onder de cijfers komen te staan.
Die moet ik dan verwerken in een Select..case..EndSelect. toch?
Die moet ik dan weer verwerken in een Gosub.
Of raak ik nou helemaal de weg kwijt?

Hoe en wat bedoel je met blokschema's? Ik ken die alleen maar uit mijn schoolboeken als zijnde waarheidstabellen.

Op 22 oktober 2007 22:43:20 schreef jorim23:
Dat snap ik niet helemaal denk ik.
Als ik een array gebruik wordt het dan niet net zo onoverzichtelijk?

Nee, die gebruik je als tijdelijke opslag, met goede benaming heel overzichtelijk te houden.

Ik heb net in de help gelezen over array's maar ik kom er niet helemaal uit.
Als ik t tot nu toe begrijp, moet ik een array aan maken met alle mogelijke karakters die onder de cijfers komen te staan.
Die moet ik dan verwerken in een Select..case..EndSelect. toch?
Die moet ik dan weer verwerken in een Gosub.
Of raak ik nou helemaal de weg kwijt?

Ik vermoed het.
Je hebt je scanroutine, daarna stopt als het goed is de uitkomst in een array, die array verwerk je vervolgens.

Hoe en wat bedoel je met blokschema's? Ik ken die alleen maar uit mijn schoolboeken als zijnde waarheidstabellen.

AKA Vloeidiagrammen of Flowcharts.

Voorbeeldje:

Stelling: Je wilt via een toetsenbord tekst in het geheugen van een uC.

Routines:
-inscannen
-in geheugen zetten
-uit geheugen lezen
-op display tonen

Een hoofdroutine zorgt voor housekeeping, de schoonmaak, scant de controletoetsen en stuurt het programma naar de juiste subroutines.

Inlees toets: inscannen + in geheugen zetten +display
Uitlees toets: uit geheugen lezen + display

Zo ga je het hele programma in pseudocode beschrijven.


Tekst op LCD
-------------------------------------


		--------------------
		| Nummer inscannen.| <----------------
		--------------------		     |
			|			     ^
			|			     |
			| 			     |
			|			     |
	   ------------------------------ 	     |
           | Omzetten naar eerste teken.|	     |
	   ------------------------------	     |
			|			     ^
			|Vaker dan 1 keer ingedrukt? |
		    Nee | Ja			     |	
		-------------------		     |
		| 		  |		     |
	-----------------       -------------------  |
	|Andere toets   |	| Volgend karakter|  | 
	|ingedrukt?     |	| weergeven.	  |  ^
	|		|	---------------------|
	|		|Ja			     |
	|		|--|			     |
	-----------------  |    		     |	 
	   |		  -------------------------  |
	   |Nee		  | 1 karakter opschuiven |  |
	   |		  | en nieuwe karakter    |  |
	---------------   | opzoeken.		  |  |
	| 1 plaats    |   -------------------------  ^
	| opschuiven. |		     |		     |
	---------------------->------------->---------	

Je bedoeld zoiets als dit dus? Of is het te kort/weinig?

Oke, nu heb ik het volgende.
Ik heb een select..case..endselect blok gemaakt.
Netjes zoals het hoort(volgens mij), met de blokhaakjes enzo.
Nu krijg ik de volgende foutmelding: Square opening bracket missing!

Rara, hoe kan dat.


select BepaaldeToets 
            case 0:
				Toets = Lookup Teken, [ 52,53,54,55,76,77,81,82,72,73,85 ], " "
            Case 1:  
                Toets = LookUp Teken,  [ 0,1,2,26,27,28,86 ], " " 
'etc.

Edit:
Foutje opgelost.

Waarschijnlijk zal ik wel weer iets stoms hebben gedaan, maar ik krijg in mijn programmatje alleen maar 1 zwart blokje te zien.
Ik krijg geen letter, geen spaties etc.

Dit is de link voor de hele code.
[url]http://www.uploadarchief.net/files/download/oefenen inkey.bas[/url]

Er staat trouwens in de code dit:

 If AantalIndrukken >9 Then AantalIndrukken = 0

Ook dat heb ik nog niet uitgevogeld hoe ik dus van die beperking af kom. Ik heb t al geprobeerd om de 9 te veranderen in de arraynummers, met en zonder blokhaken, maar dat wil niet lukken

[Bericht gewijzigd door jorim23 op (34%)]

Weet iemand hoe dat kan?

Om hier toch maar op door te gaan(en hopende dat er nog mensen gemotiveerd genoeg zijn om me te helpen), wil ik verder door gaan met t probleem.

Ik heb er toch maar voor gekozen om niet de array's te gebruiken omdat ik die echt niet werkend krijg. Ik heb van alles geprobeerd maar t lukt me gewoon niet. Ik ben dus maar door gegaan met de volgende code die wel werkt(niet perfect maar daar kom ik zo wel op terug):

Dim Toets           As Byte
    Dim Teken           As Byte
    Dim AantalIndrukken As Byte
    Dim VorigeToets     As Byte
    Dim AantalTekens    As Byte

delayms 500                               
Cls

	While 1 = 1
        GoSub OphalenToets   
        GoSub Inc_teken
        GoSub VertaalToetsNaarTeken
        GoSub TekenOpLCD
    Wend 
	
	OphalenToets:
    Repeat
        Toets = inkey, 
       If Toets <> 16 Then
            DelayMS 50
            While InKey <> 16: Wend
            DelayMS 10
        End If
    Until Toets <> 16
    Return  

Inc_teken:	
If Toets = VorigeToets Then
            Inc AantalIndrukken
        Else
            Inc AantalTekens
          If AantalIndrukken > 6 Then AantalIndrukken = 0
            VorigeToets = Toets            
        End If	      
 
 VertaalToetsNaarTeken:
        select Toets 
            case 0:Select Toets          
        Case 0:   
            Teken = LookUp AantalIndrukken,[".,?!<>@"]        
        Case 1:  
            Teken = LookUp AantalIndrukken,["abcABC2"]        
        Case 2:  
            Teken = LookUp AantalIndrukken,["defDEF3"]        
    EndSelect
    Return
    
TekenOpLCD:
    Print At 2,AantalTekens,Teken
    Return 

Ik krijg nu netjes alle letters maar, als ik de eerste karakter heb neergezet en ik wil de 2de opzoeken(dus bijvoorbeeld de H staat goed en de 2de karakter is a), overschrijft hij de eerste karakter. Ik vind dit best wel raar omdat hij dus ziet dat ik een ander knopje indruk(wat dus zou betekenen dat hij een plaats moet opschuiven).

Verder zou ik dus ook niet weten hoe ik van die beperking af kom(If AantalIndrukken >9 Then AantalIndrukken = 0) en dat hij pas weer naar de eerste toe gaat als ik bijvoorbeeld bij case 0, 8 keer op de 1 druk en dat ik dan weer de . krijg.

Willen jullie me toch nog een keer helpen. Ik weet dat ik veel vraag en dat ik het eigenlijk zelf moet oplossen maar ik heb al vanalles geprobeerd maar t lukt me niet.

JE bent weer goed op weg...
Ik zal morgen eens met je mee proberen te kijken, Jorim...

Als ik tijd heb...
Kleine probleempjes lijkt me.

Jij ook bedankt Henry S.