优化433MHZ中继转发
This commit is contained in:
31
433MHZ/rc-switch-pico/examples/Receive/CMakeLists.txt
Normal file
31
433MHZ/rc-switch-pico/examples/Receive/CMakeLists.txt
Normal file
@@ -0,0 +1,31 @@
|
||||
add_executable(receive
|
||||
Receive.cc
|
||||
../../radio-switch.cc
|
||||
)
|
||||
|
||||
|
||||
add_compile_options(-Wall
|
||||
-Wno-format # int != int32_t as far as the compiler is concerned because gcc has int32_t as long int
|
||||
-Wno-unused-function # we have some for the docs that aren't called
|
||||
-Wno-maybe-uninitialized
|
||||
)
|
||||
|
||||
# Pull in our pico_stdlib which pulls in commonly used features
|
||||
|
||||
target_link_libraries(receive
|
||||
pico_stdlib
|
||||
hardware_adc
|
||||
pico_multicore)
|
||||
|
||||
# enable usb output, disable uart output
|
||||
pico_enable_stdio_usb(receive 1)
|
||||
pico_enable_stdio_uart(receive 0)
|
||||
|
||||
# create map/bin/hex file etc.
|
||||
pico_add_extra_outputs(receive)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
156
433MHZ/rc-switch-pico/examples/Receive/Receive.cc
Normal file
156
433MHZ/rc-switch-pico/examples/Receive/Receive.cc
Normal file
@@ -0,0 +1,156 @@
|
||||
#include <iostream>
|
||||
#include "pico/stdlib.h"
|
||||
#include "../../radio-switch.h"
|
||||
#include "pico/stdio.h"
|
||||
#include "pico/multicore.h"
|
||||
#include <map> // map
|
||||
#include <time.h>
|
||||
|
||||
|
||||
#define BUFFER_SIZ 1024
|
||||
|
||||
|
||||
//const uint RADIO_TRANSMIT_PIN = 16; // 433发射模块引脚
|
||||
const uint RADIO_RECEIVER_PIN = 17; // 433接收模块引脚
|
||||
|
||||
|
||||
// 闪烁LED
|
||||
void light()
|
||||
{
|
||||
const uint LED_PIN = PICO_DEFAULT_LED_PIN;
|
||||
gpio_init(LED_PIN);
|
||||
gpio_set_dir(LED_PIN, GPIO_OUT);
|
||||
gpio_put(LED_PIN, 1);
|
||||
sleep_ms(100);
|
||||
gpio_put(LED_PIN, 0);
|
||||
sleep_ms(100);
|
||||
|
||||
}
|
||||
|
||||
int int_string(int val, char *string, int string_len, int *str_len, char *dest, int *dest_len)
|
||||
{
|
||||
memset(string, 0, string_len);
|
||||
memset(dest, 0, string_len);
|
||||
|
||||
char s[] = "55";
|
||||
char d = '1';
|
||||
|
||||
snprintf(string, string_len, "%d", val);
|
||||
*str_len = strlen(string);
|
||||
|
||||
if (0 == strncasecmp(string, s, 2)) {
|
||||
dest[0] = d;
|
||||
dest[1] = d;
|
||||
strncpy(dest + 2, string + 2, (*str_len) - 2);
|
||||
|
||||
*dest_len = strlen(dest);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
// 核心0发送数据到核心1, 核心1判断是否有数据到来, 然后打印.
|
||||
void core1_main()
|
||||
{
|
||||
|
||||
gpio_init(RADIO_RECEIVER_PIN);
|
||||
|
||||
RCSwitch rcSwitch = RCSwitch();
|
||||
rcSwitch.enableReceive(RADIO_RECEIVER_PIN);
|
||||
|
||||
const char s = '1';
|
||||
uint32_t val = 0;
|
||||
int str_len;
|
||||
int dest_len;
|
||||
char str[270];
|
||||
char dest[270];
|
||||
|
||||
|
||||
while (true)
|
||||
{
|
||||
if (rcSwitch.available())
|
||||
{
|
||||
light();
|
||||
|
||||
val = rcSwitch.getReceivedValue();
|
||||
|
||||
int_string(val, str, 270, &str_len, dest, &dest_len);
|
||||
|
||||
|
||||
if (val != 0) {
|
||||
if (str[0] == s && str[1] == s) {
|
||||
|
||||
multicore_fifo_push_blocking(atoi(dest));
|
||||
} else {
|
||||
rcSwitch.resetAvailable();
|
||||
val = 0;
|
||||
continue;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
rcSwitch.resetAvailable();
|
||||
val = 0;
|
||||
}
|
||||
|
||||
|
||||
sleep_ms(130);
|
||||
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
stdio_init_all();
|
||||
|
||||
std::map < int, int >idcode;
|
||||
int count=0;
|
||||
uint32_t i=0;
|
||||
|
||||
|
||||
multicore_reset_core1();
|
||||
multicore_launch_core1(core1_main);
|
||||
|
||||
|
||||
|
||||
while (1)
|
||||
{
|
||||
if (multicore_fifo_rvalid()) {
|
||||
i = multicore_fifo_pop_blocking(); // 读取核心1发送来的数据
|
||||
|
||||
idcode.insert( { // 插入map
|
||||
i, i}
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
if (idcode.size() >= 3) { // 等于3个时发送
|
||||
for (auto it: idcode) {
|
||||
printf("核心0接收433MHZ %u\n", it.first);
|
||||
}
|
||||
|
||||
idcode.clear();
|
||||
}
|
||||
else // 一直没有3个时候, 过一段时间发送
|
||||
{
|
||||
count++; // 计数
|
||||
|
||||
if (count == 600) // 60秒
|
||||
{
|
||||
for (auto it: idcode) {
|
||||
printf("核心0接收433MHZ %u\n", it.first);
|
||||
}
|
||||
|
||||
idcode.clear();
|
||||
count = 0;
|
||||
}
|
||||
}
|
||||
|
||||
sleep_ms(100);
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
Reference in New Issue
Block a user