RF Transmitter and Receiver for Wireless Alarm System

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
  }
}

what transmitters/receivers are you using? give a link?
what host microcontroller are you using?
how you connected and powered the devices?
what is the distance between the transmitter and receiver? what is the environment, e.g walls, trees, etc?

How do you know ?

You need to post wiring diagrams.