И где там прием, покажите?
Или вы код не полностью выложили?
Как вы определили, что модуль ничего не принимает, если у вас в коде нет приема?
И где там прием, покажите?
Или вы код не полностью выложили?
Как вы определили, что модуль ничего не принимает, если у вас в коде нет приема?
нет, просто он пытался работать с этим же модулем, не имея ни малейшего понятия о программировании вообще и этих модулей в частности. И вы ведете себя похоже, потому и спрашиваю.
Давайте начистоту - этот код писали не вы? Спросили у ИИ или нашли готовый в инете? Насколько вы понимаете, что в нем делается?
То есть это много? Вы это имели в виду?
Если да, то говорить об этом просто смешно. По нынешним временам за 5к никто вам даже код от ИИ не даст.
Тысяч на 20 можно было бы договорится, с модулями заказчика.
это точно ? я какой то вижу… вроде пытается передать, не совсем явным образом…
PKT #1
PKT #2
PKT #3
и вроде у него со временим прерывается и виснет модуль… или там грубая ошибка ?))) 1 ошибку вроде вижу, не грубую…
я дам!))) а то я месяцев 6 без работы… а за 12к или 20к даже не хочется копаться наверное))) и только код от ии бы сделал наверное…
у меня глюки или написано “Sending” ???
он что скинул лог передатчика ?.. наверное он стебется просто))) а я не осознал полностью работу кода…
я не знаю что он скинул, но в коде из сообщения #5 я приема не вижу, только передача.
Хотя я старенький, глаза плохие, мог и не заметить.
Потому и спрашиваю - покажите, где в этом коде прием.
А @Turb0user молчит
сорян вот прием
// ==================== ПРИЕМ ПАКЕТОВ ====================
void checkForPackets() {
if (!radioReady) return;
if (pttActive) return;
int len = radio.readData(rxBuffer, sizeof(rxBuffer));
if (len > 0) {
rxCount++;
Serial.print("RX #");
Serial.print(rxCount);
Serial.print(", len=");
Serial.print(len);
Serial.print(", data=");
// Вывести данные
for (int i = 0; i < len && i < 32; i++) {
if (isPrintable(rxBuffer[i])) {
Serial.print((char)rxBuffer[i]);
} else {
Serial.print(".");
}
}
Serial.println();
// Мигнуть LED при приеме
digitalWrite(PIN_LED, LOW);
delay(100);
digitalWrite(PIN_LED, HIGH);
// Перезапустить прием для следующего пакета
radio.startReceive();
}
}
УПС! крапленый туз не из той колоды ![]()
мое предложение про 5к все еще в силе))) по крайней мере ближайшие 3 часа!
попробуйте опубликовать код полностью, и описать что не так, может кто что подскажет… а то как то запутанно все получается)))
прошу прощения не из той папки ранее прицепил код (глаз замылился), чем ввел всех в заблуждение ![]()
Это тоже самое с приемом. Проблема статрая: передача работает, приемник видит (RSSI меняется), нет приема пакетов.
#include <Arduino.h>
#include <SPI.h>
#include <RadioLib.h>
// ==================== ПИНЫ ====================
#define PIN_NSS PA4
#define PIN_SCK PA5
#define PIN_MOSI PA7
#define PIN_MISO PA6
#define PIN_BUSY PA1
#define PIN_DIO1 PB0
#define PIN_NRST PA2
#define PIN_TXEN PB10
#define PIN_RXEN PB2
#define PIN_PTT PA3
#define PIN_LED PC13
LLCC68 radio = new Module(PIN_NSS, PIN_DIO1, PIN_NRST, PIN_BUSY);
// ==================== ПЕРЕМЕННЫЕ ====================
bool radioReady = false;
bool pttActive = false;
uint32_t packetCount = 0;
uint32_t rxCount = 0;
uint8_t rxBuffer[64];
// ==================== SPI RSSI ====================
bool waitBusy(uint32_t timeout) {
uint32_t start = millis();
while (digitalRead(PIN_BUSY)) {
if (millis() - start > timeout) return false;
delayMicroseconds(10);
}
return true;
}
float readRSSI_SPI() {
uint8_t buf[2];
if (!waitBusy(100)) return -120.0;
digitalWrite(PIN_NSS, LOW);
SPI.beginTransaction(SPISettings(4000000, MSBFIRST, SPI_MODE0));
SPI.transfer(0x15);
buf[0] = SPI.transfer(0x00);
buf[1] = SPI.transfer(0x00);
SPI.endTransaction();
digitalWrite(PIN_NSS, HIGH);
return -((float)buf[1]) / 2.0;
}
// ==================== УПРАВЛЕНИЕ ПЕРЕКЛЮЧАТЕЛЕМ ====================
void setTxenRxen(bool txen, bool rxen) {
digitalWrite(PIN_TXEN, txen ? HIGH : LOW);
digitalWrite(PIN_RXEN, rxen ? HIGH : LOW);
delayMicroseconds(10);
}
// ==================== ПРИЕМ ПАКЕТОВ ====================
void checkForPackets() {
if (!radioReady) return;
if (pttActive) return;
// Проверить, есть ли данные в буфере
int len = radio.readData(rxBuffer, sizeof(rxBuffer));
if (len > 0) {
rxCount++;
Serial.print("RX #");
Serial.print(rxCount);
Serial.print(", len=");
Serial.print(len);
Serial.print(", data=");
// Вывести данные
for (int i = 0; i < len && i < 32; i++) {
if (isPrintable(rxBuffer[i])) {
Serial.print((char)rxBuffer[i]);
} else {
Serial.print(".");
}
}
Serial.println();
// Мигнуть LED при приеме
digitalWrite(PIN_LED, LOW);
delay(100);
digitalWrite(PIN_LED, HIGH);
// Перезапустить прием для следующего пакета
radio.startReceive();
}
}
// ==================== ПЕРЕДАЧА (RadioLib) ====================
void sendPacket() {
if (!radioReady) return;
packetCount++;
char data[32];
sprintf(data, "PKT #%lu", packetCount);
Serial.print("Sending: ");
Serial.println(data);
setTxenRxen(true, false);
delay(1);
int state = radio.transmit(data);
setTxenRxen(false, true);
radio.startReceive();
if (state == RADIOLIB_ERR_NONE) {
Serial.println("Sent OK");
digitalWrite(PIN_LED, HIGH);
delay(50);
digitalWrite(PIN_LED, LOW);
} else {
Serial.print("Send error: ");
Serial.println(state);
}
}
// ==================== КНОПКА PTT ====================
void handlePTT() {
static bool lastState = HIGH;
static unsigned long debounceTime = 0;
const unsigned long DEBOUNCE_DELAY = 50;
bool reading = digitalRead(PIN_PTT);
unsigned long now = millis();
if (reading != lastState) {
debounceTime = now;
lastState = reading;
return;
}
if (now - debounceTime < DEBOUNCE_DELAY) return;
if (reading == LOW && !pttActive) {
pttActive = true;
digitalWrite(PIN_LED, LOW);
sendPacket();
pttActive = false;
}
}
// ==================== ИНИЦИАЛИЗАЦИЯ ====================
void initRadio() {
Serial.println("\n=== RADIO INIT ===");
pinMode(PIN_TXEN, OUTPUT);
pinMode(PIN_RXEN, OUTPUT);
setTxenRxen(false, true);
Serial.println("Switch: RX");
pinMode(PIN_NRST, OUTPUT);
digitalWrite(PIN_NRST, LOW);
delay(10);
digitalWrite(PIN_NRST, HIGH);
delay(100);
Serial.println("Reset done");
pinMode(PIN_NSS, OUTPUT);
digitalWrite(PIN_NSS, HIGH);
pinMode(PIN_BUSY, INPUT);
pinMode(PIN_DIO1, INPUT);
SPI.begin();
int state = radio.begin();
Serial.print("radio.begin: ");
Serial.println(state);
if (state != RADIOLIB_ERR_NONE) {
radioReady = false;
Serial.println("Radio FAILED");
return;
}
// ========== НАСТРОЙКИ ==========
radio.setFrequency(433.9);
radio.setBandwidth(125.0);
radio.setSpreadingFactor(9);
radio.setCodingRate(7);
radio.setPreambleLength(8);
radio.setOutputPower(22);
// SyncWord для совместимости
radio.setSyncWord(0x12);
radio.setCRC(true);
radio.startReceive();
radioReady = true;
Serial.println(" Radio ready");
Serial.println("=== INIT OK ===\n");
}
// ==================== SETUP ====================
void setup() {
Serial.begin(115200);
delay(1000);
Serial.println("HYBRID: RadioLib TX + SPI RSSI + ПРИЕМ");
Serial.println("Press PTT to send");
Serial.println();
pinMode(PIN_PTT, INPUT_PULLUP);
pinMode(PIN_LED, OUTPUT);
digitalWrite(PIN_LED, HIGH);
initRadio();
}
// ==================== LOOP ====================
void loop() {
static uint32_t lastRssiPrint = 0;
uint32_t now = millis();
// 1. Обработка кнопки
handlePTT();
// 2. ПРОВЕРКА ВХОДЯЩИХ ПАКЕТОВ
checkForPackets();
// 3. RSSI лог (каждые 3 секунды)
if (now - lastRssiPrint > 3000) {
lastRssiPrint = now;
float rssi = readRSSI_SPI();
Serial.print(" RSSI: ");
Serial.print(rssi);
Serial.print(" dBm, RX count: ");
Serial.println(rxCount);
}
delay(10);
}
Попробуйте назначить RXEN на свободный пин, потому как PB2 на блекпиле - это переключатель BOOT, может и не работать как вам нужно.
И NSS как CS , я бы тоже не использовал… ну что бы совсем перестраховаться.
(последний код не смотрел)
вижу изменился… было 0x1424 там есть проблема с 1 и 2 байтами ?
вы уже пытались изменить delay ? это не принесло результатов ?
стоит ли RXEN = HIGH сделать постоянно включенным, а TXEN включать и выключать периодически даст результат ?
в этом коде появился прием и передача ?)))
тоесть вы не совсем понимаете как это должно работать, верно ?)))
от сюда как вам помочь я не знаю…
ну че ты пугаешь то))
нормально он работает, как и все остальные пины, просто надо учитывать, что на плате blackpill на нем висит подтяжка к земле резистором 10к.
я не пугаю, просто пишу как делал бы сам.
Вроде как влиять не должно, но если что-то не работает, я стараюсь устранить все аспекты, в которых не до конца уверен.
Вот когда заработает, можно будет попробовать, влияет подтяжка PB2 или нет
оказывается не все пины одинаково полезны. товарищ МММ оказался прав-спасибо. смена пина RXEN увеличила RSSI до -112дцб. Приема пакетов пок анет. Курю другие советы…
начните с того что, в последнем коде найдите есть ли и прием и передача в коде, работает ли она правильно…