#include <Stepper.h>
#define PH_TOP A0
#define PH_LEFT A1
#define PH_BOT A2
#define PH_RIGHT A3
const float GAMMA = 0.7;
const float RL10 = 50;
const int STEPS_PER_REVOLUTION = 200;
const int STEP = 10;
// value indexes
#define TOP (0)
#define LEFT (1)
#define BOT (2)
#define RIGHT (3)
Stepper motor_1(STEPS_PER_REVOLUTION, 8, 9, 10, 11);
Stepper motor_2(STEPS_PER_REVOLUTION, 4, 5, 6, 7);
void setup() {
Serial.begin(9600);
}
int calculate_lux(int analog_reading){
float voltage = analog_reading/1024.*5;
float resistance = 2000*voltage/(1-voltage/5);
int lux = pow(RL10*1e3*pow(10, GAMMA)/resistance, (1/GAMMA));
return lux;
}
void print_lux_values(int lt, int ll, int lb, int lr){
Serial.print("TOP: ");
Serial.print(lt);
Serial.print("\t");
Serial.print("BOTTOM: ");
Serial.print(lb);
Serial.print("\t");
Serial.print("LEFT: ");
Serial.print(ll);
Serial.print("\t");
Serial.print("RIGHT: ");
Serial.print(lr);
Serial.print("\n");
}
void step_motor(Stepper motor, int steps){
motor.step(steps);
}
void loop() {
// put your main code here, to run repeatedly:
int analogValues[4] = {analogRead(PH_TOP), analogRead(PH_LEFT), analogRead(PH_BOT), analogRead(PH_RIGHT)};
int lux[4] = {calculate_lux(analogValues[TOP]), calculate_lux(analogValues[LEFT]), calculate_lux(analogValues[BOT]), calculate_lux(analogValues[RIGHT])};
print_lux_values(lux[TOP], lux[LEFT], lux[BOT], lux[RIGHT]);
if(lux[TOP]>lux[BOT]){
step_motor(motor_1, STEP);
} else if (lux[TOP]<lux[BOT]){
step_motor(motor_1, -STEP);
};
if(lux[RIGHT]>lux[LEFT]){
step_motor(motor_2, STEP);
} else if (lux[RIGHT]<lux[LEFT]){
step_motor(motor_2, -STEP);
};
delay(750);
}