// enums MOETEN ALTIJD ALS EERSTE AANGEGEVEN WORDEN!!
enum status {RIJZEND, HOOG, DALEND, LAAG};
class Led {
public:
int poort;
int output;
//Methods van de class Led
void uit()
{
digitalWrite(poort, LOW);
}
void aan()
{
digitalWrite(poort, HIGH);
}
void toggle()
{
digitalWrite(poort, !digitalRead(poort));
}
void passRight()
{
}
//constructor van class Led:
Led (int a, int b) {
poort = a;
output = b;
pinMode(poort, output);
}
};
class Knop {
private:
int vorige;
int poort;
int offon;
public:
status flanK;
//Methods van de class Knop
int lees()
{
offon = digitalRead(poort);
if (vorige < offon) {
flanK = RIJZEND;
}
if (vorige > offon) {
flanK = DALEND;
}
if (vorige == offon and offon == HIGH) {
flanK = HOOG;
}
if (vorige == offon and offon == LOW) {
flanK = LAAG;
}
vorige = offon;
return flanK;
}
//constructor van class Knop:
Knop (int c, int d, status eflank) {
poort = c;
offon = d;
flanK = eflank;
}
};
class Pot {
public:
int poort;
int laagst;
int hoogst;
int waarde;
//Methods van de class Pot
int lees() {
waarde = map(analogRead(poort), 0, 1023, laagst, hoogst);
return waarde;
}
// constructor van de class Pot
Pot (int e, int f, int g) {
poort = e;
laagst = f;
hoogst = g;
}
};
class Timer {
private:
unsigned long nu;
unsigned long verleden;
public:
unsigned long wachtTijd;
bool go;
unsigned long verstrekenTijd;
//Methods van de class Timer
void verstreken() { // Method die berekend hoeveel tijd er versteken is tov vorige keer.
verleden = nu;
nu = millis();
verstrekenTijd += (nu - verleden);
if (verstrekenTijd>wachtTijd){
go = true;
}
Serial.print(" Go?");
Serial.print(go);
Serial.print(" Pottijd :");
Serial.print(wachtTijd);
Serial.print(" Versteken : ");
Serial.println(verstrekenTijd);
return go;
}
unsigned long reset() { // Method om de wachttijd van de timer in te stellen
verstrekenTijd = 0;
}
void set(unsigned long x){
wachtTijd= x;
}
//constructor van de class Timer
Timer (unsigned long wachtTijd_a, bool go_b) {
wachtTijd = wachtTijd_a;
go = go_b;
}
};
// Alles na de klassen
// Constanten
// Ledjes (Actuatoren)
const int PIN_GROEN = 12;
const int PIN_GEEL = 11;
const int PIN_ROOD = 10;
const int PIN_BLAUW = 9;
//Drukknoppen (Digitale sensoren)
const int PIN_WIT = 3;
const int PIN_GRIJS = 4;
//Potentiometers (Analoge sensoren)
const int PIN_POT = A0;
const int MAX = 5000; //Bovenlimiet van de knippertijd
const int MIN = 40;//Onderlimiet van de knippertijd
// Variabelen.
int grijs = LOW;
int wit = LOW;
int pot = 0;
unsigned long wachtTijd;
bool go;
// speciale variabelen
status flanK ;//flanK kan nu enkel de waarden RIJZEND, HOOG, DALEND en LAAG hebben
// Zie de enum van status hierboven.
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
}
// Aanmaken van Ojecten
Led Groen(PIN_GROEN, OUTPUT);
Led Geel(PIN_GEEL, OUTPUT);
Led Rood(PIN_ROOD, OUTPUT);
Led Blauw(PIN_BLAUW, OUTPUT);
Knop Wit(PIN_WIT, wit, flanK);
Knop Grijs(PIN_GRIJS, grijs, flanK);
Pot Vijs(PIN_POT, MIN, MAX);
Timer Klok(wachtTijd, go);
void loop() {
// put your main code here, to run repeatedly:
Groen.aan();
Geel.aan();
Rood.aan();
Blauw.aan();
delay(50);
Groen.uit();
Geel.uit();
Rood.uit();
Blauw.uit();
delay(50);
Groen.toggle();
Geel.toggle();
Rood.toggle();
Blauw.toggle();
delay(200);
Groen.toggle();
Geel.toggle();
Rood.toggle();
Blauw.toggle();
delay(200);
Wit.lees();
Grijs.lees();
wachtTijd = Vijs.lees();
Klok.set(wachtTijd);
Klok.verstreken();
Serial.print ("Ingestelde tijd: ");
Serial.print (wachtTijd);
// Flank voor grijs
switch (Grijs.flanK) {
case LAAG:
Serial.print (" Grijs is laag ");
break;
case HOOG:
Serial.print (" Grijs is hoog ");
break;
case RIJZEND:
Serial.print(" Grijs is stijgend ");
break;
case DALEND:
Serial.print (" Grijs is dalend ");
break;
default:
break;
}
// Flank voor wit
switch (Wit.flanK) {
case LAAG:
Serial.println (" Wit is laag ");
break;
case HOOG:
Serial.println (" Wit is hoog ");
break;
case RIJZEND:
Serial.println (" Wit is stijgend ");
break;
case DALEND:
Serial.println (" Wit is dalend ");
break;
default:
break;
}
}