DIGITAL METRE PROJESİ
- muhammed ali balkaya
- 15 Ara 2018
- 1 dakikada okunur

PROJE KODU
#include <LiquidCrystal.h>
#include <EEPROM.h>
#define OFFSET 0
#define btnRIGHT 0
#define btnUP 1
#define btnDOWN 2
#define btnLEFT 3
#define btnSELECT 4
#define btnNONE 5
#define TRIG_PIN 2
#define ECHO_PIN 11
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
unsigned long updTime = 0;
byte mode = 0;
int distance = 0;
byte readKeypad() {
int adc = analogRead(A0);
if (adc < 50) return btnRIGHT;
if (adc < 250) return btnUP;
if (adc < 450) return btnDOWN;
if (adc < 650) return btnLEFT;
if (adc < 850) return btnSELECT;
return btnNONE;
}
void setup() {
pinMode(10, INPUT);
pinMode(A0, INPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(TRIG_PIN, OUTPUT);
digitalWrite(TRIG_PIN, LOW);
lcd.begin(16, 2);
lcd.print(" Distance ");
}
void printLiveDistance() {
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long duration = pulseIn(ECHO_PIN, HIGH);
distance = duration * 0.017;
lcd.setCursor(0, 1);
lcd.print("Live ");
lcd.setCursor(8, 1);
if ((distance < 2) || (distance > 400)) {
lcd.print("Range!");
distance = 0;
}
else {
lcd.print(distance + OFFSET);
lcd.print(" cm ");
}
}
void loop() {
if (readKeypad() == btnSELECT) {
if (mode != 1) {
mode = 1;
lcd.setCursor(0, 1);
lcd.print("Hold ");
}
else mode = 0;
delay(300);
}
if (readKeypad() == btnUP) {
lcd.setCursor(0, 1);
lcd.print("Store ");
EEPROM.update(0, distance >> 8);
EEPROM.update(1, distance & 0xFF);
delay(500);
mode = 0;
}
if (readKeypad() == btnDOWN) {
if (mode != 2) {
int memDistance = (EEPROM.read(0) << 8) + EEPROM.read(1);
if ((memDistance >= 2) && (memDistance <= 400)) {
mode = 2;
lcd.setCursor(0, 1);
lcd.print("Recall");
lcd.setCursor(8, 1);
lcd.print(memDistance + OFFSET);
lcd.print(" cm ");
}
}
else mode = 0;
delay(300);
}
if (mode == 0) {
printLiveDistance();
delay(100);
}
}
留言