· Web view#include // De library oproepen van de LCD LiquidCrystal lcd(12, 11, 7, 6, 5, 4);...

4
#include <LiquidCrystal.h> // De library oproepen van de LCD LiquidCrystal lcd(12, 11, 7, 6, 5, 4); // De library initialiseren met de gebruikte pinnen #define reed A0 //Op deze pin is het reedcontact aangesloten int reedVal; long timer; // De tijd voor een volle rotatie ( in milliseconden ) float KilometerPerUur; float radius = 8.27559; // straal van het wiel = 21,02cm --> 8,27559 inches float circumference; int maxReedCounter = 100; //min time (in ms) of one rotation (for debouncing) int reedCounter; void setup(){ reedCounter = maxReedCounter; circumference = 2*3.14*radius; pinMode(reed, INPUT); lcd.begin(16, 2); lcd.setCursor(0,0); lcd.print("U rijdt nu:"); lcd.setCursor(12,1); lcd.print("km/h"); // TIMER SETUP: De timer interrupt zorgt voor een precieze meting van het reedcontact

Transcript of · Web view#include // De library oproepen van de LCD LiquidCrystal lcd(12, 11, 7, 6, 5, 4);...

Page 1: · Web view#include  // De library oproepen van de LCD LiquidCrystal lcd(12, 11, 7, 6, 5, 4); // De library initialiseren met de gebruikte

#include <LiquidCrystal.h> // De library oproepen van de LCD

LiquidCrystal lcd(12, 11, 7, 6, 5, 4); // De library initialiseren met de gebruikte pinnen

#define reed A0 //Op deze pin is het reedcontact aangesloten

int reedVal;

long timer; // De tijd voor een volle rotatie ( in milliseconden )

float KilometerPerUur;

float radius = 8.27559; // straal van het wiel = 21,02cm --> 8,27559 inches

float circumference;

int maxReedCounter = 100; //min time (in ms) of one rotation (for debouncing)

int reedCounter;

void setup(){

reedCounter = maxReedCounter;

circumference = 2*3.14*radius;

pinMode(reed, INPUT);

lcd.begin(16, 2);

lcd.setCursor(0,0);

lcd.print("U rijdt nu:");

lcd.setCursor(12,1);

lcd.print("km/h");

// TIMER SETUP: De timer interrupt zorgt voor een precieze meting van het reedcontact

cli(); // stop interrupts

// set timer1 interrupt op 1kHz

TCCR1A = 0; // set entire TCCR1A register op 0

TCCR1B = 0; // Hetzelfde voor TCCR1B en TCNT1

TCNT1 = 0;

Page 2: · Web view#include  // De library oproepen van de LCD LiquidCrystal lcd(12, 11, 7, 6, 5, 4); // De library initialiseren met de gebruikte

// set timer count voor 1khz increments

OCR1A = 1999; // = (1/1000) / ((1/(16*10^6))*8) - 1

// turn on CTC mode

TCCR1B |= (1 << WGM12);

// Set CS11 bit for 8 prescaler

TCCR1B |= (1 << CS11);

// enable timer compare interrupt

TIMSK1 |= (1 << OCIE1A);

sei(); // Laat interrupts toe

// END TIMER SETUP

Serial.begin(9600);

}

ISR(TIMER1_COMPA_vect) { // Een interrupt afvragen aan een frequentie van 1kHz om het reedcontact te meten

reedVal = digitalRead(reed); // Vraag de waarde van pin A0 af

if (reedVal){ // Als het reedcontact gesloten is

if (reedCounter == 0){ // Minimum tijd tussen de pulsen dat gepasseerd zijn

KilometerPerUur = (((56.8*float(circumference))/float(timer))*1.609344); // Bereken het aantal KilometerPerUur we rijden

timer = 0; // reset timer

reedCounter = maxReedCounter; // reset reedCounter

}

else{

if (reedCounter > 0){ //Laat de reedcounter niet negatief worden

reedCounter -= 1; //decrementeer reedCounter

}

}

}

else{ //Als het reedcontact open is

if (reedCounter > 0){ //Laat de reedcounter niet negatief worden

Page 3: · Web view#include  // De library oproepen van de LCD LiquidCrystal lcd(12, 11, 7, 6, 5, 4); // De library initialiseren met de gebruikte

reedCounter -= 1; //decrementeer de reedCounter

}

}

if (timer > 2000){

KilometerPerUur = 0; //Als er geen pulsen komen van het reedcontact --> KilometerPerUur = 0

}

else{

timer += 1; //incrementeer de timer

}

}

void displayKilometerPerUur(){

lcd.print(KilometerPerUur);

}

void loop(){

//print km/h per om de 500ms op het scherm

displayKilometerPerUur();

lcd.setCursor(4,1);

delay(500);

}