#include "AccelStepper.h"
//Inputs
//int iDips[8] = {1,2,3,4,5,6,7,8};
int iX[2] = {A0,A1};
int iY[2] = {A2,A3};
int iRGB[3] = {A4,A5,A6};
int iStepX[2] = {8,7};
int iStepY[2] = {6,5};
//Outputs
int qRGB[3] = {11,10,9};
//Statics
int Address;
long Xval;
long Yval;
const float StepsPerDegX = 8.8888888888;
const int maxDegX = 359;
long StepsX;
const float StepsPerDegY = 8.8888888888;
const int maxDegY = 359;
long StepsY;
int R;
int G;
int B;
AccelStepper stepperX(1, iStepX[0],iStepX[1]);
AccelStepper stepperY(1, iStepY[0],iStepY[1]);
void setup() {
Serial.begin(9600);
stepperX.setMaxSpeed(100000); // Set speed fast enough to follow pot rotation
stepperX.setAcceleration(100000); // High Acceleration to follow pot rotation
stepperY.setMaxSpeed(100000); // Set speed fast enough to follow pot rotation
stepperY.setAcceleration(100000); // High Acceleration to follow pot rotation
// for (int i = 0; i < 8;i++){
// pinMode(iDips[i], INPUT_PULLUP);
// };
pinMode(iX[1], INPUT);
pinMode(iX[2], INPUT);
pinMode(iY[1], INPUT);
pinMode(iY[2], INPUT);
pinMode(iRGB[0], INPUT);
pinMode(iRGB[1], INPUT);
pinMode(iRGB[2], INPUT);
pinMode(qRGB[0], OUTPUT);
pinMode(qRGB[1], OUTPUT);
pinMode(qRGB[2], OUTPUT);
}
void loop() {
//Serial.println (Address);
Xval = Position(iX);
Yval = Position(iY);
StepsX = Stepper(Xval, StepsPerDegX, maxDegX);
StepsY = Stepper(Yval, StepsPerDegY, maxDegY);
R = LED(iRGB[0]);
G = LED(iRGB[1]);
B = LED(iRGB[2]);
stepperX.runToNewPosition(StepsX); // Move stepper to new position
stepperY.runToNewPosition(StepsY); // Move stepper to new position
analogWrite(qRGB[0], R);
analogWrite(qRGB[1], G);
analogWrite(qRGB[2], B);
delay(1000);// put your main code here, to run repeatedly:
}
long Position(int Pins[2]) {
long Pin_loc = 0;
long Pinfine_loc = 0;
long PinVal_loc = 0;
Pin_loc = analogRead(Pins[0]);
Pinfine_loc = analogRead(Pins[1]);
PinVal_loc = ((Pin_loc >> 2 ) * 255) + (Pinfine_loc >> 2) ;
return PinVal_loc;
}
int LED(int Pin){
int val = 0;
val = analogRead(Pin)>>2 ;
return val;
}
long Stepper(long val, float StepsPerDeg, int maxDeg){
long newval ;
//if ((val > previous+1) || (val < previous-1)) { // Check that a move of the pot is at least > or < than 6
newval = map(val, 0, 65280, 0, maxDeg * StepsPerDeg); // Map value (1600 = 1 stepper shaft rotation) //previous = val; // save current value into variable previous
return newval;
//}
}