Hello, I have a problem with my project. The RF transmitter I am using is sending but the receiver is not receiving any signal.
Transmitter Code:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DS3231.h>
#include <RH_ASK.h> // Include RadioHead library for RF module
#include <SPI.h>
// Set the LCD address to 0x3F for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);
DS3231 rtc; // Initialize DS3231 instance
// Pin configurations
int pset = 8; // Pushbutton for setting alarm
int phour = 9; // Pushbutton for hour
int pmin = 10; // Pushbutton for minutes
int pexit = 11; // Pushbutton for exit of set alarm
int h = 0; // Initialize alarm hour
int m = 0; // Initialize alarm minute
int activate = 0; // Alarm mode status
bool debounceDelay = 200; // Debounce delay in milliseconds
// RF transmitter setup
#define RF_PIN 12 // Change to the pin you're using for the RF module
RH_ASK rf_driver(2000, RF_PIN, -1, -1); // Baudrate is set to 2000, adjust as necessary
void setup() {
pinMode(pset, INPUT_PULLUP);
pinMode(phour, INPUT_PULLUP);
pinMode(pmin, INPUT_PULLUP);
pinMode(pexit, INPUT_PULLUP);
// Initialize Serial for debugging
Serial.begin(9600);
// Initialize LCD
lcd.begin();
lcd.backlight();
// Set the RTC date and time if necessary
rtc.setClockMode(false); // Use 24-hour mode
if (rtc.getYear() == 0) {
rtc.setYear(25); // Year (last two digits)
rtc.setMonth(1); // Month
rtc.setDate(24); // Day
rtc.setHour(9); // Hour
rtc.setMinute(24); // Minute
rtc.setSecond(0); // Second
}
// Initialize RF transmitter
if (!rf_driver.init()) {
Serial.println("RF transmitter initialization failed!");
while (1);
}
}
void loop() {
bool h12, PM_time, Century;
int Hour = rtc.getHour(h12, PM_time); // Retrieve hour
int Min = rtc.getMinute(); // Retrieve minute
// Display time and date when not in alarm-setting mode
if (activate == 0) {
lcd.setCursor(0, 0);
lcd.print("Time: ");
lcd.setCursor(6, 0);
if (Hour < 10) lcd.print('0'); // Add leading zero
lcd.print(Hour);
lcd.print(":");
if (Min < 10) lcd.print('0'); // Add leading zero
lcd.print(Min);
lcd.setCursor(0, 1);
lcd.print("Date: ");
lcd.setCursor(6, 1);
lcd.print(2000 + rtc.getYear()); // Add 2000 to get the full year
lcd.print("-");
if (rtc.getMonth(Century) < 10) lcd.print('0'); // Add leading zero
lcd.print(rtc.getMonth(Century));
lcd.print("-");
if (rtc.getDate() < 10) lcd.print('0'); // Add leading zero
lcd.print(rtc.getDate());
// Check for alarm setting button press
if (digitalRead(pset) == LOW) {
delay(debounceDelay); // Debounce
if (digitalRead(pset) == LOW) { // Confirm button is still pressed
activate = 1; // Enter alarm setting mode
lcd.clear();
delay(200);
}
}
}
// Alarm setting mode
while (activate == 1) {
lcd.setCursor(0, 0);
lcd.print("Set Alarm");
lcd.setCursor(0, 1);
lcd.print("Hour= ");
lcd.setCursor(9, 1);
lcd.print("Min= ");
// Check for hour button press
if (digitalRead(phour) == LOW) {
delay(debounceDelay); // Debounce
if (digitalRead(phour) == LOW) { // Confirm button is still pressed
h++;
if (h > 23) h = 0; // Reset after 23
lcd.setCursor(5, 1);
lcd.print(h < 10 ? "0" : ""); // Add leading zero
lcd.print(h);
delay(200);
}
}
// Check for minute button press
if (digitalRead(pmin) == LOW) {
delay(debounceDelay); // Debounce
if (digitalRead(pmin) == LOW) { // Confirm button is still pressed
m++;
if (m > 59) m = 0; // Reset after 59
lcd.setCursor(13, 1);
lcd.print(m < 10 ? "0" : ""); // Add leading zero
lcd.print(m);
delay(200);
}
}
// Check for exit button press
if (digitalRead(pexit) == LOW) {
delay(debounceDelay); // Debounce
if (digitalRead(pexit) == LOW) { // Confirm button is still pressed
activate = 0; // Exit alarm setting mode
lcd.clear();
delay(200);
}
}
// Continuously update hour and minute display
lcd.setCursor(5, 1);
lcd.print(h < 10 ? "0" : ""); // Add leading zero
lcd.print(h);
lcd.setCursor(13, 1);
lcd.print(m < 10 ? "0" : ""); // Add leading zero
lcd.print(m);
}
// Check if it's time to trigger the alarm
if (Hour == h && Min == m) {
const char *msg = "Alarm Triggered";
rf_driver.send((uint8_t *)msg, strlen(msg));
rf_driver.waitPacketSent();
Serial.println("RF Signal Sent: Alarm Triggered");
}
Receiver Test Code:
#include <RH_ASK.h>
#include <SPI.h> // Not actually used but needed to compile
RH_ASK rf_driver;
void setup() {
rf_driver.init(); // Initialize the RF driver
Serial.begin(9600); // Start the serial communication
}
void loop() {
uint8_t buf[RH_ASK_MAX_MESSAGE_LEN]; // Buffer to store received messages
uint8_t buflen = sizeof(buf);
if (rf_driver.recv(buf, &buflen)) { // Check if data is received
buf[buflen] = '\0'; // Null-terminate the received message
Serial.print("Received: ");
Serial.println((char*)buf); // Print the received message
}
}