#include <Arduino.h>
#include <Servo.h>
/* status
ready, no errorsa found
develoed and run under Linux, but is also adjusted so that Windows Arduino EDK can run it
*//* functionality
- runs train schedule
- opens and closes Nissen hut door
- switches lights on and off in mine when a train enters or leaves the mine
*///declare voids; dit is nodig voor de "andere" compiliers, niet voor Arduino IDE
voidsetup();voidloop();voidrunTrain();voidcheckReed();voidstoppen();voidsnelheid();voidspoorLetter(intlocalSpoor);voidreadLetter(intlocalReadVal);voidopenDoor();voidcloseDoor();voidtraject();voidtestRijRichting();voidwisselTest();voidreadReed();voidinput();voidblokStroom();voidblokOff();voidniks();voidblok();voidwissel();voidrichtingSnelheid();voidclear();// programma stuur variabelen
charrx_byte=0;Stringrx_str="";Stringrx_str_old="";intteller;intteller1;intteller2;intrunPin1=11;//op pin 5V runt prgm ipv computer
constintnop=99;intmijnPin1=52;//pin voor aansturing mijnlicht
intmijnLicht1=1;//toggle voor aansturing mijnlicht NB 1 is HIGH, geen actie relais dus
//definieren sporen pinnen
intsp1=22;// 1
intsp2=24;// 2
intsp3=26;// 3
intsp4=28;// 4
intsp5=30;// 5
intsp6=32;// 6
intsp7=34;// 7
intsp8=36;// 8
intsp9=38;// 9
intsp10=40;// 10
intsp11=42;// 11
intsp12=44;// 12
intsp13=46;// 13
//definieren pinnen rijrichting en snelheid
intdirPin1=8;intdirPin2=9;intpwmPin=12;//definieren pinnen reedcontacten
intrc_a=23;// A
intrc_b=25;// B
intrc_c=27;// C
intrc_d=29;// D
intrc_e=31;// E
intrc_f=33;// F
intrc_g=35;// G
intrc_h=37;// H
intrc_i=39;// I
intrc_j=41;// J
intrc_k=43;// K
intrc_l=45;// L
intrc_m=47;// M
//definieren pinnen wissels
intw10=2;intw11=3;intw20=4;intw21=5;intw30=6;intw31=7;//Deur variabelen
ServomyServo;intangle=30;intdoorPin1=10;intdoorOpen=60;intdoorClose=24;intdeur;intdeurOud;intdeurStand;//'0' = deur dicht, '1' = deur open
//programma rijdata
intsafeUnsafe;//Geeft aan of loc aangegeven REED heeft bereikt = 1 bij rijden
//int cycles; //Is aantal regels in spoorboekje||levert verderop problemen als cycles woredt voorzien van een waarde
intcycleCount=0;//geeft aan hoeveel stappen gezet zijn in spoorboekje
intallCount=0;//geeft aantal malen doorlopen spoorboek aan
intritTel1=0;intstopReed1;//wordt geladen vanuit spoorboekje
intstopReed2;//extra variabele voor test- en uitbreidingsdoelen, wordt geladen vanuit spoorboekje
intpinLaag=23;//geeft laagste pin voor reed-metingen aan
intpinHoog=47;//geeft hoogste pin voor reed-metingen aan
intblokLaag=22;//geeft laagste pin voor blok pinnen aan
intblokHoog=46;//geeft hoogste pin voor blok pinnen aan
intrijRichting1;//'1' bepaalt dat trein wegrijdt van de mijn
intspeedControl;//bepaalt snelheid van de trein
intrichting;//rijrichting, 1 = weg, 0 - terug
intreedVal;//globale variabele voor lezen reed
intpauze;//geeft tijd aan dat er pauze is in het spoorboekje
//aangapaste data als gevolg van herprogrammeren
intrijweg0;//spoor dat aangezet moet worden uit rijweg
intrijweg1;//spoor dat aangezet moet worden uit rijweg
intrijweg2;//spoor dat aangezet moet worden uit rijweg
intrijweg3;//spoor dat aangezet moet worden uit rijweg
intrijweg4;//spoor dat aangezet moet worden uit rijweg
intrijweg5;//spoor dat aangezet moet worden uit rijweg
intrijweg6;//spoor dat aangezet moet worden uit rijweg
intrijweg7;//spoor dat aangezet moet worden uit rijweg
intwissel1;//wissel dat aangezet moet worden uit rijweg
intwissel2;//wissel dat aangezet moet worden uit rijweg
intwissel3;//wisseldat aangezet moet worden uit rijweg
intpauze1;//spoor dat aangezet moet worden uit spoorboek
intrijwegNummer;//is de in spoorboek opgenomen verwijzing naar rijweg
intlocNummer1;//locnummer uit spoorboek
/*
de verticale rij is het locnummer, horizontaal de snelheid vooruit, achteruit, reserve, reserve
//let op: loc#0 is dus locomotief 1!!!!!!!!!!!
*/intlocInfo[8][4]={{63,72,1,0},//mijnloc 2 #0
{77,69,0,0},//Egger 4 ++> achteruit #1
{70,53,0,0},//goederentram #2
{130,160,0,0},//Leo #3
{74,65,1,0},//mijn loc 1 #4
{141,141,0,0},//tram #5 !! rijdt bij voorkeur achterstevoren !!
{122,120,0,0},//Egger1 #6
{77,63,0,0},//Plymouth #7
};//****************** start rij data *******************************************************************
/*rijweg data
waarde '0' geeft aan dat laatste blok bereik
waarde '9' geeft aan dat wissel niet gezet wordt
*/intrijweg[30][11]={{sp2,sp3,sp4,sp5,sp6,0,0,w10,w20,9},//#00
{sp2,sp3,sp4,sp5,sp6,sp7,0,w10,w20,9},//#01
{sp4,sp9,0,0,0,0,0,w11,9,9},//#02
{sp4,sp5,sp9,0,0,0,0,w11,w20,9},//#03
{sp4,sp5,sp6,sp9,0,0,0,w11,w20,9},//#04
{sp5,sp10,0,0,0,0,0,9,w21,w30},//#05
{sp5,sp6,sp10,0,0,0,0,9,w21,w30},//#06
{sp5,sp12,0,0,0,0,0,9,w21,w31},//#07
{sp5,sp6,sp12,0,0,0,0,9,w21,w31},//#08
{sp10,0,0,0,0,0,0,9,9,9},//#09
{sp9,0,0,0,0,0,0,9,9,9},//#10
{sp6,sp7,0,0,0,0,0,9,9,9},//#11
{sp5,sp6,0,0,0,0,0,9,9,9},//#12
{sp4,sp5,0,0,0,0,0,9,w20,9},//#13
{sp3,sp4,0,0,0,0,0,w10,9,9},//#14
{sp12,sp13,0,0,0,0,0,9,9,9},//#15
{sp5,sp12,sp13,0,0,0,0,9,9,9},//#16
{sp3,sp4,sp5,0,0,0,0,w10,w20,9},//#17
{sp4,sp9,0,0,0,0,0,w11,9,9},//#18
{sp4,sp5,sp6,sp7,sp9,0,0,w11,w20,9},//#19
{sp2,sp3,0,0,0,0,0,w10,9,9},//#20
{sp2,sp3,sp4,sp5,0,0,0,w10,w20,9},//#21
{sp3,sp4,sp5,sp6,0,0,0,w10,w20,9},//#22
{sp4,sp5,sp6,0,0,0,0,9,w20,9},//#23
{sp5,sp6,sp7,sp10,0,0,0,9,w21,w30},//24
{sp4,sp5,sp6,sp7,0,0,0,9,w20,0},//25
{sp5,sp6,sp7,sp12,0,0,0,9,w21,w31},//26
};//****************** beginr rij data *******************************************************************
intmijnloc2=0;//identificeert loc0 -= regel 0 avn de array locInfo
integger4=1;intgoederentram=2;intleo=3;intmijnloc1=4;inttram=5;integger1=6;intplymouth=7;intloc0=mijnloc2;//identificeert loc0, waarde die later bepaalt welke regel van locInfo wordt gebruikt
intloc1=plymouth;//
intloc2=goederentram;//
intloc3=0;//
intloc4=mijnloc1;//
intloc5=0;//
intloc6=0;//
intloc7=0;//
//cycles is gelijk aan # entries in 'spoorboek' (let op: eerste regel ='0'!!)
//wanneer geen stopReed nodig is wordt de tekst 'nop' ingevuld
//loc# gebruik: 0,1,2,3 = regel# cf locInfo
/*
int cycles = 25; //NB: cyclecount is incl. '0' !!
int spoorboek [50] [7]={
{loc1,6,rc_e,1,0,0}, //#0 loc 1 op sp 6
{loc2,7,rc_d,1,0,0}, //#1 loc 2 op sp 5
{loc2,5,rc_i,0,0,0}, //#2 loc 2 op sp 10
{0,0,nop,0,0,1}, //#3 deur open
{loc4,15,rc_h,1,2000,0}, //#4 loc 4 op sp 12
{loc4,7,rc_d,1,0,0}, //#5 loc 4 op sp 5
{0,0,nop,0,0,1}, //#6 deur dicht
{loc4,13,rc_c,0,3000,0}, //#7 loc 4 op sp 4
{loc2,5,rc_d,1,0,0}, //#8 loc 2 op sp 5
{loc2,7,rc_h,0,0,0}, //#9 loc 2 op sp 12
{0,0,nop,0,0,1}, //#10 deur open
{loc2,15,rc_g,0,0,0}, //#11 loc 2 op sp 13
{0,0,nop,0,3000,1}, //#12 deur dicht
{loc1,6,rc_i,0,0,0}, //#13 loc 1 op sp 10
{loc4,25,rc_f,1,3000,0}, //#14 loc 4 op sp 7
{0,0,nop,0,0,1}, //#15 deur open
{loc2,15,rc_h,1,0,0}, //#16 loc 2 op sp 12
{loc4,11,rc_e,0,0,0}, //#17 loc 4 op spoor 6
{loc2,7,rc_d,1,0,0}, //#18 loc 2 op sp 5
{loc2,13,rc_c,0,0,2000}, //#19 loc 2 op sp 4
{loc4,26,rc_h,0,0,0}, //#20 loc 4 op sp 12
{loc4,15,rc_g,0,0,0}, //#21 loc4 op sp 13
{loc2,13,rc_d,1,0,0}, //#22 loc 2 op sp 4
{0,0,nop,0,3000,1}, //#23 deur dicht
{loc2,7,rc_h,0,0,0}, //#24 loc 2 op sp 12
};
*//*
start situatie
- mijnloc2 in mijn (sp2)
- Plymouthop sp10
- Goederentramop sp12
- mijnloc1 op sp13
*/intcycles=49;//NB: cyclecount is incl. '0' !!
intspoorboek[50][7]={{loc1,5,rc_d,1,0,0},//#0 loc 1 op sp 5 e4
{loc1,3,rc_k,0,0,0},//#1 loc 1 op sp 9 e4
{loc0,0,rc_e,1,0,0},//#2 loc 0 op sp 6 m2
{loc2,7,rc_d,1,0,0},//#3 loc 2 op sp 5 gt
{loc0,11,rc_f,1,0,0},//#4 loc 0 op sp 7 m2
{loc2,5,rc_j,0,0,0},//#5 loc 2 op sp 10 gt
{loc0,1,rc_a,0,0,0},//#6 loc 0 op sp 2 ,2
{loc2,9,rc_i,0,0,0},//#7 loc 2 op sp 10 gt
{loc1,18,rc_c,1,0,0},//#8 loc 1 op sp 4 e4
{loc2,5,rc_d,1,0,0},//#9 loc 2 op sp 5 gt
{loc2,12,rc_e,1,0,0},//#10 loc 2 op sp 6 gt
{loc1,13,rc_d,1,0,0},//#11 loc 1 op sp 5 e4
{0,0,nop,0,0,1},//#12 deur open
{loc1,5,rc_i,0,0,0},//#13 loc 1 op sp 10 e4
{loc2,12,rc_d,0,2000,0},//#14 loc 2 op sp 5 gt
{loc2,13,rc_c,0,2000,0},//#15 loc 2 op sp 4 gt
{loc4,15,rc_h,1,0,0},//#16 loc 4 op sp 12 m1
{loc2,2,rc_l,0,0,0},//#17 loc 2 op sp 9 gt
{0,0,nop,0,0,1},//#18 deur dicht
{loc0,0,rc_e,1,0,0},//#19 loc 0 op sp 6 m2
{loc2,2,rc_k,0,0,0},//#20 loc 2 op sp 9 gt
{loc0,11,rc_f,1,0,0},//#21 loc 0 op sp 7
{loc2,4,rc_e,1,0,0},//#22 loc 2 op sp 6 gt
{loc4,7,rc_d,1,0,0},//#23 loc 4 op sp 5
{loc4,17,rc_b,0,4000,0},//#24 loc 4 op sp 3 m1
{loc2,23,rc_c,0,0,0},//#25 loc 2 op sp 4 gt
{loc4,20,rc_a,0,0,0},//#26 loc 4 op sp 2 m1
{loc2,22,rc_b,0,0,0},//#27 loc2 op sp 3 gt5
{loc0,19,rc_k,0,2000,0},//#28 loc 0 op sp 9 m2
{loc2,17,rc_d,1,0,0},//#29 loc 2 op sp 5 gt
{loc2,8,rc_h,0,0,0},//#30 loc 1 op sp 12 gt
{loc0,4,rc_e,1,0,0},//#31 loc 0 op sp 6 m2
{loc1,5,rc_d,1,0,0},//#32 loc 1 op sp 5 e4
{loc0,11,rc_f,1,0,0},//#33 loc 0 op sp 7 m2
{loc1,3,rc_k,0,0,0},//#34 loc 1 op sp 9 e4
{loc2,7,rc_d,1,0,0},//#35 loc 2 op sp 5 gt
{loc2,5,rc_j,0,3000,0},//#36 loc 2 op sp 10 gt
{loc2,9,rc_i,0,0,0},//#37 loc 2 op sp 10 gt
{loc4,21,rc_d,1,0,0},//#38 loc 4 op sp 5 m1
{loc4,7,rc_h,0,0,0},//#39 loc 4 op sp 12 m1
{0,0,nop,0,0,1},//#40 deur open
{loc0,1,rc_a,0,0,0},//#41 loc 0 op sp 2 m2
{loc4,15,rc_g,0,0,0},//#42 loc 4 op sp 13 m1
{0,0,nop,0,0,1},//#43 deur dicht
{loc1,18,rc_c,1,0,0},//#44 loc 1 op sp 4 e4
{loc2,5,rc_d,1,0,0},//#45 loc 2 op sp 5 gt
{loc2,7,rc_h,0,0,0},//#46 loc 2 op sp 12 gt
{loc1,3,rc_d,1,0,0},//#47 loc 1 op sp 5 e4
{loc1,5,rc_i,0,0,0},//#48 loc 1 op sp 10 e4
};//****************** einde rij data *********************************************
//****************** void setup *********************************************
voidsetup(){//initialisatie
myServo.attach(doorPin1);myServo.write(angle); closeDoor();
deurStand=0;Serial.begin(115200);Serial.println("spoorWare_PROD_20210426");Serial.println("versie 20210615");//initieren alle blokken (HIGH: er wordt GEEN stroom doorgelaten)
for(teller1=blokLaag;teller1<(blokHoog+1);teller1=teller1+2){digitalWrite(teller1,HIGH);delay(15);pinMode(teller1,OUTPUT);}//initieren rijrichting en snelheid
digitalWrite(dirPin1,0);digitalWrite(dirPin2,0);digitalWrite(pwmPin,0);pinMode(dirPin1,OUTPUT);pinMode(dirPin2,OUTPUT);pinMode(pwmPin,OUTPUT);//inintieren wissels
digitalWrite(w10,HIGH);digitalWrite(w11,HIGH);digitalWrite(w20,HIGH);digitalWrite(w21,HIGH);digitalWrite(w30,HIGH);digitalWrite(w31,HIGH);pinMode(w10,OUTPUT);pinMode(w11,OUTPUT);pinMode(w20,OUTPUT);pinMode(w21,OUTPUT);pinMode(w30,OUTPUT);pinMode(w31,OUTPUT);//initieren reedcontacten
for(teller=pinLaag;teller<(pinHoog+1);teller=teller+2){pinMode(teller,INPUT_PULLUP);}//setten stuur data
pinMode(runPin1,INPUT);digitalWrite(runPin1,LOW);pinMode(mijnPin1,OUTPUT);digitalWrite(mijnPin1,HIGH);Serial.print("einde INIT");Serial.print(" ");Serial.println(" start testen");}//****************** void loop *********************************************
voidloop(){// Serial.println("void loop gestart");
rx_str="";if(rx_str_old!="cont"){rx_str_old="";input();}if(rx_str_old=="reed"){readReed();Serial.print("einde readReed");}if(rx_str_old=="open"){openDoor();rx_str="";rx_str_old="";}if(rx_str_old=="dicht"){closeDoor();rx_str="";rx_str_old="";}if(rx_str_old=="niks"){niks();}if(rx_str_old=="wissel"){wisselTest();}if(rx_str_old=="clear"){clear();}if(rx_str_old=="allon"){blokStroom();}if(rx_str_old=="alloff"){blokOff();}if(rx_str_old=="traject"){traject();}// if ((rx_str_old == "run")||(digitalRead(runPin1) == HIGH)){
if((rx_str_old=="run")||(rx_str_old=="cont")){Serial.println();runTrain();}}//****************** void runtrain *********************************************
voidrunTrain(){Serial.println("start spoorboekverwerking (runTrain)");cycleCount=0;Serial.println(" ");while(cycleCount<(cycles)){input();if(rx_str=="quit"){Serial.println("quitted");clear();return;}//hier inlezen data in variabelen in plaats van indirecte addressering
//lezen spoorboek data
pauze=spoorboek[cycleCount][4];//pauze uit spoorboek
rijwegNummer=spoorboek[cycleCount][1];//verwijst naar rijweg regel
locNummer1=spoorboek[cycleCount][0];//welke loc wordt gebruikt
stopReed1=spoorboek[cycleCount][2];//bepaalt stopplaats
richting=spoorboek[cycleCount][3];//bepaalt rijrichting
deur=spoorboek[cycleCount][5];//toggle deur open/dicht
//lezen locInfo data
if(richting==1){speedControl=locInfo[locNummer1][0];//bepaalt snelheid van de loc in de rijrichting
}else{speedControl=locInfo[locNummer1][1];//bepaalt snelheid van de loc in de rijrichting
}//lezen rijweg data
rijweg0=rijweg[rijwegNummer][0];//spoor dat aangezet moet worden uit rijweg
rijweg1=rijweg[rijwegNummer][1];//spoor dat aangezet moet worden uit rijweg
rijweg2=rijweg[rijwegNummer][2];//spoor dat aangezet moet worden uit rijweg
rijweg3=rijweg[rijwegNummer][3];//spoor dat aangezet moet worden uit rijweg
rijweg4=rijweg[rijwegNummer][4];//spoor dat aangezet moet worden uit rijweg
rijweg5=rijweg[rijwegNummer][5];//spoor dat aangezet moet worden uit rijweg
rijweg6=rijweg[rijwegNummer][6];//spoor dat aangezet moet worden uit rijweg
wissel1=rijweg[rijwegNummer][7];//wissel uit rijweg
wissel2=rijweg[rijwegNummer][8];//wissel uit rijweg
wissel3=rijweg[rijwegNummer][9];//wissel uit rijweg
//input verslag
Serial.print("cycleCount: ");//aangeven: waar zijn we in het spoorboek?
Serial.println(cycleCount);Serial.print("allCount: ");//aangeven: waar zijn we in het totaal?
Serial.println(allCount);Serial.print("locnummer: ");Serial.println(locNummer1);Serial.print("richting: ");Serial.println((richting));Serial.print("locsnelheid = ");Serial.println(speedControl);Serial.println();Serial.print("stopReed pin is: ");readLetter(stopReed1);//printen gebeurt in readLetter
Serial.println();//routing stopReed maakt geen newline
Serial.print("deur = ");Serial.println(deur);Serial.print("deurstand = ");Serial.println(deurStand);if(rijweg0){Serial.print("rijweg0: ");spoorLetter(rijweg0);};if(rijweg1){Serial.print("rijweg1: ");spoorLetter(rijweg1);};if(rijweg2){Serial.print("rijweg2: ");spoorLetter(rijweg2);};if(rijweg3){Serial.print("rijweg3: ");spoorLetter(rijweg3);};if(rijweg4){Serial.print("rijweg4: ");spoorLetter(rijweg4);};if(rijweg5){Serial.print("rijweg5: ");spoorLetter(rijweg5);};if(rijweg6){Serial.print("rijweg6: ");spoorLetter(rijweg6);};Serial.println();//einde input verslag
if(pauze){delay(pauze);Serial.println("prgm pauze");pauze=0;}if((deur==1)&(deurStand==0)){openDoor();Serial.println();Serial.println("bij open deur geweest");Serial.print("deur stand, deur: ");Serial.print(deurStand);Serial.print(" ");Serial.println(deur);Serial.println();}if((deur==1)&(deurStand==1)){closeDoor();Serial.println();Serial.println("bij sluiten deur geweest");Serial.print("deurstand, deur: ");Serial.print(deurStand);Serial.print(" ");Serial.println(deur);Serial.println();}//aansturen mijnlicht
for(intlocalTel1=0;localTel1<7;localTel1++){if(rijweg[rijwegNummer][localTel1]==sp2){mijnLicht1=0;digitalWrite(mijnPin1,mijnLicht1);Serial.print(rijweg[rijwegNummer][localTel1]);Serial.print(" ");Serial.println(mijnLicht1);}}//loc laten rijden
if(stopReed1!=nop){//stopReed wordt alleen gezet wanneer er gereden wordt
safeUnsafe=1;blok();//set blokken
wissel();//set wissels
richtingSnelheid();//set rijrichting en snelheid
checkReed();// prgm blijft in checkReed zolang loc niet boven reed is
stoppen();// alleen de blokken die onder stroom staan stroom weghalen
safeUnsafe=0;}if(mijnLicht1==0){mijnLicht1=1;digitalWrite(mijnPin1,mijnLicht1);Serial.print("mijnLicht1 = ");Serial.println("mijnLicht1");}//einde cycleCount rit
cycleCount=cycleCount+1;// klaar voor volgende regel van het spoorboekje
Serial.println();Serial.println("====++++====++++====++++====++++====");Serial.print("nieuwe cycleCount: ");Serial.println(cycleCount);Serial.println();delay(2000);}//gereed voor volgende cyclus
cycleCount=0;allCount=allCount+1;Serial.println("Einde spoorboek run");if(rx_str_old!="cont"){clear();}}//****************** subroutines runtrain *******************************************
voidblok(){// blokken "aan" zetten; let op: LOW is stroom wel, HIGH is stroom niet
Serial.println("aanzetten rijwegen");if(rijweg0!=0)digitalWrite(rijweg0,LOW);if(rijweg1!=0)digitalWrite(rijweg1,LOW);if(rijweg2!=0)digitalWrite(rijweg2,LOW);if(rijweg3!=0)digitalWrite(rijweg3,LOW);if(rijweg4!=0)digitalWrite(rijweg4,LOW);if(rijweg5!=0)digitalWrite(rijweg5,LOW);if(rijweg6!=0)digitalWrite(rijweg6,LOW);Serial.println("blokken gezet");}voidwissel(){// wissels zetten
if(wissel1!=9){digitalWrite(wissel1,LOW);delay(20);digitalWrite(wissel1,HIGH);}if(wissel2!=9){digitalWrite(wissel2,LOW);delay(20);digitalWrite(wissel2,HIGH);}if(wissel3!=9){digitalWrite(wissel3,LOW);delay(20);digitalWrite(wissel3,HIGH);}Serial.println("wissels gezet");}voidrichtingSnelheid(){// richting bepalen
if((richting<0)||(richting>1)){Serial.print("foute richting ");niks();}if(richting==0){digitalWrite(dirPin1,HIGH);digitalWrite(dirPin2,LOW);analogWrite(pwmPin,speedControl);}if(richting==1){digitalWrite(dirPin1,LOW);digitalWrite(dirPin2,HIGH);analogWrite(pwmPin,speedControl);}}voidcheckReed(){reedVal=digitalRead(stopReed1);while(reedVal==1){reedVal=digitalRead(stopReed1);if(reedVal==0){return;}}}voidstoppen(){Serial.println("stoppen");digitalWrite(dirPin1,HIGH);digitalWrite(dirPin2,HIGH);analogWrite(pwmPin,0);if(rijweg0!=0)digitalWrite(rijweg0,HIGH);if(rijweg1!=0)digitalWrite(rijweg1,HIGH);if(rijweg2!=0)digitalWrite(rijweg2,HIGH);if(rijweg3!=0)digitalWrite(rijweg3,HIGH);if(rijweg4!=0)digitalWrite(rijweg4,HIGH);if(rijweg5!=0)digitalWrite(rijweg5,HIGH);if(rijweg6!=0)digitalWrite(rijweg6,HIGH);}voidreadLetter(intlocalReadVal){intteller2=0;for(intlocalTeller=23;localTeller<=47;localTeller=localTeller+2){teller2++;if(localReadVal==localTeller){Serial.write(64+teller2);//'1' = acsii 49
}}}voidspoorLetter(intlocalSpoor){switch(localSpoor){case22:Serial.println("1");break;case24:Serial.println("2");break;case26:Serial.println("3");break;case28:Serial.println("4");break;case30:Serial.println("5");break;case32:Serial.println("6");break;case34:Serial.println("7");break;case36:Serial.println("8");break;case38:Serial.println("9");break;case40:Serial.println("10");break;case42:Serial.println("11");break;case44:Serial.println("12");break;case46:Serial.println("13");break;default:break;}}voidopenDoor(){Serial.println("openDoor");while(angle<doorOpen){angle=angle+1;Serial.print("angle: ");Serial.println(angle);myServo.write(angle);delay(100);}deurStand=1;deur=0;}voidcloseDoor(){Serial.println("closeDoor");while(angle>doorClose){angle=angle-1;Serial.print("angle: ");Serial.println(angle);myServo.write(angle);delay(100);}deurStand=0;deur=0;}voidinput(){if(Serial.available()!=0){rx_str="";while(Serial.available()>0){rx_byte=Serial.read();delay(20);if(rx_byte!='\n'){rx_str+=rx_byte;Serial.println(rx_str);}}if((rx_str_old!=rx_str)&&(rx_str!="")){Serial.println(rx_str);rx_str_old=rx_str;}}}voidclear(){rx_str="";rx_str_old="";Serial.println("input string leeg");}//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
voidblokOff(){digitalWrite(dirPin1,0);digitalWrite(dirPin1,0);digitalWrite(pwmPin,0);// LET OP: LOW betekent dat stroom WORDT DOORGELATEN !!!!
for(teller1=blokLaag;teller1<(blokHoog+1);teller1=teller1+2){digitalWrite(teller1,HIGH);delay(30);pinMode(teller1,OUTPUT);}rx_str="";}//_________________________________________________________________________
voidtraject(){Serial.println("voor deze module moet er een analoge input op A0 zijn");speedControl=((1024-analogRead(A0))/4);//alternatief over twee wissels
//LET OP: dan wissels zetten uitzetten
//"aan" zetten sporen 4,5 en 6
digitalWrite(sp3,LOW);digitalWrite(sp4,LOW);digitalWrite(sp5,LOW);digitalWrite(sp6,LOW);//wissel 1 en 2 rechtuit zetten
digitalWrite(w10,LOW);delay(20);digitalWrite(w10,HIGH);digitalWrite(w20,LOW);delay(20);digitalWrite(w20,HIGH);//we willen starten in de '1' richting, maar de PROC draait de waarde direct om
rijRichting1=0;testRijRichting();digitalWrite(dirPin1,LOW);digitalWrite(dirPin2,HIGH);analogWrite(pwmPin,0);while(rx_str!="quit"){if(rx_str=="quit"){clear();return;}speedControl=((analogRead(A0))/4);Serial.println(255-speedControl);analogWrite(pwmPin,(255-speedControl));if(((digitalRead(rc_b)==0)&&(rijRichting1==0))||((digitalRead(rc_e)==0)&&(rijRichting1==1))){digitalWrite(dirPin1,0);digitalWrite(dirPin2,0);digitalWrite(pwmPin,0);testRijRichting();}input();}blokOff();Serial.println("Einde traject test");}voidtestRijRichting(){rijRichting1=1-rijRichting1;delay(500);if(rijRichting1==0){digitalWrite(dirPin1,HIGH);digitalWrite(dirPin2,LOW);analogWrite(pwmPin,analogRead(A0/4));}if(rijRichting1==1){digitalWrite(dirPin1,LOW);digitalWrite(dirPin2,HIGH);analogWrite(pwmPin,analogRead(A0/4));}}// wisseltest
voidwisselTest(){digitalWrite(w10,LOW);delay(30);digitalWrite(w10,HIGH);delay(500);digitalWrite(w11,LOW);delay(30);digitalWrite(w11,HIGH);delay(500);digitalWrite(w10,LOW);delay(30);digitalWrite(w10,HIGH);delay(500);digitalWrite(w20,LOW);delay(30);digitalWrite(w20,HIGH);delay(500);digitalWrite(w21,LOW);delay(30);digitalWrite(w21,HIGH);delay(500);digitalWrite(w20,LOW);delay(30);digitalWrite(w20,HIGH);delay(500);digitalWrite(w30,LOW);delay(30);digitalWrite(w30,HIGH);delay(500);digitalWrite(w31,LOW);delay(30);digitalWrite(w31,HIGH);delay(500);digitalWrite(w30,LOW);delay(30);digitalWrite(w30,HIGH);delay(500);rx_str="";Serial.println("einde wisseltest");}//reedRead voor lezen reedcontacten
voidreadReed(){Serial.println("Lezen reedcontacten");while(rx_str=="reed"){for(intteller=pinLaag;teller<pinHoog+1;teller++){if(digitalRead(teller)==0){switch(teller){case23:Serial.println("A");break;case25:Serial.println("B");break;case27:Serial.println("C");break;case29:Serial.println("D");break;case31:Serial.println("E");break;case33:Serial.println("F");break;case35:Serial.println("G");break;case37:Serial.println("H");break;case39:Serial.println("I");break;case41:Serial.println("J");break;case43:Serial.println("K");break;case45:Serial.println("L");break;case47:Serial.println("M");break;default:break;}}}input();}}voidblokStroom(){//initieren alle blokken (HIGH: er wordt GEEN stroom doorgelaten)
// LET OP: LOW betekent dat stroom WORDT DOORGELATEN !!!!
for(teller1=blokLaag;teller1<(blokHoog+1);teller1=teller1+2){digitalWrite(teller1,LOW);delay(30);pinMode(teller1,OUTPUT);}digitalWrite(dirPin1,0);digitalWrite(dirPin1,1);digitalWrite(pwmPin,250);rx_str="";}voidniks(){Serial.print("void niks, make pin 12 HIGH");Serial.println(" or give new command ");intfork=digitalRead((runPin1));if((fork==0)or(rx_str="niks")){fork=digitalRead((runPin1));input();}Serial.println("relax");rx_str="";}//=========================================================================
//*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*
//=========================================================================