#include <Servo.h>
bool debug = true;
Servo servo1; // create servo object to control a servo
// twelve servo objects can be created on most boards
// To Do: pinnummers goed zetten!!!
// voor de besturing van schakelaars enzo
//0 en 1 kunnen in arduino niet gebruikt worden als serial monitor aan staat
// On Arduino Uno, the PWM pins are 3, 5, 6, 9, 10 and 11.
int input1 = A0; // input voor drukknop deur open
int input2 = A1; // input voor drukknop deur dicht
int input3 = A2; // input voor drukknop laslicht
int input4 = A3; // input voor schakelaar TL verlichting
// voor de deurservo
//https://docs.arduino.cc/learn/electronics/servo-motors
int pos = 0; // variable to store the servo position
int steps = 1; // aantal stappen per graad beweging, heeft ook invloed op de snelheid!
int ma1 = 180; // maximum angle
int sp = 10; // speed of the movement
int servopin = 3; // attaches the servo on pin servopin to the servo object
bool DoorOpen = false;// De deur is niet open
bool DoorClosed = false; // De deur is niet dicht
// beide bovenstaande worden gebruikt om de deur bij het begin van de loop open te doen
int check0 = 8;// groene led bij open deur
int check1 = 2;//rode led bij deur dicht of in beweging
// voor het laslicht
//https://steamtraininfo.com/admin/home/arduino-projects/arduino-arc-welder
int ledPin1 = 9; // wit LED connected to digital pin 9 wit;
int ledPin2 = 10; // blauw LED connected to digital pin 7 blauw
int ledPin3 = 11; // rood LED connected to digital pin 10 rood;
// Voor de binnenverlichting TLLicht
// https://github.com/jackmachiela/FactoryLights/blob/main/FactoryLights/FactoryLights.ino
int ledPin = 5; // TLLicht via transistor op 12Volt
bool LightOn = false;
int maxBrightnessLevel = 10;
int currentBrightness = 0;
int stutterSeed = 5;
int stutterLength = 5;
int check2 = 4;// brandt als binnenverlichting aan is
/*
On Arduino Uno, the PWM pins are 3, 5, 6, 9, 10 and 11.
The frequency of PWM signal on pins 5 and 6 will be about 980Hz and on other pins will be 490Hz.
The PWM pins are labeled with ~ sign.
*/
// voor de bezetmelding
// het simpelst is een micro switch op bufferhoogte (vlak voor het einde van het spoor) en een led, evt. met een relais
void setup() {
servo1.attach(servopin); //verbind de servo via pin servopin
Serial.begin(9600);// voor debuggen
pinMode(ledPin, OUTPUT); // TLLicht
pinMode(ledPin1, OUTPUT); // LED connected to digital pin 9 wit
pinMode(ledPin2, OUTPUT); // LED connected to digital pin 7 blauw
pinMode(ledPin3, OUTPUT); // LED connected to digital pin 10 rood
pinMode(input1, INPUT_PULLUP); // deur gaat open
pinMode(input2, INPUT_PULLUP); // deur gaat dicht
pinMode(input3, INPUT_PULLUP); // laslicht
pinMode(input4, INPUT_PULLUP); // TL verlichting
pinMode(check0, OUTPUT);// groen bij open deur
pinMode(check1, OUTPUT);//knippert bij deur open/dicht, rood bij deur dicht
pinMode(check2, OUTPUT);// binnenverlichting aan
}
//LET OP: LICHT GAAT UIT ALS ER EEN ANDERE KNOP WORDT INGEDRUKT
void loop() {
// hier de deur openen bij het begin
if(DoorOpen == false && DoorClosed == false) {
if (debug) {
Serial.println("Deur open");
}
ServoOpen () ;
}
//analogWrite(ledPin, 0);//TL licht uit
// wachten op knopdruk
if (digitalRead(input1) == LOW) {
if(DoorClosed) {
if (debug) {
Serial.println("Deur open");
}
ServoOpen () ;
}
/*
if(DoorOpen){
if (debug) {
Serial.println("Deur dicht");
}
ServoDicht () ;
}
*/
}
if (digitalRead(input2) == LOW) {
if(DoorOpen){
if (debug) {
Serial.println("Deur dicht");
}
ServoDicht () ;
}
}
if (digitalRead(input3) == LOW) {
if (debug) {
Serial.println("lassen");
}
LasLicht () ;
}
if (digitalRead(input4) == LOW && LightOn == false) {
if (debug) {
Serial.println("licht aan");
}
TLLicht () ;
digitalWrite(check2, HIGH);
}
/*
else {
analogWrite(ledPin, 0);// licht uitlaten
digitalWrite(check2, LOW);
LightOn = false;
}
*/
if (digitalRead(input4) == LOW && LightOn == true){
// doe het licht uit als de knop opnieuw wordt ingedrukt
analogWrite(ledPin, 0);// licht uit
digitalWrite(check2, LOW);
if(debug) {Serial.println("licht uit");}
delay(500);// contact dender omzeilen
LightOn = false;
}
/*
if (debug) {
Serial.print("lighton: ");
if (LightOn == true) {
Serial.println("true");
}
if (LightOn == false) {
Serial.println("false");
}
}
*/
else {
if (LightOn == true) {
analogWrite(ledPin, 255);// licht aanhouden, ook als knop niet is ingedrukt
digitalWrite(check2, HIGH);
}
else {
analogWrite(ledPin, 0);// licht uitlaten
digitalWrite(check2, LOW);
}
}
}
// functies
void ServoOpen() {
digitalWrite(check0, LOW);
for (pos = 0; pos <= ma1; pos += steps) { // goes from 0 degrees to 180 degrees
// in #steps of 1 degree
servo1.write(pos); // tell servo to go to position in variable 'pos' To Do divided by #steps
digitalWrite(check1, HIGH);// hier knipperled aan
delay(sp); // waits sp msec for the servo to reach the position
// sp is te laag om led te laten knipperen
digitalWrite(check1, LOW);//hier knipperled uit
}
DoorOpen = true;
DoorClosed = false;
digitalWrite(check0, HIGH);
return DoorOpen;
}
void ServoDicht() {// dit werkt zo waarschijnlijk niet
digitalWrite(check0, LOW);
for (pos = ma1; pos >= 0; pos -= steps) { // goes from 180 degrees to 0 degrees
servo1.write(pos); // tell servo to go to position in variable 'pos' To Do divided by #steps
digitalWrite(check1, HIGH);// hier knipperled aan
delay(sp); // waits sp msec for the servo to reach the position
// sp is te laag om led te laten knipperen
digitalWrite(check1, LOW);//hier knipperled uit
}
DoorClosed = true;
DoorOpen = false;
digitalWrite(check0, LOW);
digitalWrite(check1, HIGH);
return DoorClosed;
}
void LasLicht() {
/*
Laslicht generator met 3 LEDs.
Witte en blauwe LEDs flikkeren (pseudo-)random op. De rode LED gloeit ondertussen langzaam op.
Bij het einde van de lus, dooft de rode LED langzaam.
*/
int lus = random(2, 8); //het aantal keren dat de loop wordt doorlopen
int tel = 0;
if (tel <= lus) {
int i, count, j, j1;
count = random(10, 60);
j = 0;
for (i = 0; i <= count; i++)
{
digitalWrite(ledPin1, HIGH); // set the white LED on
delay(random(80));
analogWrite(ledPin3, j);// fade in the red LED
if (j > 100) {
j = 100;
}
j++;
digitalWrite(ledPin2, HIGH); // set the blue LED on
delay(random(60));
digitalWrite(ledPin1, LOW); // set the white LED off
digitalWrite(ledPin2, LOW); // set the blue LED off
delay(random(200));
}
for (j1 = j; j1 > 0; j1--) {
analogWrite(ledPin3, j1);// fade out the red LED
delay(8);
}
analogWrite(ledPin3, 0);// uit
tel++;
delay(random(1800, 3000));
}
else {
analogWrite(ledPin3, 0);// uit
}
return;
}
void TLLicht() {
/*
if (debug) {
Serial.println(maxBrightnessLevel);
}
*/
// delay(random(100));
analogWrite(ledPin, 0);
delay(random(1000));
while (stutterLength < 1000) {
stutterLength = (stutterLength + (random(stutterSeed)));
stutterSeed = (stutterSeed * 1.2);
/*
Serial.print(" [ Length = ");
Serial.print(stutterLength);
Serial.print(" Seed = ");
Serial.print(stutterSeed);
Serial.print(" ] ");
*/
analogWrite(ledPin, random(20)*maxBrightnessLevel);
delay(random(10) + stutterLength);
}
/*
if (debug) {
Serial.println(" Flash ");
}
*/
stutterLength = 5;
stutterSeed = 5;
analogWrite(ledPin, 255);
digitalWrite(check2, HIGH);
LightOn = true;
delay(1000);
return LightOn;
}