RetroConnector/M0100 USB/M0100_USB/M0100_USB.ino

122 lines
1.9 KiB
C++

/*
M0100 pins:
LPIN = D0
RPIN = D1
if LPIN & RPIN are HIGH or LPIN & RPIN are LOW
if LPIN goes HIGH to LOW or LPIN goes LOW to HIGH
moving right, X++
if RPIN goes HIGH to LOW or RPIN goes LOW to HIGH
moving left, X--
/
/
Mouse.move(X, Y), where X and Y range from -127 to +127. Positive X moves to the right. Positive Y moves downwards.
*/
int LPIN = 5;
int RPIN = 6;
int DPIN = 7;
int UPIN = 8;
//int PulseState = 1;
volatile int DeltaX = 0;
volatile int DeltaY = 0;
int MouseCalibration = 4; // how fast does the movement translate (3 - 6 seems okay, 10 is too fast)
#include <Bounce.h>
Bounce button4 = Bounce(4, 10);
void setup() {
pinMode(4, INPUT_PULLUP);
// Serial.begin(38400);
pinMode(LPIN, INPUT);
pinMode(RPIN, INPUT);
pinMode(DPIN, INPUT);
pinMode(UPIN, INPUT);
attachInterrupt(0, LPINChange, CHANGE);
attachInterrupt(1, RPINChange, CHANGE);
attachInterrupt(2, DPINChange, CHANGE);
attachInterrupt(3, UPINChange, CHANGE);
}
void loop()
{
if( (DeltaX != 0) || (DeltaY != 0) ) {
Mouse.move(DeltaX * MouseCalibration, DeltaY * MouseCalibration);
DeltaX = 0;
DeltaY = 0;
}
// delay(15);
button4.update();
if (button4.fallingEdge()) {
Mouse.set_buttons(1, 0, 0);
}
if (button4.risingEdge()) {
Mouse.set_buttons(0, 0, 0);
}
}
void LPINChange()
{
if ( digitalRead(LPIN) == digitalRead(RPIN) ) {
DeltaX = -1;
}
// Serial.println(".");
}
void RPINChange()
{
if ( digitalRead(LPIN) == digitalRead(RPIN) ) {
DeltaX = 1;
}
// Serial.println("-");
}
void DPINChange()
{
if ( digitalRead(DPIN) == digitalRead(UPIN) ) {
DeltaY = 1;
}
}
void UPINChange()
{
if ( digitalRead(DPIN) == digitalRead(UPIN) ) {
DeltaY = -1;
}
}