Arduino cykel hastighetsmätare (5 / 16 steg)
Steg 5: Testet Switch
Arduino cykel hastighetsmätare w serial.print()
Amanda Ghassaei 2012
/*
* Detta program är fri programvara; Du kan vidaredistribuera det och/eller ändra
* det enligt villkoren i GNU General Public License som offentliggjorts av
* den Free Software Foundation; antingen version 3 av licensen, eller
* (på ditt alternativ) någon senare version.
*
*/
beräkningar
däckets radie ~ 13.5 inches
omkrets = pi * 2 * r = ~ 85 inches
max hastighet av 35 km/h = ~ 616inches/sekund
Max rps = ~7.25
#define reed A0 /-pin ansluten till läsa switch
lagring variabler
int reedVal;
lång timer; / / tid mellan en full rotation (i ms)
float mph;
float radie = 13,5; / / däck radius (i tum)
float omkrets;
int maxReedCounter = 100; //min tid (i ms) av en rotation (för debouncing)
int reedCounter;
void setup() {
reedCounter = maxReedCounter;
omkrets = 2 * 3.14 * radie.
pinMode (reed, ingång);
TIMER SETUP - timer avbrottet tillåter exakta tidsinställda mätningar av reed switch
se http://arduino.cc/playground/Code/Timer1 för mer information om konfiguration av arduino timers
(CLI); //stop avbrott
Ställ in timer1 avbrott vid 1kHz
TCCR1A = 0; / / Ställ in hela TCCR1A register till 0
TCCR1B = 0; / / samma för TCCR1B
TCNT1 = 0;
ställa in timer räknas 1khz steg
OCR1A = 1999. / / = (1/1000) / ((1/(16*10^6))*8) - 1
Aktivera CTC läge
TCCR1B | = (1 << WGM12);
Ange CS11 bit för 8 prescaler
TCCR1B | = (1 << CS11);
Aktivera timern jämför avbrott
TIMSK1 | = (1 << OCIE1A);
SEI (); //allow avbrott
AVSLUTA INSTALLATIONSPROGRAMMET FÖR TIMER
Serial.BEGIN(9600);
}
ISR(TIMER1_COMPA_vect) {//Interrupt på freq 1 kHz att mäta reed switch
reedVal = digitalRead (vass); //get val av A0
om (reedVal) {//if reed switch är stängd
om (reedCounter == 0) {//min tid mellan pulserna har gått
mph = (56.8*float(circumference)) / flyta (timer); //calculate miles per timme
timer = 0; //reset timer
reedCounter = maxReedCounter; //reset reedCounter
}
annat {
om (reedCounter > 0) {//don't låt reedCounter gå negativ
reedCounter-= 1; //decrement reedCounter
}
}
}
annat {//if reed switch är öppen
om (reedCounter > 0) {//don't låt reedCounter gå negativ
reedCounter-= 1; //decrement reedCounter
}
}
om (timer > 2000) {
mph = 0; //if inga nya pulser från reed switch-däck är fortfarande inställd 0 mph
}
annat {
Timer += 1; //increment timer
}
}
void displayMPH() {
Serial.println(mph);
}
void loop() {
skriva ut mph en gång per sekund
displayMPH();
Delay(1000);
}