// library aanmelden
#include <Servo.h>
// definitie van pinnen
#define PIN_DAGMOTOR 4
#define PIN_SEIZOENSMOTOR 3
#define PIN_LDR1 A4
#define PIN_LDR2 A3
#define PIN_LDR3 A2
//definieer globale variabelen
byte dagPos = 90;
byte seizoensPos = 90;
int const DREMPEL_WAARDE = 170;
byte LDR1;
byte LDR2;
byte LDR3;
byte maxLichtsterkte;
//definieer objecten
Servo dagMotor;
Servo seizoensMotor;
//declareer functies
void meetlichtsterkte ();
void printWaarden();
void richtOmhoog ();
void richtNaarZon ();
byte bepaalDraairichtingOpBAsisVan ();
void setup() {
Serial.begin(115200);
// servomotoren aanmelden
dagMotor.attach(PIN_DAGMOTOR);
seizoensMotor.attach(PIN_SEIZOENSMOTOR);
//definitie pinnen
pinMode(PIN_LDR1, INPUT);
pinMode(PIN_LDR2, INPUT);
pinMode(PIN_LDR3, INPUT);
dagMotor.write(dagPos);
seizoensMotor.write(seizoensPos);
}
void loop() {
if (millis() % 1000 == 0) {
meetlichtsterkte ();
if ((LDR1 < 170) || (LDR2 < 170) || (LDR3 < 170)) {
richtNaarZon ();
}
else {
richtOmhoog ();
};
}
}
void meetlichtsterkte () {
LDR1 = analogRead(PIN_LDR1);
LDR2 = analogRead(PIN_LDR2);
LDR3 = analogRead(PIN_LDR3);
printWaarden();
}
void richtOmhoog () {
Serial.println("richtomhoog");
dagPos = 90;
seizoensPos = 90;
dagMotor.write(dagPos);
seizoensMotor.write(seizoensPos);
}
void richtNaarZon () {
Serial.println("richtnaarzon");
static byte nieuwePos; /*declaratie van variabele nieuwePos, we doen dat static,
dan moet de compiler niet telkens opnieuw een geheugenplaats zoeken en reserven.*/
nieuwePos = dagPos + bepaalDraairichtingOpBAsisVan(LDR1, LDR2);
if (0 < nieuwePos && nieuwePos < 180) //&& is de uitdrukking voor een logische AND
{
dagMotor.write (nieuwePos);
dagPos = nieuwePos;
}
nieuwePos = seizoensPos + bepaalDraairichtingOpBAsisVan(((LDR1 + LDR2) / 2), LDR3);
if (0 < nieuwePos && nieuwePos < 180) //&& is de uitdrukking voor een logische AND
{
seizoensMotor.write (nieuwePos);
seizoensPos = nieuwePos;
}
}
byte bepaalDraairichtingOpBAsisVan(byte meting1, byte meting2) {
if (meting1 == meting2) {
return 0;
} else {
return (meting1 - meting2) / abs(meting1 - meting2);
}
}
void printWaarden() {
Serial.print(LDR1);
Serial.print (" - ");
Serial.print(LDR2);
Serial.print (" - ");
Serial.println(LDR3);
}