Teet
hoeba hoeba
Beste mensen,
Ik heb mijn eerste progje geschreven voor de 28A picaxe chip, en een ledje enigszins kunnen dimmen. (zie quicktime filmpje en progje) Ik ben er inmiddels achter (he he) dat PWM daar veel geschikter voor is maar wou nog een paar dingetjes - voor de oefening - met de 28A chip doen voordat ik hem er uit wip en de 18X (die PWM aan kan) in het bordje stop.
Heb het progje bijvoorbeeld wat 'mooier' (kleiner en zo) gemaakt met de zojuist geleerde termen, (zie hier maar bij controleren (syntax) stopt hij op de regel waarin ik beschrijf dat 'ie moet doen:
pause ( 10 - dimstand ) 'waarin dimstand een symbol voor een variabele is
Hoe ik het ook formuleer de notatie (10-variabele) tussen haakjes werkt niet.
Wie weet hoe wel?
Alvast dank,
Teet
Hi Teet,
Ik heb gezien op het PICAXE forum dat je een compatibiliteitsprobleem had met de Mac, en dat dit nu opgelost is. Mooi zo, dit was gelijk goede informatie voor andere Mac gebruikers
Wat betreft het programma: Als je een opdracht met een expressie daarin (zoals in jouw geval " 10 - dimstand " ) wilt uitvoeren, moet je de evealuatie van de expressie eerst apart doen en het resultaat in een variable zetten (met het LET statement). Daarna deze nieuwe variable gebruiken in het pause statement. In jouw geval zou het dus zoiets worden als
LET pauzeduur = 10 - dimstand
PAUSE pauzeduur
Het LET statement is overigens niet strikt noodzakelijk, je kan ook direct
pauzeduur = 10 - dimstand
schrijven.
Deze aanpak is nodig vanwege de relatief eenvoudige implementatie van picaxe BASIC; je kunt niet direct expressies evaluaren in een commando. Echter geen ernstige beperking, gewoon eerst LET uitvoeren met een aparte variabele
Groet,
Jurjen
Ik denk overigens dat het laaste programma niet zal gaan werken, omdat je iets doet dat tegen algemene programmeerregels is:
* Via de regel " if knop = 0 then aan " spring je naar een regel midden in een ander for-next loop. Dit kan niet zo maar, teller is dan niet gedefinieerd omdat het strikt genomen een locale variable voor de loop is (waarschijnlijk gelijk georden aan 0, maar strikt genomen ongedefinieerd en kan dus dan elke waarde hebben). Je kunt wel uit de for-next loop springen (omdat tussentijds een gewenste conditie bereikt is bijvoorbeeld). Wil je eigenlijk misschien naar het begin van de for-next lus springen?
Met vriendelijke groet,
Jurjen Kranenborg
[Bericht gewijzigd door kranenborg op ]
Teet
hoeba hoeba
Op 10 december 2005 23:34:25 schreef kranenborg:
...
Ik heb gezien op het PICAXE forum dat je een compatibiliteitsprobleem had met de Mac, en dat dit nu opgelost is. Mooi zo, dit was gelijk goede informatie voor andere Mac gebruikers
Ja, lekker dat het nu werkt en inderdaad met die reden even gemeld, ook op het picaxe forum. Altijd fijn om een probleem zo verholpen te hebben doordat anderen je al voor zijn gegaan.
...
LET pauzeduur = 10 - dimstand
PAUSE pauzeduur
Geweldig Jurjen. Mange Tak! (poging tot zweeds)
Kan dit LET pauzeduur ook aan het begin van het programma staan of komt dat meestal vlak voor het gebruik er van?
Ik denk overigens dat het laaste programma niet zal gaan werken, omdat je iets doet dat tegen algemene programmeerregels is:
* Via de regel " if knop = 0 then aan " spring je naar een regel midden in een ander for-next loop. Dit kan niet zo maar, teller is dan niet gedefinieerd omdat het strikt genomen een locale variable voor de loop is (waarschijnlijk gelijk georden aan 0, maar strikt genomen ongedefinieerd en kan dus dan elke waarde hebben). Je kunt wel uit de for-next loop springen (omdat tussentijds een gewenste conditie bereikt is bijvoorbeeld). Wil je eigenlijk misschien naar het begin van de for-next lus springen?
Ja! Helemaal gelijk! label 'aan' moest ook vóór de for...next teller-loop staan! Ik heb het al veranderd in het progje.
Werkt de for...next DIMSTAND loop denk je wel? Een for...next om een for...next loop heen zou wel moeten kunnen, denk ik, niet?
Groet en nogmaals tusent tak!
Teet
Hoi Titus,
Wat betreft de plaats van het LET statement: Een BASIC programma wordt altijd regel voor regel afgewerkt, en dus is het gebruikelijk het LET statement vlak voor de plek te zetten waar de nieuwe variable gebruikt wordt. Als je dit niet doet wordt de kans op fouten snel groot doordat ergens tussenin de veriabele aangepast wordt oid.
Ik heb wat moeite het programma direct te begrijpen, dus ik kan niet zeggen of het zou werken. Wat betreft for-next in een for-next; geen enkel probleem.
Ik krijg uit jouw eerdere vragen de indruk dat je nog weinig of geen programmeer-ervaring in een programmeertaal als BASIC (of assembler, C, etc. etc.) hebt; ik kan je aanraden eerst met een aantal simpele programmas te rommelen en deze stukje bij beetje uit te breiden (naar bijvoorbeeld de gewenste dimfunctie). Op deze manier krijg je inzicht in het gebruik van de diverse programmeerstructuren zoals FOR..NEXT, IF..THEN..ELSE, LOOKUP/DOWN etc. etc. Bovendien kun je dan makkelijk de diverse modules van de picaxe leren kennen (ADC, I2C, PWM, count, readtemp etc.) Dit zal je later veel voordeel op gaan leveren. Begin zeer simpel (lampje aan uit via toets-druk) en breid dan langzaam uit, altijd met een concrete doel voor ogen ...
Ik hoop dat dit niet al te belerend was ...
Met vriendelijke groet,
Jurjen Kranenborg
http://www.kranenborg.org/ee/picaxe
Teet
hoeba hoeba
Nee, niet te belerend. Wel goed. Ik heb de eerste handleiding (73 blz) al helemaal doorgewerkt. Net met deel 2 begonnen, waar meer op de programmeertaal an sich wordt ingegaan.
Groet,
Teet