// 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 aan()
{
digitalWrite(poort, LOW);
output = LOW;
}
void uit()
{
digitalWrite(poort, HIGH);
output = HIGH;
}
void toggle()
{
digitalWrite(poort, !digitalRead(poort));
output = !output;
}
int lees()
{
return output;
}
//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.println("-----------------vanuit de class ------------------");
Serial.print(" Go?");
Serial.print(go);
Serial.print(" Pottijd :");
Serial.print(wachtTijd);
Serial.print(" Versteken : ");
Serial.println(verstrekenTijd);
return go;
}
bool reset() { // Method om de wachttijd van de timer opnieuw in te stellen
verstrekenTijd = 0;
nu = millis();
verleden = nu;
go = false;
return go;
}
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.
// 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 setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Groen.aan();
Geel.uit();
Rood.uit();
Blauw.uit();
delay(2000);
}
void loop() {
Wit.lees();
Grijs.lees();
wachtTijd = Vijs.lees();
Klok.set(wachtTijd);
Klok.verstreken();
Serial.println("-----------Vanuit loop--------------");
Serial.print ("Ingestelde tijd: ");
Serial.print (wachtTijd);
Serial.print(" Go: ");
Serial.print(go);
// 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;
}
if (Klok.go) {
shiftRechts();
Klok.reset();
}
}
//Functies
void shiftLinks() {
switch (Groen.output + (Geel.output * 2) + (Rood.output * 4) + (Blauw.output * 8)) {
case 14: {
Groen.toggle();
Blauw.toggle();
break;
}
case 7: {
Blauw.toggle();
Rood.toggle();
break;
}
case 11: {
Rood.toggle();
Geel.toggle();
break;
} case 13: {
Geel.toggle();
Groen.toggle();
break;
}
default:
break;
}
}
void shiftRechts() {
switch (Groen.output + (Geel.output * 2) + (Rood.output * 4) + (Blauw.output * 8)) {
case 14: {
Groen.toggle();
Geel.toggle();
break;
}
case 13: {
Geel.toggle();
Rood.toggle();
break;
}
case 11: {
Rood.toggle();
Blauw.toggle();
break;
} case 7: {
Blauw.toggle();
Groen.toggle();
break;
}
default:
break;
}
}