#define BLYNK_TEMPLATE_ID "TMPL3OqcwE5r2"
#define BLYNK_TEMPLATE_NAME "smart cattle monitoring system "
#define BLYNK_AUTH_TOKEN "Your Auth Token"
#include <LiquidCrystal.h>
// Define LCD pins
LiquidCrystal lcd(14, 27, 26, 25, 33, 32);
// Define ultrasonic sensor pins
const int trigPin = 5;
const int echoPin = 18;
// Define buzzer pin
const int buzzerPin = 19;
// Seven Segment Display Pins
const int segmentPins[7] = {15, 4, 16, 17, 21, 22, 23};
// Segment patterns for numbers 0-9 (common cathode)
const byte numPatterns[10] = {
0b00111111, // 0
0b00000110, // 1
0b01011011, // 2
0b01001111, // 3
0b01100110, // 4
0b01101101, // 5
0b01111101, // 6
0b00000111, // 7
0b01111111, // 8
0b01101111 // 9
};
void setup() {
// Initialize LCD
lcd.begin(16, 2);
lcd.print("Cattle Monitor");
// Initialize ultrasonic sensor pins
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
// Initialize buzzer pin
pinMode(buzzerPin, OUTPUT);
// Initialize seven segment display pins
for (int i = 0; i < 7; i++) {
pinMode(segmentPins[i], OUTPUT);
}
// Start serial communication for debugging
Serial.begin(115200);
}
void loop() {
// Measure distance using the ultrasonic sensor
long duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2;
// Display distance on LCD
lcd.setCursor(0, 1);
lcd.print("Dist: ");
lcd.print(distance);
lcd.print(" cm ");
// Display distance on seven segment display
displayNumber(distance);
// Sound the buzzer if distance is less than a threshold
if (distance < 50) { // example threshold
digitalWrite(buzzerPin, HIGH);
} else {
digitalWrite(buzzerPin, LOW);
}
// Small delay before next reading
delay(500);
}
void displayNumber(int num) {
if (num > 99) num = 99; // Limit to two digits for seven segment display
// Display tens digit
int tens = num / 10;
int units = num % 10;
// Display tens digit
displayDigit(tens);
delay(1000); // Delay for visibility, adjust as needed
// Display units digit
displayDigit(units);
delay(1000); // Delay for visibility, adjust as needed
}
void displayDigit(int digit) {
byte pattern = numPatterns[digit];
for (int i = 0; i < 7; i++) {
digitalWrite(segmentPins[i], bitRead(pattern, i));
}
}