const char down_L_key='d'; const char down_R_key=KEY_DOWN_ARROW ; const char left_L_key='s'; const char left_R_key=KEY_LEFT_ARROW ; const char right_L_key='f'; const char right_R_key=KEY_RIGHT_ARROW ; const char up_L_key='e'; const char up_R_key=KEY_UP_ARROW ; const int enterpin = 2; const int creditpin = 3 ; const int startpin = 4; const int exitpin = 5; const int tabpin = 6; const int down=1; const int up=2; const int left=10; const int right=20; const int x_L_pin=2; const int x_R_pin=0; const int y_L_pin=3; const int y_R_pin=1; const int eightway_test_pin = 7; int deviation=100; int eightwaytest = HIGH; int state_L; int state_R; int x_L_base; int x_L_val; int x_L_weight; int x_R_base; int x_R_val; int x_R_weight; int x=0; int y_L_base; int y_L_val; int y_L_weight; int y_R_base; int y_R_val; int y_R_weight; void setup(){ Serial.begin(9600); for (int i=2; i<7; i++){ pinMode(i,INPUT); digitalWrite(i,HIGH); } pinMode (eightway_test_pin,INPUT); digitalWrite (eightway_test_pin,HIGH); x_R_base=analogRead(x_R_pin); y_R_base=analogRead(y_R_pin); } void loop (){ state_R = 0; x_R_val = analogRead(x_R_pin); y_R_val = analogRead(y_R_pin); state_L = 0; x_L_val = analogRead(x_L_pin); y_L_val = analogRead(y_L_pin); eightwaytest = digitalRead(eightway_test_pin); if (x_R_val>(x_R_base+deviation)) state_R = state_R + right; if (x_R_val<(x_R_base-deviation)) state_R = state_R + left; if (y_R_val>(y_R_base+deviation)) state_R = state_R + up; if (y_R_val<(y_R_base-deviation)) state_R = state_R + down; if (x_L_val>(x_L_base+deviation)) state_L = state_L + right; if (x_L_val<(x_L_base-deviation)) state_L = state_L + left; if (y_L_val>(y_L_base+deviation)) state_L = state_L + up; if (y_L_val<(y_L_base-deviation)) state_L = state_L + down; if (digitalRead(startpin)==LOW){ Keyboard.press('1'); delay(150); Keyboard.release('1'); } if (digitalRead(creditpin)==LOW){ Keyboard.press('5'); delay(150); Keyboard.release('5'); } if (digitalRead(exitpin)==LOW){ Keyboard.press(KEY_ESC); delay(150); Keyboard.release(KEY_ESC); } if (digitalRead(enterpin)==LOW){ Keyboard.press(KEY_RETURN); delay(150); Keyboard.release(KEY_RETURN); } if (digitalRead(tabpin)==LOW){ Keyboard.press(KEY_LEFT_CTRL); } else Keyboard.release(KEY_LEFT_CTRL); switch (state_R){ case 12: if (eightwaytest == HIGH){ Keyboard.press(up_R_key); Keyboard.press(left_R_key); Keyboard.release(down_R_key); Keyboard.release(right_R_key); } else { x_R_weight = (x_R_base - x_R_val - deviation)*100/x_R_base; y_R_weight = (y_R_val - y_R_base -deviation)*100/y_R_base; if (x_R_weight>y_R_weight){ Keyboard.release(up_R_key); Keyboard.press(left_R_key); Keyboard.release(down_R_key); Keyboard.release(right_R_key); } else { Keyboard.press(up_R_key); Keyboard.release(left_R_key); Keyboard.release(down_R_key); Keyboard.release(right_R_key); } } break; case 22: if (eightwaytest == HIGH){ Keyboard.press(up_R_key); Keyboard.release(left_R_key); Keyboard.release(down_R_key); Keyboard.press(right_R_key); } else { x_L_weight = (x_R_val - x_R_base - deviation)*100/x_R_base; y_L_weight = (y_R_val - y_R_base -deviation)*100/y_R_base; if (x_R_weight>y_R_weight){ Keyboard.release(up_R_key); Keyboard.release(left_R_key); Keyboard.release(down_R_key); Keyboard.press(right_R_key); } else { Keyboard.press(up_R_key); Keyboard.release(left_R_key); Keyboard.release(down_R_key); Keyboard.release(right_R_key); } } break; case 11: if (eightwaytest == HIGH){ Keyboard.release(up_R_key); Keyboard.press(left_R_key); Keyboard.press(down_R_key); Keyboard.release(right_R_key); } else { x_L_weight = (x_R_base - x_R_val - deviation)*100/x_R_base; y_L_weight = (y_R_base - y_R_val -deviation)*100/y_R_base; if (x_R_weight>y_R_weight){ Keyboard.release(up_R_key); Keyboard.press(left_R_key); Keyboard.release(down_R_key); Keyboard.release(right_R_key); } else { Keyboard.release(up_R_key); Keyboard.release(left_R_key); Keyboard.press(down_R_key); Keyboard.release(right_R_key); } } break; case 21: if (eightwaytest == HIGH){ Keyboard.release(up_R_key); Keyboard.release(left_R_key); Keyboard.press(down_R_key); Keyboard.press(right_R_key); } else { x_L_weight = (x_R_val - x_R_base - deviation)*100/x_R_base; y_L_weight = (y_R_base - y_R_val -deviation)*100/y_R_base; if (x_R_weight>y_R_weight){ Keyboard.release(up_R_key); Keyboard.release(left_R_key); Keyboard.release(down_R_key); Keyboard.press(right_R_key); } else { Keyboard.release(up_R_key); Keyboard.release(left_R_key); Keyboard.press(down_R_key); Keyboard.release(right_R_key); } } break; case 10: Keyboard.release(up_R_key); Keyboard.press(left_R_key); Keyboard.release(down_R_key); Keyboard.release(right_R_key); break; case 20: Keyboard.release(up_R_key); Keyboard.release(left_R_key); Keyboard.release(down_R_key); Keyboard.press(right_R_key); break; case 1: Keyboard.release(up_R_key); Keyboard.release(left_R_key); Keyboard.press(down_R_key); Keyboard.release(right_R_key); break; case 2: Keyboard.press(up_R_key); Keyboard.release(left_R_key); Keyboard.release(down_R_key); Keyboard.release(right_R_key); break; case 0: Keyboard.release(up_R_key); Keyboard.release(left_R_key); Keyboard.release(down_R_key); Keyboard.release(right_R_key); break; } switch (state_L){ case 12: if (eightwaytest == HIGH){ Keyboard.press(up_L_key); Keyboard.press(left_L_key); Keyboard.release(down_L_key); Keyboard.release(right_L_key); } else { x_L_weight = (x_L_base - x_L_val - deviation)*100/x_L_base; y_L_weight = (y_L_val - y_L_base -deviation)*100/y_L_base; if (x_L_weight>y_L_weight){ Keyboard.release(up_L_key); Keyboard.press(left_L_key); Keyboard.release(down_L_key); Keyboard.release(right_L_key); } else { Keyboard.press(up_L_key); Keyboard.release(left_L_key); Keyboard.release(down_L_key); Keyboard.release(right_L_key); } } break; case 22: if (eightwaytest == HIGH){ Keyboard.press(up_L_key); Keyboard.release(left_L_key); Keyboard.release(down_L_key); Keyboard.press(right_L_key); } else { x_L_weight = (x_L_val - x_L_base - deviation)*100/x_L_base; y_L_weight = (y_L_val - y_L_base -deviation)*100/y_L_base; if (x_L_weight>y_L_weight){ Keyboard.release(up_L_key); Keyboard.release(left_L_key); Keyboard.release(down_L_key); Keyboard.press(right_L_key); } else { Keyboard.press(up_L_key); Keyboard.release(left_L_key); Keyboard.release(down_L_key); Keyboard.release(right_L_key); } } break; case 11: if (eightwaytest == HIGH){ Keyboard.release(up_L_key); Keyboard.press(left_L_key); Keyboard.press(down_L_key); Keyboard.release(right_L_key); } else { x_L_weight = (x_L_base - x_L_val - deviation)*100/x_L_base; y_L_weight = (y_L_base - y_L_val -deviation)*100/y_L_base; if (x_L_weight>y_L_weight){ Keyboard.release(up_L_key); Keyboard.press(left_L_key); Keyboard.release(down_L_key); Keyboard.release(right_L_key); } else { Keyboard.release(up_L_key); Keyboard.release(left_L_key); Keyboard.press(down_L_key); Keyboard.release(right_L_key); } } break; case 21: if (eightwaytest == HIGH){ Keyboard.release(up_L_key); Keyboard.release(left_L_key); Keyboard.press(down_L_key); Keyboard.press(right_L_key); } else { x_L_weight = (x_L_val - x_L_base - deviation)*100/x_L_base; y_L_weight = (y_L_base - y_L_val -deviation)*100/y_L_base; if (x_L_weight>y_L_weight){ Keyboard.release(up_L_key); Keyboard.release(left_L_key); Keyboard.release(down_L_key); Keyboard.press(right_L_key); } else { Keyboard.release(up_L_key); Keyboard.release(left_L_key); Keyboard.press(down_L_key); Keyboard.release(right_L_key); } } break; case 10: Keyboard.release(up_L_key); Keyboard.press(left_L_key); Keyboard.release(down_L_key); Keyboard.release(right_L_key); break; case 20: Keyboard.release(up_L_key); Keyboard.release(left_L_key); Keyboard.release(down_L_key); Keyboard.press(right_L_key); break; case 1: Keyboard.release(up_L_key); Keyboard.release(left_L_key); Keyboard.press(down_L_key); Keyboard.release(right_L_key); break; case 2: Keyboard.press(up_L_key); Keyboard.release(left_L_key); Keyboard.release(down_L_key); Keyboard.release(right_L_key); break; case 0: Keyboard.release(up_L_key); Keyboard.release(left_L_key); Keyboard.release(down_L_key); Keyboard.release(right_L_key); break; } }