Я соединяю две платы Arduino UNO с передатчиком lora и приемником lora и проверяю соединение, отправляя «Hello World», который легко передается на последовательный монитор приемника.
Но когда я подключаю свой датчик к Arduino UNO и связываю его с lora-device, он передает значение датчика как int
тип данных. Поэтому я попытался преобразовать int
в string
и сохранил значение в типе unit_8
, но он не может преобразовать тип данных unit_8
в string
.
Мой код клиента:
#include <SPI.h>
#include <RH_RF95.h>
const int watermeterPin = 2;
volatile int pulse_frequency;
unsigned int literperhour;
unsigned long currentTime, loopTime;
byte sensorInterrupt = 0;
RH_RF95 rf95;
void setup()
{
Serial.begin(9600);
delay(500);
pinMode(watermeterPin, INPUT);
attachInterrupt(sensorInterrupt, getFlow, FALLING);
currentTime = millis();
loopTime = currentTime;
while (!Serial) ;
if (!rf95.init())
Serial.println("init failed");
}
void loop()
{
Serial.println("Sending to rf95_server");
currentTime = millis();
if(currentTime >= (loopTime + 1000))
{
loopTime = currentTime;
literperhour = (pulse_frequency * 60 / 7.5);
pulse_frequency = 0;
Serial.print(literperhour, DEC);
Serial.println(" Liter/hour");
}
String str= String(literperhour);
uint8_t data[] = str;
rf95.send(data, sizeof(data));
rf95.waitPacketSent();
uint8_t buf[RH_RF95_MAX_MESSAGE_LEN];
uint8_t len = sizeof(buf);
if (rf95.waitAvailableTimeout(3000))
{
if (rf95.recv(buf, &len))
{
Serial.print("got reply: ");
Serial.println((char*)buf);
}
else
{
Serial.println("recv failed");
}
}
else
{
Serial.println("No reply, is rf95_server running?");
}
delay(400);
}
void getFlow ()
{
pulse_frequency++;
}
И мой код сервера:
#include <SPI.h>
#include <RH_RF95.h>
RH_RF95 rf95;
int led = 10;
void setup()
{
pinMode(led, OUTPUT);
Serial.begin(9600);
while (!Serial) ;
if (!rf95.init())
Serial.println("init failed");
}
void loop()
{
if (rf95.available())
{
uint8_t buf[RH_RF95_MAX_MESSAGE_LEN];
uint8_t len = sizeof(buf);
if (rf95.recv(buf, &len))
{
digitalWrite(led, HIGH);
Serial.print("got request: ");
Serial.println((char*)buf);
uint8_t data[] = "And hello back to you";
rf95.send(data, sizeof(data));
rf95.waitPacketSent();
Serial.println("Sent a reply");
digitalWrite(led, LOW);
}
else
{
Serial.println("recv failed");
}
}
}
Может кто-нибудь помочь, пожалуйста?