I seem to be confused about how to implement debouncing when using analogRead. I looked up many articles regarding debouncing, but they seem to address digitalRead, not analogRead. The link to my original post regarding how to wire the buttons is here. The following is my code so far, which works well, but there are multiple inputs detected.:
#include <XInput.h>
int analogPin= 0;
int raw= 0;
float SW1= 0;
int analogPin2= 1;
int raw2= 0;
float SW2= 0;
int analogPin3= 2;
int raw3= 0;
float SWE= 0;
int analogPin4= 3;
int raw4= 0;
float SWCC= 0;
void setup()
{
XInput.begin();
}
void loop()
{
raw= analogRead(analogPin);
if(raw<980 and raw<50)
{
XInput.press(BUTTON_A);
XInput.release(BUTTON_A);
}
if(raw<980 and raw>730)
{
XInput.press(BUTTON_B);
XInput.release(BUTTON_B);
}
if(raw<980 and raw<300 and raw>200)
{
XInput.press(BUTTON_X);
XInput.release(BUTTON_X);
}
if(raw<980 and raw<600 and raw>450)
{
XInput.press(BUTTON_Y);
XInput.release(BUTTON_Y);
}
raw2= analogRead(analogPin2);
if(raw2<980 and raw2<100)
{
XInput.press(BUTTON_LB);
XInput.release(BUTTON_LB);
}
if(raw2<980 and raw2>450)
{
XInput.press(BUTTON_RB);
XInput.release(BUTTON_RB);
}
if(raw2<980 and raw2<390 and raw2>150)
{
XInput.press(BUTTON_BACK);
XInput.release(BUTTON_BACK);
}
raw3= analogRead(analogPin3);
if(raw3<980 and raw3<100)
{
XInput.press(BUTTON_START);
XInput.release(BUTTON_START);
}
if(raw3<980 and raw3>700)
{
XInput.press(BUTTON_L3);
XInput.release(BUTTON_L3);
}
if(raw3<980 and raw3<660 and raw3>420)
{
XInput.press(BUTTON_R3);
XInput.release(BUTTON_R3);
}
if(raw3<980 and raw3<400 and raw3>120)
{
XInput.press(DPAD_UP);
XInput.release(DPAD_UP);
}
raw4= analogRead(analogPin4);
if(raw4<980 and raw4<100)
{
XInput.press(DPAD_DOWN);
XInput.release(DPAD_DOWN);
}
if(raw4<980 and raw4>510)
{
XInput.press(DPAD_LEFT);
XInput.release(DPAD_LEFT);
}
if(raw4<980 and raw4<500 and raw4>320)
{
XInput.press(DPAD_RIGHT);
XInput.release(DPAD_RIGHT);
}
if(raw4<980 and raw4<310 and raw4>110)
{
XInput.press(BUTTON_LOGO);
XInput.release(BUTTON_LOGO);
}
}