Ik heb de code aangepast en het werkt (....), althans ik krijg geen fouten meer en de display toont wat ik wil.
Nadeel is dat ik wat LDR's per ongeluk heb beschadigd bij het opnieuw maken van de lichtsensor.
Ik moet dus even tot morgen wachten op de nieuwe LDR's om te zien of de code ook doet wat ik wil.
Het enige is nog het naar neutraal gaan als de LDR's geen licht oppakken ('s nachts) zodat de volgende ochtend het paneeltje weer klaar staat om op de zon te richten.
Maar dat is nog even toekomst muziek, voorlopig ben ik erg blij met de oplossing....bedankt !
#include <Servo.h> // include Servo library
#include <LiquidCrystal.h> // Include LCD library
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
Servo horizontal; // horizontal servo
int servoh = 90; // position horizontal servo
Servo vertical; // vertical servo
int servov = 90; // position vertical servo
// LDR pin connections
// name = analogpin
int ldrlt = 0; //LDR top left (blue)
int ldrrt = 1; //LDR top rigt (green)
int ldrld = 2; //LDR down left (brown)
int ldrrd = 3; //LDR down rigt (orange)
void setup()
{
Serial.begin(9600);
// servo connections
lcd.clear();
lcd.begin (16,2);
// name.attacht(pin)
horizontal.attach(9);
vertical.attach(10);
lcd.setCursor(0, 0);
lcd.print("Gompy Solar V1.2") ;
lcd.setCursor(0, 1);
lcd.print("The Netherlands ");
delay(2000);
lcd.clear();
delay(1000);
lcd.setCursor(0,0);
}
void loop()
{
int lt = analogRead(ldrlt); // top left
int rt = analogRead(ldrrt); // top right
int ld = analogRead(ldrld); // down left
int rd = analogRead(ldrrd); // down right
int dtime = analogRead(4)/20; // read potentiometers
int tol = analogRead(5)/4;
int avt = (lt + rt) / 2; // average value top
int avd = (ld + rd) / 2; // average value down
int avl = (lt + ld) / 2; // average value left
int avr = (rt + rd) / 2; // average value right
int dvert = avt - avd; // check the diffirence of up and down
int dhoriz = avl - avr;// check the diffirence og left and right
if (-1*tol > dvert || dvert > tol) // check if the diffirence is in the tolerance else change vertical angle
{
if (avt > avd)
{
servov = ++servov;
if (servov > 90)
{
servov = 90;
}
}
else if (avt < avd)
{
servov= --servov;
if (servov < 0)
{
servov = 0;
}
}
vertical.write(servov);
}
if (-1*tol > dhoriz || dhoriz > tol) // check if the diffirence is in the tolerance else change horizontal angle
{
if (avl > avr)
{
servoh = --servoh;
if (servoh < 0)
{
servoh = 0;
}
}
else if (avl < avr)
{
servoh = ++servoh;
if (servoh > 180)
{
servoh = 180;
}
}
else if (avl = avr)
{
// nothing
}
horizontal.write(servoh);
}
delay(dtime);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Horizontal:");
lcd.setCursor (14, 0);
lcd.print(servoh);
lcd.setCursor(0, 1);
lcd.print("Vertical :");
lcd.setCursor(14, 1);
lcd.print(servov);
}
Mvg, Rob