Misura la velocità del vagone ed aziona i frenatoi.
La velocità ottimale del vagone deve essere di 8 km/h se superiore vengono azionati dei frentaoi, ciascuno capace di ridurre la velocità del 2%.
/* Legge gli impulsi di un oscillatore esterno qualunque sia la durata dell'onda quadra. File - Esempi -Digital -StateChangeDetection L'oscillatore deve avere una f=1Hz ma per una prova va bene un diodo led lampeggiante. Le istruzioni antirimbalzo di START sono state sostituite dalla funzione incrementa e dalla successiva istruzione if START maggiore o uguale a di 1*/ # define START 2 # define STOP 3 # define AZZERA 4 # define OSCEXT 5 int ValueStart1 = 0; int ValueStart1a = 0; int ValueStop = 0; int ValueAzzera =0; int Spazio = 20; float Velocita = 0; int ValueOSC1 = 0; int ValueOSC1a = 0; int ValueOSC1b = 0; void setup() { pinMode(OSCEXT, INPUT); pinMode(START, INPUT); pinMode(STOP, INPUT); pinMode(AZZERA, INPUT); Serial.begin(9600); } void loop() { //---------- Lettura AZZERA -------- int ValueAzzera= digitalRead(AZZERA); if (ValueAzzera== HIGH) {(ValueOSC1 = 0);} /*--Lettura di START con incrementa */ ValueStart1a= digitalRead(START); if (ValueStart1a == HIGH ) { ValueStart1++; } //------------- Lettura impulsi oscillatore------- ValueOSC1a= digitalRead(OSCEXT); if (ValueOSC1a!= ValueOSC1b) { if (ValueOSC1a == HIGH && ValueStart1 >=1 && ValueStop==LOW ) { ValueOSC1++; Serial.println(ValueOSC1); }} ValueOSC1b = ValueOSC1a; //--------- Fine lettura impulsi esterni----- //---------- Lettura STOP -------- int ValueSTOP= digitalRead(STOP); if ( ValueSTOP== HIGH ) { ValueStart1 = 0; Velocita = ((Spazio / ValueOSC1) *3.6); Serial.print("Velocita km/h : "); Serial.println(Velocita); ValueOSC1 = ValueOSC1 ; if (ValueOSC1 == 3) {Serial.println("6 Frenatoi in azione");} if (ValueOSC1 == 4) {Serial.println("5 Frenatoi in azione");} if (ValueOSC1 == 5) {Serial.println("4 Frenatoi in azione");} if (ValueOSC1 == 6) {Serial.println("3 Frenatoi in azione");} if (ValueOSC1 == 7) {Serial.println("2 Frenatoi in azione");} if (ValueOSC1 == 8) {Serial.println("1 Frenatoi in azione");} delay (500);} }