#include LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // LCD DELCARATION int motorPin1 = 8; int motorPin2 = 9; int motorPin3 = 10; int motorPin4 = 11; int delayTime = 2; // min = 2; int const steps = 510; // steps ~ 255; float x; int valoareIluminare; // ilumination value void setup() { lcd.begin(16, 2); pinMode(motorPin1, OUTPUT); pinMode(motorPin2, OUTPUT); pinMode(motorPin3, OUTPUT); pinMode(motorPin4, OUTPUT); pinMode(13, OUTPUT); } void rotate_clock() //it rotates ~255 steps (180 grades); [x - number steps] {clockwise} { digitalWrite(motorPin1, HIGH); digitalWrite(motorPin2, LOW); digitalWrite(motorPin3, LOW); digitalWrite(motorPin4, LOW); delay(delayTime); digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, HIGH); digitalWrite(motorPin3, LOW); digitalWrite(motorPin4, LOW); delay(delayTime); digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, LOW); digitalWrite(motorPin3, HIGH); digitalWrite(motorPin4, LOW); delay(delayTime); digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, LOW); digitalWrite(motorPin3, LOW); digitalWrite(motorPin4, HIGH); delay(delayTime); } void rotate_couterclock() // 260 steps ~ { digitalWrite(motorPin4, HIGH); digitalWrite(motorPin3, LOW); digitalWrite(motorPin2, LOW); digitalWrite(motorPin1, LOW); delay(delayTime); digitalWrite(motorPin4, LOW); digitalWrite(motorPin3, HIGH); digitalWrite(motorPin2, LOW); digitalWrite(motorPin1, LOW); delay(delayTime); digitalWrite(motorPin4, LOW); digitalWrite(motorPin3, LOW); digitalWrite(motorPin2, HIGH); digitalWrite(motorPin1, LOW); delay(delayTime); digitalWrite(motorPin4, LOW); digitalWrite(motorPin3, LOW); digitalWrite(motorPin2, LOW); digitalWrite(motorPin1, HIGH); delay(delayTime); } // pas = 'steps' int pas,maxim=0,initializare=1;; // initialization. void inita() { digitalWrite(13, HIGH); lcd.print("INIT - 1/2..."); initializare=0; x = steps; // delayTime = 5; // slowing speed at startup; while(x > 0) { rotate_clock(); valoareIluminare = analogRead(0); delay(2); if(valoareIluminare > maxim) { maxim = valoareIluminare; pas = x; // saves in 'pas' the step where the max light is; } x--; } delay(100); lcd.clear(); lcd.print("INIT - 2/2..."); // delayTime = 2; // at return we grow the speed to the maxim, becouse the sensor will read values only on initialization & not on return to position 0. while(x < steps) // comes back in position 0; { rotate_couterclock(); x++; } lcd.clear(); lcd.print("INIT - DONE!"); lcd.setCursor(0,1); lcd.print(maxim); lcd.setCursor(9,1); lcd.print(pas); } void loop() { if(initializare == 1) { inita(); delay (100); x=0; while(x < pas) { rotate_clock(); x++; } digitalWrite(13, LOW); } } // lcd examples... /* LCD : lcd.setCursor(0, 1); lcd.print(millis() / 1000); * */