Ви не увійшли.
Як ви контролюєте прийом повідомлення? Терміналом? Логічним аналізатором? А де код приймальної сторони? Можливо проблема з приймальною стороною. Загалом перед відправкою повідовлення з передавальної сторони корисно передати певну кількість пустих байтів (від 10) значенням 0xFF, щоб приймальний радіомодуль встиг налаштуватись, надіятись що все передастся однією відпракою ключової фрази не завжди працює. Шукайте проблему в прийомній стороні, чи працює там адектватно переривання від модуля UART і чи ви встигаєте його коректно обробити щоб запустити 9 пін. Це потребує свого роду відлагодження, просто так це нажаль не працює.
Повідомлення йде, воно приходить
Ви в цьому впевненні?
analogWrite(PIN_RELAY, 0);
Якщо я не помиляюсь, дана команда увімкне ШІМ з коефіцієнтом заповнення 1/256 (а параметр 255 дасть коефіцієнт заповнення 256/256 - завжди на одиничку більше, тобто за допомогою analogWrite неможливо отримати коефіцієнт заповнення 0/256)
Попробуйте вместо digitalWrite(PIN_RELAY, HIGH);
написать analogWrite(PIN_RELAY, 255)
и вместо
pinMode(PIN_RELAY, OUTPUT); // Встановлюємо пін як вихід
digitalWrite(PIN_RELAY, LOW); // Початковий стан (може бути LOW або HIGH, в залежності від потреби)
так
pinMode(PIN_RELAY, OUTPUT); // Встановлюємо пін як вихід
analogWrite(PIN_RELAY, 0); // Початковий стан (може бути LOW або HIGH, в залежності від потреби)
#include <SoftwareSerial.h>
#include "EBYTE22.h"
#define PIN_TX 2
#define PIN_RX 3
#define PIN_M0 4
#define PIN_M1 5
#define PIN_AX 6
#define PIN_RELAY 9 // Пін, на якому ви хочете керувати напругою
#define YOUR_DESIRED_MESSAGE "TURN_ON_RELAY" // Повідомлення для включення реле
SoftwareSerial E22Serial(PIN_TX, PIN_RX, false);
EBYTE22 E22(&E22Serial, PIN_M0, PIN_M1, PIN_AX);
bool relayOn = false; // Флаг, що вказує, чи вже було включено реле
void setup() {
Serial.begin(9600);
E22Serial.begin(9600);
pinMode(PIN_RELAY, OUTPUT); // Встановлюємо пін як вихід
digitalWrite(PIN_RELAY, LOW); // Початковий стан (може бути LOW або HIGH, в залежності від потреби)
delay(5000);
if (E22.init()) {
Serial.println("init OK");
} else {
Serial.println("init Error");
}
}
void loop() {
sendMessage(YOUR_DESIRED_MESSAGE); // Відправляємо повідомлення приймачу
delay(5000); // Затримка перед наступним відправленням
}
void sendMessage(String message) {
E22Serial.print(message);
Serial.println("Sent message: " + message);
// Очікуємо відповідь протягом 1 секунди
unsigned long startTime = millis();
while (millis() - startTime < 1000) {
if (E22Serial.available()) {
// Якщо отримане повідомлення співпадає з бажаним, увімкнемо реле на 2 секунди
if (E22Serial.read() == YOUR_DESIRED_MESSAGE[0] && !relayOn) {
digitalWrite(PIN_RELAY, HIGH);
Serial.println("Relay turned ON for 2 seconds");
delay(2000); // Вмикаємо реле на 2 секунди
digitalWrite(PIN_RELAY, LOW);
Serial.println("Relay turned OFF");
relayOn = true; // Встановлюємо флаг, що реле вже було включено
}
return;
}
}
Serial.println("No response received. Relay remains OFF");
}
Бажаю здоровья, шановні ардуінщики)) Хочу зробити саморобну підривну машинку на базі ардуіно, але шось не виходить. Маю АРдуіно нано - 2шт, радіомодуль Е220-900Т22D, пишу код, шоб якщо передавач буде в мережі, то на приймач піде повідомлення, і на 9 піну буде напруга (яка буде ініціювати ЕДП). Повідомлення йде, воно приходить, але перевіраючи мультиметром пін 9 та землю напруги немає(((. Допоможіть!!!!