Jeden zákazník vznesl dotaz na: „… model světelné křižovatky. Pro přepínání režimů chodu semaforů plánuji použít otočný přepínač. Na přepínač přivedu napětí a pomocí různých odporů na jednotlivých výstupech ho snížím, takže každá poloha bude mít jiné napětí. Toto napětí chci číst jedním vstupem na PICAXE a podle toho řídit chod semaforů. Chci se zeptat, zda-li je toto realizovatelné…“
To samozřejmě realizovat lze, podle následujícího zapojení bude každé poloze přepínače odpovídat jiné napětí na analogovém vstupu Picaxe. V první poloze (A1) bude přibližně 3/4 Vcc, v druhé poloze 1/2 Vcc, v třetí poloze 1/4 Vcc a ve čtvrté poloze bude vstupní napětí nulové. Pokud se přepínač zrovna bude nacházet v mezipoploze, takže ani jeden z kontaktů A1-A4 nebude spojen se společným kontaktem A, bude na vstupu napětí blízké Vcc.
I když je tento okamžik z pohledu obsluhy velmi krátký, může se stát, že procesor načte stav přepínače v nevhodný moment. Je potom na úvaze programátora, jestli v takovém případě pozdrží program, dokud se neobjeví napětí odpovídající některé přípustné hodnotě, nebo jestli například ignoruje tuto informaci a program se bude chovat podle poslední známé polohy přepínače.
K načtení hodnoty napětí použijeme příkaz adcread, který převádí měřené napětí v rozsahu 0-Vcc na číslo 0-255. Pak jednotlivým polohám přepínače od první ke čtvrté budou odpovídat hodnoty 191, 128, 64 a 0. Při čtení analogového vstupu je třeba připustit určitý rozptyl načtené hodnoty, daný výrobní tolerancí a teplotní závislostí jednotlivých součástek, včetně mikrokontroléru Picaxe. Pro 8 bitový převod a 1% rezistory můžeme připustit rozmezí řekněme ±8 hodnot A/D převodníku, tedy v první poloze 183-199, v druhé poloze 120-136, ve třetí poloze 56-72 a ve čtvrté konečně 0-8, protože zápornou hodnotu nemůže převodník poskytnout. V testovacím programu se vypisuje zjištěná poloha přepínače na terminálu v počítači (menu Picaxe | Terminal), a pro kontrolu též naměřená hodnota z příkazu adcread.
' ' Switch2Analog ' #picaxe 08m2 ' ' Pins ' symbol swpin=c.4 ' ' constants ' symbol A1low=183 symbol A1high=199 symbol A2low=120 symbol A2high=136 symbol A3low=56 symbol A3high=72 symbol A4low=0 symbol A4high=8 ' ' variables ' symbol swad=b27 Init: 'Při použití X2 je nutno nastavit příslušný pin jako analogový - příkaz adcsetup Main: do readadc swpin,swad if swad>=A1low and swad<=A1high then sertxd("Stav A1, A/D=",#swad,13,10) endif if swad>=A2low and swad<=A2high then sertxd("Stav A2, A/D=",#swad,13,10) endif if swad>=A3low and swad<=A3high then sertxd("Stav A3, A/D=",#swad,13,10) endif if swad>=A4low and swad<=A4high then sertxd("Stav A4, A/D=",#swad,13,10) endif pause 2000 loop end