beste iedereen,
ik wil aan de hand van 2 contacten de richting van een trein kunnen bepalen:
dit zijn de tijdcodes van de contacten, op het moment dat het contact geactiveerd wordt schrijf ik Millis() weg in een array
Contact A:
7860,9362,9397,9398,10809,11998,12091,13137,14285,15427,16508,17517,18447,19499,19527,20435,21305,22195,22213,23157,24092,24111,25000,25018,25894,26737,27579,27595,27595,28430,29325,30161,31027,31045,31887,32698,33538,34500,34501,35313,35315,35328,36116,36993,37895,38659,39497,40268
Contact B:
7907,9498,10910,12063,13209,14355,15480,16558,17575,18505,19572,20489,21356,22242,23212,24148,25049,25948,26790,27630,28478,29373,30212,31075,31931,32742,33588,34547,35352,36182,37009,37980,38706,39544,40311,
op het moment kan ik alleen zien dat er een trein langs komt, en ik kan hier de snelheid van bepalen( door de lengte van het signaal te meten en te verrekenen met de lengte van het contact)
ik een perfecte situatie zou het gewoon array 1 - array 2 zijn, en kijken of de uitkomst positief of negatief is, maar in de praktijk mis ik wel eens een signaal, en zou dit dus niet gaan werken
in feite wil ik hetzelfde als het systeem wat ze gebruiken om autos mee te tellen, met 2 van die rubberen slangen over de weg( ik heb hier naar zitten zoeken, hier worden ook de tijdcodes opgeslagen, en het rekenwerk wordt achteraf gedaan, ik wil het realtime)
en hier is de code zoals ik hem nu gebruik:
void rc() {
rcAval = digitalRead(rcA) ;
rcBval = digitalRead(rcB) ;
if (rcAval == 0 ) {
if ( veiligO != veilig && SC == 0) {
veiligO = veilig;
SC = 1 ;
}
T60000=millis();
veilig = 0;
if (WL==0){
veiligL=0;
}
else if (WR==0){
veiligR=0;
}
if (rcAlast == 1 && rcAi <200) {
rcAlast = 0 ;
rcAtime = millis();
if (rcAarr[rcAi] > 3){
rcAi = rcAi + 1 ;
assen = assen + 1 ;
}
}
}
else if (rcAval == 1 && rcAlast == 0 ) {
rcAlast = 1 ;
rcAarr[rcAi] = rcAtime;
float rcAs = (40.0/(float)(millis()-rcAarr[rcAi]));
Serial.print("rcA m/sec: ");
Serial.print(rcAs);
Serial.print(" as nr: ");
Serial.println(rcAi);
}
if (rcBval == 0 ) {
if ( veiligO != veilig && SC == 0) {
veiligO = veilig;
SC = 1 ;
}
T60000=millis();
veilig = 0;
if (WL==0){
veiligL=0;
}
else if (WR==0){
veiligR=0;
}
if (rcBlast == 1 && rcBi <200) {
rcBlast = 0 ;
rcBtime = millis();
if (rcBarr[rcBi] > 3){
rcBi = rcBi + 1 ;
assen = assen + 1 ;
}
}
}
else if (rcBval == 1 && rcBlast == 0 ) {
rcBlast = 1 ;
rcBarr[rcBi] = rcBtime;
float rcBs = (40.0/(float)(millis()-rcBarr[rcBi]));
Serial.print("rcB m/sec: ");
Serial.print(rcBs);
Serial.print(" as nr: ");
Serial.println(rcBi);
}
if (veilig == 1 ) {
rcAi = 0;
rcBi = 0;
assen = 0 ;
}
}