#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <TM1637Display.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // آدرس LCD را برای نمایش 16 کاراکتر و 2 خط به 0x27 تنظیم کنید
// پینهای UltraSonic SRF04
int PingPin = 3; // TrigPin ==> Pin6
int EchoPin = A0; // EchoPin ==> A0
#define rgb_r 4
#define rgb_g 5
#define rgb_b 6
#define CLK 7
#define DIO 8
TM1637Display display(CLK, DIO); // شیء نمایشگر TM1637Display را ایجاد کنید
void setup() {
lcd.init(); // نمایشگر را مقداردهی اولیه کنید
lcd.backlight();
Serial.begin(9600);
pinMode(PingPin, OUTPUT);
pinMode(EchoPin, INPUT);
pinMode(rgb_r, OUTPUT);
pinMode(rgb_g, OUTPUT);
pinMode(rgb_b, OUTPUT);
display.setBrightness(7); // تنظیم روشنایی نمایشگر به 7
}
void loop() {
int cm = cm_from_U(); // محاسبه فاصله به سانتیمتر
lcd.setCursor(0, 0);
lcd.print("Distance: ");
lcd.print(cm);
lcd.print(" cm");
Serial.println(cm);
rgb(cm); // تنظیم LED بر اساس فاصله
display.showNumberDec(cm / 100); // نمایش فاصله به صورت دسیمتر
}
int UltraSonic() {
digitalWrite(PingPin, LOW);
delayMicroseconds(2);
digitalWrite(PingPin, HIGH);
delayMicroseconds(5);
digitalWrite(PingPin, LOW);
unsigned long duration = pulseIn(EchoPin, HIGH); // اندازهگیری زمان پرواز به میکروثانیه
return MicroStoCm(duration);
}
int MicroStoCm(unsigned long MicroS) {
return (MicroS / 29.0) / 2.0; // تبدیل میکروثانیه به سانتیمتر
}
int cm_from_U() {
return UltraSonic(); // محاسبه و بازگشت فاصله UltraSonic
}
void rgb(int cm) {
if (cm > 1 && cm <= 100) {
digitalWrite(rgb_r, LOW);
digitalWrite(rgb_g, LOW);
digitalWrite(rgb_b, HIGH);
} else if (cm > 110 && cm <= 200) {
digitalWrite(rgb_r, LOW);
digitalWrite(rgb_g, HIGH);
digitalWrite(rgb_b, LOW);
} else if (cm > 210 && cm <= 300) {
digitalWrite(rgb_r, HIGH);
digitalWrite(rgb_g, LOW);
digitalWrite(rgb_b, LOW);
} else if (cm > 310 && cm <= 400) {
digitalWrite(rgb_r, HIGH);
digitalWrite(rgb_g, LOW);
digitalWrite(rgb_b, HIGH);
} else if (cm >= 400) {
digitalWrite(rgb_r, HIGH);
digitalWrite(rgb_g, HIGH);
digitalWrite(rgb_b, LOW);
}
}