/* Copyright (C) 2011 Mario Keller. All rights reserved. This programm is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. See file LICENSE.txt for further informations on licensing terms. */ //einbinden der notwendigen Libraries #include // festlegen der Pins fŸr das LCD panel LiquidCrystal lcd(8, 9, 4, 5, 6, 7); #define LCDBacklightPin 10 // einige konstanten const int windPin = 3; // anschluss des reedkontaktes const float windFactor = 2.4; // umrechnungsfaktor von umdrehungen in geschwindigkeit const int measureTime = 3; // messzeitraum in sekunden // variablrn volatile unsigned int windCounter = 0; //interner zaehler fŸr umdrehungen float windSpeed = 0.0; //initialisieren der variablen fŸr messwerte und die zeitmessung unsigned long time = 0; //interrupt service routine fŸr das zaehlen der umdrehungen void countWind() { windCounter ++; } // lcd anzeige void show_values() { //erste Zeile - anzahl der gezaehlten umdrehungen im messzeitraum lcd.setCursor(0,0); lcd.print("Counts "); lcd.print(windCounter); lcd.print(" "); //zweite zeile - ermittelte geschwindigkeit lcd.setCursor(0,1); lcd.print("Speed "); lcd.print(windSpeed); lcd.print(" km/h "); } ////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////// // MAIN ////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////// //initialisierung void setup() { //debug ausgaben auf die serielle schnittstelle Serial.begin(9600); Serial.println("starting up"); //2x16 lcd display lcd.begin(16, 2); // start the library lcd.setCursor(0,0); //startzeit bestimmen time = millis(); } //hauptschleife void loop() { //starten des messzeitraums Serial.print("starting wind-counter for "); Serial.print(measureTime); Serial.println(" seconds"); //zaehler auf 0 stellen windCounter = 0; time = millis(); //zaehl-interrupt aktivieren attachInterrupt(1,countWind,RISING); //abwarten des messzeitraums delay(1000 * measureTime); //zaehl-interrupt deaktivieren detachInterrupt(1); //zeit bestimmen time = (millis() - time) / 1000; //debug ausgaben Serial.print("Time elapsed : "); Serial.println(time); Serial.print("Wind counts = "); Serial.println(windCounter); //berechnen der geschwindigkeit windSpeed = (float)windCounter / (float)measureTime * windFactor; Serial.print("Wind Speed = "); Serial.print(windSpeed); Serial.println(" km/h"); //lcs ausgabe aktualisieren show_values(); }