Använda en Arduino med en N64 controller (4 / 5 steg)
Steg 4: Arduino koden på djupet
Bitarna skickas till och från N64 controller på ena sladden gränssnittet är kodade i 4 µs brett pulser. En '0' är 3 µs låg och 1 µs hög. En '1' är 1 µs låg och 3 µs hög.
Arduino koden i metoderna N64_send eller N64_receive använder mycket noggrant tidsinställda kod skriven av Andrew Brown till bit-bang data linjen att kommunicera med registeransvarige. NOP block används vänta lämpligt belopp på µs innan röstningen fodra av skickar data.
0x00 skickas till registeransvarige vid start, och sedan efter att kommandot bara används är 0x01 frågan för controller-enhetens status.
Data-kodning
När data tas emot efter en 0x01, ankommer det som 16 bitar av knappinformation och 16 bitar av analog styrspak information. Data skulle se ut 44000000000000400044440044000444.
Formatet på bitarna är: A, B, Z, Start, Dup, Ddown, Dleft, Dright, 0, 0, L, R, kopp, Cdown, klyfta, Cright + 16 bitar av analog pinne ställning.
Metoden translate_raw_data() går igenom 32 bitar, att infoga dem i struct N64_status. De första 16 bitarna är enkel 1 eller 0, men de senaste 16 är översatta till ett heltal ungefärligt i intervallet (-80, 80) av
för (jag = 0; jag < 8; i ++) {
N64_status.stick_x | = N64_raw_dump [16 + jag]? (0x80 >> jag): 0;
}
Efter data är i detta enkla formulär, är det lätt att göra vad du vill med den. I det här fallet helt enkelt skickas över den seriella porten i metoden loop() som en sträng av binära data med två heltal för x och y värden.
Data som skickas över den seriella porten kan se ut: 0400000000000400 63-67 vilket skulle innebära att två knappar var pressade och vänsterspaken var på 63,-67.