Étape 4: Arduino Code en profondeur
Les bits envoyés à et de la N64 contrôleur sur l’interface d’un fil sont codés en impulsions large 4 µs. Un « 0 » est 3 µs de basse et haute de 1 µs. Un « 1 » est 1 µs faible et élevé 3 µs.
Le code de l’Arduino dans les méthodes N64_send ou N64_receive très soigneusement minutée Assemblée code rédigé par Andrew Brown, permet de bit-bang la ligne de données pour communiquer avec le contrôleur. NOP blocs sont utilisés pour attendre les montants appropriés de µs avant la ligne d’envoyer des données d’interrogation.
Au démarrage, 0 x 00 est envoyé au contrôleur, et puis après ça, la seule commande utilisée est 0 x 01 pour demander état les services du contrôleur.
Encodage des données
Lorsque les données sont reçues après un 0 x 01, il arrive que 16 bits d’information de bouton et de renseignements de joystick analogique 16 bits. Les données ressemblerait à 44000000000000400044440044000444.
Le format des bits est: A, B, Z, Start, Dup, Ddown, Dleft, Dright, 0, 0, L, R, coupe, Cdown, fente, Cright + de la position du stick analogique 16 bits.
La méthode translate_raw_data() traverse les 32 bits, en les insérant dans le struct N64_status. Les 16 premiers bits sont simple 1 ou 0, mais les 16 derniers sont traduites en un entier environ dans l’intervalle (-80, 80), par
pour (i = 0; i < 8; i ++) {}
N64_status.stick_x | = N64_raw_dump [16 + j’ai] ? (0 x 80 >> j’ai): 0 ;
}
Une fois les données dans ce formulaire, il est facile de faire ce que vous voulez avec elle. Dans ce cas, il est simplement envoyé par le port série dans la méthode loop() sous forme de chaîne de données binaires avec deux entiers pour x et y les valeurs.
Les données envoyées sur le port série pourraient ressembler : 0400000000000400 63 -67 , ce qui signifierait que deux touches ont été enfoncées et le manche était à 63 -67.