CATATAN:
- Hubungkan pin VCC pada LCD i2C ke pin 5V Arduino
- Hubungkan pin GND pada LCD i2C ke pin GND Arduino
- Hubungkan pin SCL pada LCD i2C ke pin SCL (atau bisa pake pin A5) Arduino
- Hubungkan pin SDA pada LCD i2C ke pin SDA (atau bisa pake pin A4) Arduino
/*
* http://elimelecsarduinoprojects.blogspot.co.id/2013/06/measure-rpms-arduino.html
*/
#include<LiquidCrystal.h>
//LiquidCrystal lcd(12,11,6,5,4,3);
LiquidCrystal lcd(12, 11, 5, 4, 3, 10);
volatile int rpmcount = 0; //see http://arduino.cc/en/Reference/Volatile
int rpm = 0;
unsigned long lastmillis = 0;
void setup(){
Serial.begin(9600);
lcd.begin(16,2);
attachInterrupt(0, rpm_fan, FALLING);//interrupt cero (0) is on pin two(2).
}
void loop(){
if (millis() - lastmillis == 1000){ /*Uptade every one second, this will be equal to reading frecuency (Hz).*/
detachInterrupt(0); //Disable interrupt when calculating
rpm = rpmcount * 60; /* Convert frecuency to RPM, note: this works for one interruption per full rotation. For two interrups per full rotation use rpmcount * 30.*/
Serial.print("RPM=\t"); //print the word "RPM" and tab.
Serial.print(rpm); // print the rpm value.
Serial.print("\t Hz=\t"); //print the word "Hz".
Serial.println(rpmcount); /*print revolutions per second or Hz. And print new line or enter.*/
lcd.clear();
lcd.setCursor(1,0);
lcd.print("__TACHOMETER_V1");
lcd.setCursor(1,1);
lcd.print(rpm);
lcd.setCursor(6,1);
lcd.print(" RPM");
lcd.print(" ");
rpmcount = 0; // Restart the RPM counter
lastmillis = millis(); // Uptade lasmillis
attachInterrupt(0, rpm_fan, FALLING); //enable interrupt
}
}
void rpm_fan(){ /* this code will be executed every time the interrupt 0 (pin2) gets low.*/
rpmcount++;
}

