Drehzahlmesser mit Arduino

Wie bin ich vorgegangen?

Die Beschaltung

Funktionsweise
Der Programmcode:
				
					#include <Arduino.h>
#include <U8g2lib.h>

#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);

byte DZM_InputPin = 2;
volatile unsigned long RPM_T2, RPM_Count;
unsigned long RPM , RPM_T1;

void setup() {
  u8g2.begin();
  pinMode(DZM_InputPin, INPUT_PULLUP);
  RPM_T1 = 0;
  RPM_T2 = 0;
  RPM_Count = 0;

  attachInterrupt(0, RPM_Meter, FALLING);    // Interrupt0 wird bei fallender Flanke auf Pin2

}

void loop() {
  char RPMStr[5];
  u8g2.clearBuffer();         // löschen des Interen Speicher
  u8g2.setFont(u8g2_font_ncenB14_tr); // auswahl der Schriftart
  if (RPM_T2 > RPM_T1) {
    RPM = (unsigned)(long)(60000 * RPM_Count / (RPM_T2 - RPM_T1));
    RPM_T1 = RPM_T2;
    RPM_Count = 0;
  }
  else {
    RPM = 0;
  }
  sprintf(RPMStr, "%4u", RPM);

  u8g2.drawStr(0, 20, RPMStr); 
  u8g2.sendBuffer();
}

void RPM_Meter () {

  RPM_Count++;
  RPM_T2 = millis();

}