#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 void setup(); void loop(); void runTrain(); void checkReed(); void stoppen(); void snelheid(); void spoorLetter(int localSpoor); void readLetter(int localReadVal); void openDoor(); void closeDoor(); void traject(); void testRijRichting(); void wisselTest(); void readReed(); void input(); void blokStroom(); void blokOff(); void niks(); void blok(); void wissel(); void richtingSnelheid(); void clear(); // programma stuur variabelen char rx_byte = 0; String rx_str = ""; String rx_str_old = ""; int teller; int teller1; int teller2; int runPin1=11; //op pin 5V runt prgm ipv computer const int nop = 99; int mijnPin1 = 52; //pin voor aansturing mijnlicht int mijnLicht1 = 1; //toggle voor aansturing mijnlicht NB 1 is HIGH, geen actie relais dus //definieren sporen pinnen int sp1 = 22; // 1 int sp2 = 24; // 2 int sp3 = 26; // 3 int sp4 = 28; // 4 int sp5 = 30; // 5 int sp6 = 32; // 6 int sp7 = 34; // 7 int sp8 = 36; // 8 int sp9 = 38; // 9 int sp10 = 40; // 10 int sp11 = 42; // 11 int sp12 = 44; // 12 int sp13 = 46; // 13 //definieren pinnen rijrichting en snelheid int dirPin1 = 8; int dirPin2 = 9; int pwmPin = 12; //definieren pinnen reedcontacten int rc_a = 23; // A int rc_b = 25; // B int rc_c = 27; // C int rc_d = 29; // D int rc_e = 31; // E int rc_f = 33; // F int rc_g = 35; // G int rc_h = 37; // H int rc_i = 39; // I int rc_j = 41; // J int rc_k = 43; // K int rc_l = 45; // L int rc_m = 47; // M //definieren pinnen wissels int w10 = 2; int w11 = 3; int w20 = 4; int w21 = 5; int w30 = 6; int w31 = 7; //Deur variabelen Servo myServo; int angle = 30; int doorPin1 = 10; int doorOpen = 60; int doorClose = 24; int deur; int deurOud; int deurStand; //'0' = deur dicht, '1' = deur open //programma rijdata int safeUnsafe; //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 int cycleCount = 0; //geeft aan hoeveel stappen gezet zijn in spoorboekje int allCount = 0; //geeft aantal malen doorlopen spoorboek aan int ritTel1 = 0; int stopReed1; //wordt geladen vanuit spoorboekje int stopReed2; //extra variabele voor test- en uitbreidingsdoelen, wordt geladen vanuit spoorboekje int pinLaag = 23; //geeft laagste pin voor reed-metingen aan int pinHoog = 47; //geeft hoogste pin voor reed-metingen aan int blokLaag = 22; //geeft laagste pin voor blok pinnen aan int blokHoog = 46; //geeft hoogste pin voor blok pinnen aan int rijRichting1; //'1' bepaalt dat trein wegrijdt van de mijn int speedControl; //bepaalt snelheid van de trein int richting; //rijrichting, 1 = weg, 0 - terug int reedVal; //globale variabele voor lezen reed int pauze; //geeft tijd aan dat er pauze is in het spoorboekje //aangapaste data als gevolg van herprogrammeren int rijweg0; //spoor dat aangezet moet worden uit rijweg int rijweg1; //spoor dat aangezet moet worden uit rijweg int rijweg2; //spoor dat aangezet moet worden uit rijweg int rijweg3; //spoor dat aangezet moet worden uit rijweg int rijweg4; //spoor dat aangezet moet worden uit rijweg int rijweg5; //spoor dat aangezet moet worden uit rijweg int rijweg6; //spoor dat aangezet moet worden uit rijweg int rijweg7; //spoor dat aangezet moet worden uit rijweg int wissel1; //wissel dat aangezet moet worden uit rijweg int wissel2; //wissel dat aangezet moet worden uit rijweg int wissel3; //wisseldat aangezet moet worden uit rijweg int pauze1; //spoor dat aangezet moet worden uit spoorboek int rijwegNummer; //is de in spoorboek opgenomen verwijzing naar rijweg int locNummer1; //locnummer uit spoorboek /* de verticale rij is het locnummer, horizontaal de snelheid vooruit, achteruit, reserve, reserve //let op: loc#0 is dus locomotief 1!!!!!!!!!!! */ int locInfo[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 */ int rijweg [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 ******************************************************************* int mijnloc2 = 0; //identificeert loc0 -= regel 0 avn de array locInfo int egger4 = 1; int goederentram = 2; int leo = 3; int mijnloc1 = 4; int tram = 5; int egger1 = 6; int plymouth = 7; int loc0 = mijnloc2; //identificeert loc0, waarde die later bepaalt welke regel van locInfo wordt gebruikt int loc1 = plymouth; // int loc2 = goederentram;// int loc3 = 0; // int loc4 = mijnloc1; // int loc5 = 0; // int loc6 = 0; // int loc7 = 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 */ int cycles = 49; //NB: cyclecount is incl. '0' !! int spoorboek [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 ********************************************* void setup(){ //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 ********************************************* void loop(){ // 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 ********************************************* void runTrain(){ 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 (int localTel1 = 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 ******************************************* void blok(){ // 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"); } void wissel(){ // 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"); } void richtingSnelheid(){ // 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); } } void checkReed(){ reedVal=digitalRead(stopReed1); while (reedVal==1){ reedVal=digitalRead(stopReed1); if (reedVal==0){ return; } } } void stoppen(){ 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); } void readLetter(int localReadVal){ int teller2=0; for (int localTeller = 23; localTeller <= 47; localTeller = localTeller + 2){ teller2++; if (localReadVal == localTeller){ Serial.write (64 + teller2); //'1' = acsii 49 } } } void spoorLetter(int localSpoor){ switch (localSpoor){ case 22: Serial.println("1"); break; case 24: Serial.println("2"); break; case 26: Serial.println("3"); break; case 28: Serial.println("4"); break; case 30: Serial.println("5"); break; case 32: Serial.println("6"); break; case 34: Serial.println("7"); break; case 36: Serial.println("8"); break; case 38: Serial.println("9"); break; case 40: Serial.println("10"); break; case 42: Serial.println("11"); break; case 44: Serial.println("12"); break; case 46: Serial.println("13"); break; default: break; } } void openDoor(){ Serial.println("openDoor"); while (angle<doorOpen){ angle=angle+1; Serial.print("angle: "); Serial.println(angle); myServo.write(angle); delay(100); } deurStand = 1; deur = 0; } void closeDoor(){ Serial.println("closeDoor"); while (angle>doorClose){ angle=angle-1; Serial.print("angle: "); Serial.println(angle); myServo.write(angle); delay(100); } deurStand = 0; deur = 0; } void input(){ 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; } } } void clear(){ rx_str = ""; rx_str_old=""; Serial.println("input string leeg"); } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ void blokOff(){ 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 = ""; } //_________________________________________________________________________ void traject(){ 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"); } void testRijRichting(){ 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 void wisselTest(){ 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 void readReed(){ Serial.println("Lezen reedcontacten"); while (rx_str == "reed"){ for (int teller=pinLaag;teller < pinHoog+1;teller++){ if (digitalRead(teller)==0){ switch (teller){ case 23: Serial.println("A"); break; case 25: Serial.println("B"); break; case 27: Serial.println("C"); break; case 29: Serial.println("D"); break; case 31: Serial.println("E"); break; case 33: Serial.println("F"); break; case 35: Serial.println("G"); break; case 37: Serial.println("H"); break; case 39: Serial.println("I"); break; case 41: Serial.println("J"); break; case 43: Serial.println("K"); break; case 45: Serial.println("L"); break; case 47: Serial.println("M"); break; default: break; } } } input(); } } void blokStroom(){ //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 = ""; } void niks(){ Serial.print("void niks, make pin 12 HIGH"); Serial.println(" or give new command "); int fork=digitalRead((runPin1)); if ((fork == 0) or (rx_str="niks")){ fork=digitalRead((runPin1)); input(); } Serial.println("relax"); rx_str = ""; } //========================================================================= //*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@* //=========================================================================