#include #include // lcd(RS, E, D4, D5, D6, D7) LiquidCrystal lcd(3, 4, 5, 6, 7, 8); // Input pin 2 (INT0) byte car_q[8] = {B00000,B00000,B01101,B10011,B10011,B01111,B00001,B00001}; byte e_aigu[7] = {B00010,B00100,B01110,B10001,B11111,B10000,B01110}; byte virgule[8] = {B00000,B00000,B00000,B00000,B00000,B01100,B00100,B01000}; byte pts[7] = {B00000,B00000,B01100,B01100,B00000,B01100,B01100}; void setup() { lcd.createChar(1, car_q); lcd.createChar(2, e_aigu); lcd.createChar(3, virgule); lcd.createChar(4, pts); lcd.begin(16, 2); lcd.setCursor(1, 0); lcd.print("Fr\2\1. secteur\4"); } volatile unsigned long startTime; volatile unsigned long endTime; volatile unsigned long count; void trigger() { attachInterrupt(0, start, RISING); } void start() { startTime = micros(); attachInterrupt(0, pulse, RISING); } void pulse() { endTime = micros(); count++; } float getFrequency(unsigned int sampleTime) { count = 0; attachInterrupt(0, trigger, RISING); delay(sampleTime); detachInterrupt(0); if (count == 0) { return 0; } else { return float(1000000 * count) / float(endTime - startTime); } } float lastFreq = 0; //----------------------------------------------- void loop() { float freq = 0; float period = 0; if (lastFreq > 5000 || lastFreq == 0) { freq = 1000 * getFrequency(1000); } lastFreq = freq; unsigned int Hz = (freq / 1000); unsigned int mHz = freq - (Hz * 1000); lcd.setCursor(0, 1); { lcd.print(" "); print3digit(Hz, ' '); lcd.print("\3"); print3digit(mHz, '0'); } lcd.print(" Hz"); } //----------------------------------------------- void print3digit(int n, char leadingchar) { if (n <100) { lcd.print(leadingchar); } if (n <10) { lcd.print(leadingchar); } lcd.print(n); }