I admit it was a bit trial and error development, but it worked out in the end.
#define pin_1 1
#define pin_2 4
#define pin_3 3
#define B_UP 0
#define B_DN 1
#define B_LF 2
#define B_RT 3
#define B_A 4
#define B_B 5
boolean pinChanged = false;
uint8_t pinstate = 0;
uint8_t pins[3] = { pin_1, pin_2, pin_3 };
uint8_t switches[6][2] =
{
{ pin_2, pin_1 },
{ pin_1, pin_3 },
{ pin_3, pin_1 },
{ pin_1, pin_2 },
{ pin_3, pin_2 },
{ pin_2, pin_3 }
};
void setup()
{
}
void loop()
{
if (pinChanged)
{
pinChanged = false;
if (pinstate & (1 << B_UP))
{
}
if (pinstate & (1 << B_DN))
{
}
if (pinstate & (1 << B_LF))
{
}
if (pinstate & (1 << B_RT))
{
}
if (pinstate & (1 << B_A))
{
}
if (pinstate & (1 << B_B))
{
}
}
for (uint8_t i = 0; i < 6; i++)
{
deactivate_all();
// set pin states for button
pinMode(switches[i][0], INPUT_PULLUP);
pinMode(switches[i][1], OUTPUT);
digitalWrite(switches[i][1], LOW);
if (pinstate & (1 << i))
{
if (digitalRead(switches[i][0]) == HIGH)
{
pinstate &= ~(1 << i);
pinChanged = true;
}
}
else
{
if (digitalRead(switches[i][0]) == LOW)
{
pinstate |= (1 << i);
pinChanged = true;
}
}
}
}
void deactivate_all()
{
for (uint8_t i = 0; i < 3; i++)
{
pinMode(pins[i], OUTPUT);
digitalWrite(pins[i], HIGH);
}
}
Discussions
Become a Hackaday.io Member
Create an account to leave a comment. Already have an account? Log In.