v20140402
02 < index > 04
terug naar 03

GPIO aansturen onder RISC OS

Deel 03, GPIO als uitgang voor een LED

LED oplossingen

Extra oefeningen
Probeer de volgende variaties en uitbreidingen te programmeren om (een) ledje(s) aan te sturen

Deze programma's blijven eeuwig doorgaan, dus om te stoppen
- gewoon het programma venster sluiten of
- klikken op OS-icoontje ("Tasks" worden weergegeven) >> met "menu-klik" op een Task >> in het lijstje bij "Task ..." opzij gaan en het programma quitten.

Werkende versies van deze oefeningen zitten in programs.zip met een overzicht op de webpagina programma's.

top

Pulsled
Laat het ledje, aangesloten op GPIO 17, heel eventjes oplichten
Eigenlijk snel opgelost
- "!flashled" kopieren met de nieuwe naam "!pulsled"
- de "aan-tijd" te verkleinen (groen gekleurd)
- en evt. de "uit-tijd" te verlengen
RISC OS, ARM BASIC
Dit is enkel de !RunImage uit het programma !Pulsled

REM is dit een Raspberry Pi ?
SYS "GPIO_GetBoard" TO board%

IF board% = 11 OR board% = 12 THEN
   PRINT "Dit is een Raspberry Pi ";
   IF board%=11 THEN PRINT "A"
   IF board%=12 THEN PRINT "B"

   REM de waarde achter pin% is het GPIO pin nummer
   pin%=17 : PRINT "GPIO pin nummer is "+STR$(pin%)

   REM is GPIO pin reeds een uitgang ?
   SYS "GPIO_ReadMode",pin% TO mode%
   IF mode% <> 1 THEN
       SYS "GPIO_WriteMode",pin%,1
       PRINT "GPIO pin is nu een uitgang."
   ELSE
       PRINT "GPIO pin was al een uitgang."
   ENDIF

   REM do this forever
   REPEAT
       SYS "GPIO_WriteData",pin%,1
       t%=TIME:REPEAT UNTIL TIME-t%>10
       SYS "GPIO_WriteData",pin%,0
       t%=TIME:REPEAT UNTIL TIME-t%>190
   UNTIL FALSE

ENDIF
END

top

Varled
Laat de snelheid van het knipperen van het ledje, aangesloten op GPIO17, varieren (idee Karel V.) We kunnen dit oplossen door
RISC OS, ARM BASIC
Dit is enkel de !RunImage uit het programma !Varled

REM is dit een Raspberry Pi ?
SYS "GPIO_GetBoard" TO board%

IF board% = 11 OR board% = 12 THEN
   PRINT "Dit is een Raspberry Pi ";
   IF board%=11 THEN PRINT "A"
   IF board%=12 THEN PRINT "B"

   REM de waarde achter pin% is het GPIO pin nummer
   pin%=17 : PRINT "GPIO pin nummer is "+STR$(pin%)

   REM is GPIO pin reeds een uitgang ?
   SYS "GPIO_ReadMode",pin% TO mode%
   IF mode% <> 1 THEN
       SYS "GPIO_WriteMode",pin%,1
       PRINT "GPIO pin is nu een uitgang."
   ELSE
       PRINT "GPIO pin was al een uitgang."
   ENDIF

   REM variabelen een waarde geven
   wt%=100
   getal%=10
   wtmax%=200
   wtmin%=10
   REM do this forever
   REPEAT
       SYS "GPIO_WriteData",pin%,1
       t%=TIME:REPEAT UNTIL TIME-t%>wt%
       SYS "GPIO_WriteData",pin%,0
       t%=TIME:REPEAT UNTIL TIME-t%>wt%
       REM wachttijd aanpassen, controleren en evt. tegesteld getal nemen
       wt%=wt%+getal%
       IF wt% > wtmax% THEN getal%=(NOT getal%)+1
       IF wt% < wtmin% THEN getal%=(NOT getal%)+1
   UNTIL FALSE

ENDIF
END

top

Wisselled
Sluit 2 ledjes aan en laat deze ledjes afwisselend oplichten

top

Loopled
Sluit drie (of meer) ledjes aan en laat deze ledjes in volgorde van links naar rechts (en evt. in beide richtingen) branden, dus een looplicht maken.

top

Verkeerlicht
Sluit drie kleurledjes aan en laat deze ledjes branden volgens een verkeerslicht

top

. . . . geef je ideeen maar door . . .

Wordt vervolgd.
Frank RISCOS.be