#include <Wire.h>
//variabelen aanmaken.
#define latchPin 5 //pin 5 van de latchpin
#define dataPin 4 //pin 4 van de datapin
#define clockPin 2 //pin 2 van de clockpin
#define LedKnopBoven 11 //pin 11 wordt verbonden met LedKnopBoven
#define LedKnopBeneden 12 //pin 12 wordt verbonden met LedKnopBeneden
#define KnopBoven 9 //pin 9 wordt verbonden met KnopBoven
#define KnopBeneden 8 //pin 8 wordt verbonden met KnopBeneden
#define DeurLed 13 //pin 13 wordt verbonden met deurled
#define IR_Sensor 3 //pin aangesloten voor IR sensor
int datArray[10] = {3, 159, 37, 13, 153, 73, 65, 31, 1, 9}; // array without the decimal {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
int num;// ruimte vrijmaken voor nummer van digit
void setup() {
pinMode(latchPin,OUTPUT);// latchpin als output
pinMode(dataPin,OUTPUT);// datapin als output
pinMode(clockPin,OUTPUT);//clockpin als output
pinMode(IR_Sensor,INPUT);//ir sensor als input
pinMode(LedKnopBoven,OUTPUT);//led knop beneden als output
pinMode(LedKnopBeneden,OUTPUT);//led knop beneden als output
pinMode(DeurLed,OUTPUT);//deur led als output
pinMode(KnopBoven,INPUT);// knop boven als input
pinMode(KnopBeneden,INPUT);// knop beneden als input
Serial.begin(9600);
Wire.begin(1);// adres van slave op 1 zetten
Wire.onRequest(sendDataToMaster);// voor dingen te sturen
Wire.onReceive(getLiftRelatedData);// voor dingen te ontvangen
}
void loop() {
if(digitalRead(KnopBoven) == HIGH){// als knopbove wordt ingedrukt
digitalWrite(LedKnopBoven, HIGH); //knopboven aanzetten
}
if(digitalRead(KnopBeneden) == HIGH){//als knopbeneden wordt ingedrukt
digitalWrite(LedKnopBeneden, HIGH);// knopbeneden aanzetten
Serial.println("aan2");
}
if(digitalRead(IR_Sensor) == 0 && (digitalRead(LedKnopBoven) == HIGH || digitalRead(LedKnopBeneden) == HIGH)){ //als hij sensor detecteerd en een van de twee of allebie de knoppen zijn ingedrukt
while(digitalRead(IR_Sensor) == 0){//wanneer sensor gedetecteerd is
digitalWrite(LedKnopBoven, LOW); //led knop boven wordt uit gezet
digitalWrite(LedKnopBeneden, LOW); //led knop beneden wordt uitgezet
delay(100);
digitalWrite(DeurLed, HIGH); //deur led aanzetten
}
}
else{ //anders
digitalWrite(DeurLed, LOW); // deur led uitzetten
}
}
void getLiftRelatedData(){
int dataMaster = Wire.read();// lees data van de master voor digitnummer
if (dataMaster == 0){//als digit 0 moet zijn
num = 0;//nummer van de 7segment display op 0 zetten
digitalWrite(latchPin,LOW);//7segment display leeg maken
shiftOut(dataPin,clockPin,MSBFIRST,datArray[num]);// de nummer die wordt gegeven in de shift out zetten
digitalWrite(latchPin,HIGH);// de 7segment display aan zetten en het nummer daadwerkelijk laten zien
}
else if (dataMaster == 1){//als digit 1 moet zijn
num = 1;//nummer van de 7segment display op 1 zetten
digitalWrite(latchPin,LOW);//7segment display leeg maken
shiftOut(dataPin,clockPin,MSBFIRST,datArray[num]);// de nummer die wordt gegeven in de shift out zetten
digitalWrite(latchPin,HIGH);// de 7segment display aan zetten en het nummer daadwerkelijk laten zien;
}
else if (dataMaster == 2){//als digit 2 moet zijn
num = 2;//nummer van de 7segment display op 2 zetten
digitalWrite(latchPin,LOW);//7segment display leeg maken
shiftOut(dataPin,clockPin,MSBFIRST,datArray[num]);// de nummer die wordt gegeven in de shift out zetten
digitalWrite(latchPin,HIGH);// de 7segment display aan zetten en het nummer daadwerkelijk laten zien
}
else if (dataMaster == 3){//als digit 3 moet zijn
num = 3;//nummer van de 7segment display op 3 zetten
digitalWrite(latchPin,LOW);//7segment display leeg maken
shiftOut(dataPin,clockPin,MSBFIRST,datArray[num]);// de nummer die wordt gegeven in de shift out zetten
digitalWrite(latchPin,HIGH);// de 7segment display aan zetten en het nummer daadwerkelijk laten zien
}
}
void sendDataToMaster(){
bool statusKnopBoven = 0, statusKnopBeneden = 0, statusSensor = 0;// defineer de status van de knoppen en sensor
if(digitalRead(KnopBoven) == HIGH || digitalRead(LedKnopBoven) == HIGH){ //als de knop boven ingedrukt is of is geweest
statusKnopBoven = 1;// zeg dat de status van de knop 1 is
statusKnopBeneden = 0;// zeg dat de status van de knop 0 is
statusSensor = 0;// zeg dat de status van de sensor 0 is
Wire.write(statusKnopBoven);// stuur de status van knop boven
Wire.write(statusKnopBeneden);// stuur de status van knop beneden
Wire.write(statusSensor);// stuur de status van de sensor
}
if(digitalRead(KnopBeneden) == HIGH || digitalRead(LedKnopBeneden) == HIGH){// als knop beneden ingedrukt is of is geweest
statusKnopBoven = 0;//zeg dat de status van de knop 0 is
statusKnopBeneden = 1;// zeg dat de status van de knop 1 is
statusSensor = 0;//zeg dat de status van de sensor 0 is
Wire.write(statusKnopBoven);//stuur de status van knop boven
Wire.write(statusKnopBeneden);// stuur de status van de knop beneden
Wire.write(statusSensor);// stuur de status van de sensor
}
if(digitalRead(IR_Sensor) == 0){//als de sensor iets detecteerd
statusKnopBoven = 0;// zeg dat de status van de knop 0 is
statusKnopBeneden = 0;//zeg dat de status van de knop 0 is
statusSensor = 1;// zeg dat de status van de sensor 1 is
Wire.write(statusKnopBoven);//stuur de status van de knop boven
Wire.write(statusKnopBeneden);// stuur de status van de knop beneden
Wire.write(statusSensor);// stuur de status van de sensor
}
if (digitalRead(IR_Sensor) == 1 && (digitalRead(KnopBeneden) == LOW || digitalRead(LedKnopBeneden) == LOW)&&(digitalRead(KnopBoven) == LOW || digitalRead(LedKnopBoven) == LOW) ){//als sensor niks detecteerd en beide knoppen niks detecteerd
statusKnopBoven = 0;//zeg dat de status van de knop 0 is
statusKnopBeneden = 0;//zeg dat de status van de knop 0 is
statusSensor = 0;// zeg dat de status van de sensor 0 is
Wire.write(statusKnopBoven);// stuurt de status van de knop boven
Wire.write(statusKnopBeneden);//stuurt de status van de knop beneden
Wire.write(statusSensor);// stuur de status van de sensor
}
}