Arduino och Touchpad Tic Tac Toe (3 / 8 steg)
Steg 3: Adressering ledde matrisen
Tic tac toe koden behöver vi för att kunna lagra följande information om lysdioder:-om en lysdiod är tänd eller inte
-lyser, oavsett om det är röda eller gröna
Ett sätt att göra detta är att lagra staten i ett 9-cells matris, med tre siffror för att företräda staten (0 = av, 1 = rött, 2 = grön på). Varje gång vi måste kontrollera att staterna LED, till exempel, för att kolla om det är ett win villkor, vi måste du gå igenom matrisen. Detta är en fungerande metod, men ganska clunky.
En effektivare metod skulle vara att använda två grupper av nio bitar. Den första gruppen av nio bitar lagras på / av status för lysdioder, samt den andra gruppen av nio bits färg. Sedan blir manipulera LED staterna helt enkelt en fråga om bit aritmetiska och skiftande.
Här är ett praktiskt exempel. Låt oss säga vi Rita vårt tic tac toe nät grafiskt och först använda 1: or och 0: or för att representera på / av status (1 är på, 0 är avstängd):
000
000 = matrix med nedre vänstra LED lyser
100
100
010 = matrix med diagonal LED lyser
001
Om vi räkna upp cellerna från nederst vänstra, kan vi skriva ovan representationer som en serie bitar. I det första fallet, som skulle vara 100000000, och i det andra fallet, skulle det vara 001010100. Om vi tänker på dessa som binära representationer, kan sedan varje serie bitar kondenseras till en enda nummer (256 i det första fallet, 84 i det andra fallet). Så istället för att använda en matris för att lagra tillståndet i matrisen, kan vi bara använda ett enda nummer!
På samma sätt kan vi representerar färgen på lysdioden på samma sätt (1 är röd, 0 är grön). Låt oss först anta alla lamporna är tända (så på / av status representeras av 511). I matrisen nedan representerar sedan färg staten av lysdioder:
010 grönt, rött, grönt
101 röd, grön, röd
010 grönt, rött, grönt
Nu, när de visar ledde matrisen, vi har bara att gå igenom var och en av bitarna, först i tillståndet på / av, och sedan i den färg där. Till exempel, låt oss säga vår-off är 100100100, och färgen är 010101010. Här är vår algoritm för att lysa upp ledde matrisen:
Steg 1. Göra en bitvis tillägg av på / av staten med en binär 1 (dvs lite maskering).
Steg 2. Om det är sant, lyser LED. Gör nu en bitvis tillägg av färg staten med en binär 1.
Steg 3. Om det är sant, tänds den röda lysdioden. Om det är falskt, tänds den gröna lampan.
Steg 4. Skifta både på-av staten och färg stat, en bit till höger (dvs lite skiftande).
Steg 5. Upprepa steg 1-4 tills alla nio bitar har lästs.
Observera att vi fyller matrisen bakåt - vi börjar med cell 9, sedan gå tillbaka ner till cell 1.
Också, on-off och färg staterna lagras som ett osignerat heltalstyp (word) i stället för datatypen heltal. Det beror i lite skiftande, om vi inte är försiktiga, vi kanske inadvertenly ändra tecken på variabeln.
Bifogat är koden för matrisen LED-belysning.