http://avr.tavir.hu/modules.php?name=Fo ... forum&f=23
Ez a standard Arduino fórum...
Itt a programhoz pár kiegészítés (Fontos! Ez a haladó szint és az Arduino jónéhány belső szabályát áthágod! Keveredik a sima C nyelv és az Arduino nyelvezet!)
Számolj I=1-től 8-ig, úgy hogy minden lépésnél az i-t eggyel növeled. Ha I=8, akkor léphetsz tovább.
Minden egyes kivezetés 3 ún. regiszterrel bír:
DDRx - Data Direction Register: azaz a láb ki/bemenet. És minden egyes ilyen regiszter DDRD (D port (lábcsoport) regisztere, mely az Arduinonál a D0...D7-et jelenti), DDRB (B port regisztere: Arduino D8...D13 es a D14/D15 nincs kivezetve a tokon kívülre)
PINx: Adott lábcsoport milyen szinten van (kívülről lehúzva vagy felemelve H szintre)
PORTx: Adott lábcsoport ha kimenet, akkor ez mondja meg, hogy magas vagy alacsony szinten legyen. Ha a láb bemenet, akkor a belső felhúzóellenállás.
FONTOS!Arduino alatt _TILOS_ használni, erre a DigitalWrite() [kb. PORTx] / DigitalRead() [PINx] és a pinMode() [DDRx] való [zárójelben, hogy melyiknek mi felel meg. DE csak komplett lábcsoportra értelmezhetőek a PINx, PORTx és DDRx utasítások!]
d = d<<1; // tanuloknak: 1 bittel balra tolas, azaz 2-vel szorzas
Azaz ha a D BINÁRIS értéke:
00100100, akkor a d<<2 esetén balra tolom, így a d értéke:
01001000 lesz. A felső bit kiesik és alsóban bejön a 0.
A d=d<<1 pedig ennek az ellentéte. Az 1 azt mondja, hogy 1 ilyen léptetést kell végezni.
Az if utasítás attól függően, hogy a paramétereként megadott változó/művelet vagy műveletsor értéke igaz vagy hamis, attól függően megy tovább a normál vagy az else ágra. A debug értéke IGAZ esetén lehet:
1, true
minden más: HAMIS
irany=!irany
Ez azt jelenti, hogy irany= NOT irany. Azaz legyen az ellenkezője.
Csalóka, mert ha az értéke 0 és char (8 bit / 1 byte) definíciójú, akkor (ha jól emlékszem), minden egyes _bit_ negatív lesz. Azaz ha irany=0000.0000, akkor !irany= NOT irany = 1111.1111
Szerk: HIBÁS a leírásom! Lentebb 2 hsz-l javítva!