2014-10-07 20:13:04 -04:00
|
|
|
|
|
|
|
#include "N64Controller.h"
|
|
|
|
#include <Arduino.h>
|
|
|
|
|
2017-05-14 02:42:09 -04:00
|
|
|
N64Controller::N64Controller(unsigned char serialPin) {
|
|
|
|
if(serialPin > 13)
|
|
|
|
serialPin = 2;
|
2014-10-07 20:13:04 -04:00
|
|
|
// Communication with N64 controller controller on this pin
|
|
|
|
// Don't remove these lines, we don't want to push +5V to the controller
|
2017-05-14 03:16:42 -04:00
|
|
|
digitalWrite(serialPin, LOW);
|
|
|
|
pinMode(serialPin, INPUT);
|
2017-05-14 05:06:06 -04:00
|
|
|
|
|
|
|
// 0-7: DDRD, 8-13: DDRB
|
|
|
|
bool isDDRD = (serialPin / 8) == 0;
|
|
|
|
char n64_pincode = 0x01 << (serialPin % 8);
|
|
|
|
|
|
|
|
if(isDDRD) {
|
2017-05-14 03:16:42 -04:00
|
|
|
interface = new N64Interface_PIND(n64_pincode);
|
2014-10-07 20:13:04 -04:00
|
|
|
} else {
|
2017-05-14 03:16:42 -04:00
|
|
|
interface = new N64Interface_PINB(n64_pincode);
|
2014-10-07 20:13:04 -04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-05-14 03:16:42 -04:00
|
|
|
void N64Controller::begin() {
|
|
|
|
interface->init();
|
2014-10-07 20:13:04 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
void N64Controller::print_N64_status()
|
|
|
|
{
|
|
|
|
// bits: A, B, Z, Start, Dup, Ddown, Dleft, Dright
|
|
|
|
// bits: 0, 0, L, R, Cup, Cdown, Cleft, Cright
|
|
|
|
Serial.println();
|
|
|
|
Serial.print("Start: ");
|
2017-05-01 05:22:33 -04:00
|
|
|
Serial.println(Start());
|
2014-10-07 20:13:04 -04:00
|
|
|
|
|
|
|
Serial.print("Z: ");
|
2017-05-01 05:22:33 -04:00
|
|
|
Serial.println(Z());
|
2014-10-07 20:13:04 -04:00
|
|
|
|
|
|
|
Serial.print("B: ");
|
2017-05-01 05:22:33 -04:00
|
|
|
Serial.println(B());
|
2014-10-07 20:13:04 -04:00
|
|
|
|
|
|
|
Serial.print("A: ");
|
2017-05-01 05:22:33 -04:00
|
|
|
Serial.println(A());
|
2014-10-07 20:13:04 -04:00
|
|
|
|
|
|
|
Serial.print("L: ");
|
2017-05-01 05:22:33 -04:00
|
|
|
Serial.println(L());
|
2014-10-07 20:13:04 -04:00
|
|
|
Serial.print("R: ");
|
2017-05-01 05:22:33 -04:00
|
|
|
Serial.println(R());
|
2014-10-07 20:13:04 -04:00
|
|
|
|
|
|
|
Serial.print("Cup: ");
|
2017-05-01 05:22:33 -04:00
|
|
|
Serial.println(C_up());
|
2014-10-07 20:13:04 -04:00
|
|
|
Serial.print("Cdown: ");
|
2017-05-01 05:22:33 -04:00
|
|
|
Serial.println(C_down());
|
2014-10-07 20:13:04 -04:00
|
|
|
Serial.print("Cright:");
|
2017-05-01 05:22:33 -04:00
|
|
|
Serial.println(C_right());
|
2014-10-07 20:13:04 -04:00
|
|
|
Serial.print("Cleft: ");
|
2017-05-01 05:22:33 -04:00
|
|
|
Serial.println(C_left());
|
2014-10-07 20:13:04 -04:00
|
|
|
|
|
|
|
Serial.print("Dup: ");
|
2017-05-01 05:22:33 -04:00
|
|
|
Serial.println(D_up());
|
2014-10-07 20:13:04 -04:00
|
|
|
Serial.print("Ddown: ");
|
2017-05-01 05:22:33 -04:00
|
|
|
Serial.println(D_down());
|
2014-10-07 20:13:04 -04:00
|
|
|
Serial.print("Dright:");
|
2017-05-01 05:22:33 -04:00
|
|
|
Serial.println(D_right());
|
2014-10-07 20:13:04 -04:00
|
|
|
Serial.print("Dleft: ");
|
2017-05-01 05:22:33 -04:00
|
|
|
Serial.println(D_left());
|
2014-10-07 20:13:04 -04:00
|
|
|
|
|
|
|
Serial.print("Stick X:");
|
2017-05-01 05:22:33 -04:00
|
|
|
Serial.println(axis_x(), DEC);
|
2014-10-07 20:13:04 -04:00
|
|
|
Serial.print("Stick Y:");
|
2017-05-01 05:22:33 -04:00
|
|
|
Serial.println(axis_y(), DEC);
|
2014-10-07 20:13:04 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
void N64Controller::update() {
|
|
|
|
unsigned char command[] = {0x01};
|
2017-05-14 03:16:42 -04:00
|
|
|
noInterrupts();
|
|
|
|
interface->send(command, 1);
|
|
|
|
interface->get();
|
|
|
|
interrupts();
|
2014-10-07 20:13:04 -04:00
|
|
|
}
|