int xbase; int xval; int ybase; int yval; int deviation=100; const int xpin=0; const int ypin=1; const int down=1; const int up=2; const int left=10; const int right=20; const int downpin=3; const int uppin=5; const int leftpin=4; const int rightpin=2; const int eightwaypin = 7; int eightwaytest = LOW; int state; int xweight; int yweight; void setup(){ Serial.begin(9600); for (int i=2; i<6; i++){ pinMode(i,OUTPUT); digitalWrite(i,LOW); } pinMode (eightwaypin,INPUT); digitalWrite (eightwaypin,HIGH); xbase=analogRead(xpin); ybase=analogRead(ypin); } void loop (){ state = 0; xval = analogRead(xpin); yval = analogRead(ypin); eightwaytest = digitalRead(eightwaypin); if (xval>(xbase+deviation)) state = state + right; if (xval<(xbase-deviation)) state = state + left; if (yval>(ybase+deviation)) state = state + up; if (yval<(ybase-deviation)) state = state + down; switch (state){ case 12: if (eightwaytest == HIGH){ digitalWrite(uppin,HIGH); digitalWrite(leftpin,HIGH); digitalWrite(downpin,LOW); digitalWrite(rightpin,LOW); } else { xweight = (xbase - xval - deviation)*100/xbase; yweight = (yval - ybase -deviation)*100/ybase; if (xweight>yweight){ digitalWrite(uppin,LOW); digitalWrite(leftpin,HIGH); digitalWrite(downpin,LOW); digitalWrite(rightpin,LOW); } else { digitalWrite(uppin,HIGH); digitalWrite(leftpin,LOW); digitalWrite(downpin,LOW); digitalWrite(rightpin,LOW); } } break; case 22: if (eightwaytest == HIGH){ digitalWrite(uppin,HIGH); digitalWrite(leftpin,LOW); digitalWrite(downpin,LOW); digitalWrite(rightpin,HIGH); } else { xweight = (xval - xbase - deviation)*100/xbase; yweight = (yval - ybase -deviation)*100/ybase; if (xweight>yweight){ digitalWrite(uppin,LOW); digitalWrite(leftpin,LOW); digitalWrite(downpin,LOW); digitalWrite(rightpin,HIGH); } else { digitalWrite(uppin,HIGH); digitalWrite(leftpin,LOW); digitalWrite(downpin,LOW); digitalWrite(rightpin,LOW); } } break; case 11: if (eightwaytest == HIGH){ digitalWrite(uppin,LOW); digitalWrite(leftpin,HIGH); digitalWrite(downpin,HIGH); digitalWrite(rightpin,LOW); } else { xweight = (xbase - xval - deviation)*100/xbase; yweight = (ybase - yval -deviation)*100/ybase; if (xweight>yweight){ digitalWrite(uppin,LOW); digitalWrite(leftpin,HIGH); digitalWrite(downpin,LOW); digitalWrite(rightpin,LOW); } else { digitalWrite(uppin,LOW); digitalWrite(leftpin,LOW); digitalWrite(downpin,HIGH); digitalWrite(rightpin,LOW); } } break; case 21: if (eightwaytest == HIGH){ digitalWrite(uppin,LOW); digitalWrite(leftpin,LOW); digitalWrite(downpin,HIGH); digitalWrite(rightpin,HIGH); } else { xweight = (xval - xbase - deviation)*100/xbase; yweight = (ybase - yval -deviation)*100/ybase; if (xweight>yweight){ digitalWrite(uppin,LOW); digitalWrite(leftpin,LOW); digitalWrite(downpin,LOW); digitalWrite(rightpin,HIGH); } else { digitalWrite(uppin,LOW); digitalWrite(leftpin,LOW); digitalWrite(downpin,HIGH); digitalWrite(rightpin,LOW); } } break; case 10: digitalWrite(uppin,LOW); digitalWrite(leftpin,HIGH); digitalWrite(downpin,LOW); digitalWrite(rightpin,LOW); break; case 20: digitalWrite(uppin,LOW); digitalWrite(leftpin,LOW); digitalWrite(downpin,LOW); digitalWrite(rightpin,HIGH); break; case 1: digitalWrite(uppin,LOW); digitalWrite(leftpin,LOW); digitalWrite(downpin,HIGH); digitalWrite(rightpin,LOW); break; case 2: digitalWrite(uppin,HIGH); digitalWrite(leftpin,LOW); digitalWrite(downpin,LOW); digitalWrite(rightpin,LOW); break; case 0: digitalWrite(uppin,LOW); digitalWrite(leftpin,LOW); digitalWrite(downpin,LOW); digitalWrite(rightpin,LOW); break; } Serial.print(state); Serial.print(" xval="); Serial.print(xval); Serial.print(" yval="); Serial.println(yval); Serial.println(eightwaytest); delay (100); }