diff --git a/arduino_controller/arduino_controller.ino b/arduino_controller/arduino_controller.ino index 309e4df..7ae2260 100644 --- a/arduino_controller/arduino_controller.ino +++ b/arduino_controller/arduino_controller.ino @@ -1,3 +1,9 @@ +#include + +// TX/RX +SoftwareSerial Bluetooth(10, 9); + +// Button pins int const UP_BTN = 2; int const DOWN_BTN = 4; int const LEFT_BTN = 5; @@ -8,34 +14,87 @@ int const JOYSTICK_BTN = 8; int const JOYSTICK_AXIS_X = A0; int const JOYSTICK_AXIS_Y = A1; int buttons[] = {UP_BTN, DOWN_BTN, LEFT_BTN, RIGHT_BTN, E_BTN, F_BTN, JOYSTICK_BTN}; -int line = 1; + +bool halt_packets = false; void setup() { - Serial.begin(9600); + Serial.begin(38400); Serial.println("Serial Started"); for (int i=0; i < 7; i++) pinMode(buttons[i], INPUT_PULLUP); Serial.println("Finished pin setup"); + Bluetooth.begin(38400); + Serial.println("Send 's' to sniff packets, 'h' to halt packets:"); delay(2000); } -void loop() { - Serial.print(line); - Serial.print(". Yeet!\n"); - - Serial.print("UP="),Serial.println(digitalRead(UP_BTN)); - Serial.print("DOWN="),Serial.println(digitalRead(DOWN_BTN)); - Serial.print("LEFT="),Serial.println(digitalRead(LEFT_BTN)); - Serial.print("RIGHT="),Serial.println(digitalRead(RIGHT_BTN)); - Serial.print("E="),Serial.println(digitalRead(E_BTN)); - Serial.print("F="),Serial.println(digitalRead(F_BTN)); - Serial.print("JOYSTICK BTN="),Serial.println(digitalRead(JOYSTICK_BTN)); +unsigned long pack = 0; - // Joystick range is from 0 to 653 +- 1 - // Center is about 323 +- 2. A deadzone of 10 or 20 should be safe. - Serial.print("X: "); - Serial.println(analogRead(JOYSTICK_AXIS_X)); - Serial.print("Y: "); - Serial.println(analogRead(JOYSTICK_AXIS_Y)); - line++; - delay(150); +void loop() { + // Joystick range is from 0 to 1023 + // A deadzone of 10 or 20 should be safe. + if (!halt_packets) { + pack = build_packet(); + } + delay(100); + + // Read from HC-05 and send data to the Arduino Serial Monitor + if (Bluetooth.available()) { + if (!halt_packets) { + Bluetooth.write(pack); + } + Serial.write(Bluetooth.read()); + } + + // Read from Arduino Serial Monitor and send it to the HC-05 + if (Serial.available()) { + char com = Serial.read(); + Serial.write(com); + if (com == 's' && !halt_packets) { + Serial.println(); + PrintBits32(pack); + } + else if (com == 'h') { + Serial.println(); + Serial.println("!!! Packet generation halted !!!"); + halt_packets = !halt_packets; + } + Bluetooth.print(com); + } + +} + +unsigned long build_packet(void) { + /* + * Packets will always contain analog values (10 bits each) + * One bit containing high/low value for buttons is included + */ + unsigned long built_packet = 0; + // Start digital input + built_packet += digitalRead(UP_BTN); + built_packet |= digitalRead(DOWN_BTN) << 1; + built_packet += digitalRead(LEFT_BTN) << 2; + built_packet += digitalRead(RIGHT_BTN) << 3; + built_packet += digitalRead(E_BTN) << 4; + built_packet += digitalRead(F_BTN) << 5; + built_packet += digitalRead(JOYSTICK_BTN) << 6; + // Start analog input + built_packet = built_packet << 10; + built_packet += analogRead(JOYSTICK_AXIS_X); + built_packet = built_packet << 10; + built_packet += analogRead(JOYSTICK_AXIS_Y); + return built_packet; +} + +void PrintBits32(unsigned long u) +{ + char str[34]; + str[32] = '\n'; + str[33] = 0; + for (int i = 31; i >= 0; i--) + { + str[i] = '0' + (u & 1); + u >>= 1; + } + + Serial.print(str); } diff --git a/arduino_maze/arduino_maze.ino b/arduino_maze/arduino_maze.ino new file mode 100644 index 0000000..95c2b6e --- /dev/null +++ b/arduino_maze/arduino_maze.ino @@ -0,0 +1,9 @@ +void setup() { + // put your setup code here, to run once: + +} + +void loop() { + // put your main code here, to run repeatedly: + +}