Rfm69hw и библиотека RadioHead

victorv
Offline
Зарегистрирован: 31.07.2015

Здравствуйте , помогите куда копать . Использую библиотеку  RadioHead для Rfm69h  , там в примере сервер-клиент , сервер шлет сообщение ,а клиент после получения шлет ответ . В сервере ответ выводится на монитор 

if ((rf69_manager.recvfromAckTimeout(buf, &len, 2000, &from)))
      {
        buf[len] = 0; // zero out remaining string

        Serial.print("Got reply from #"); Serial.print(from);
        Serial.print(" [RSSI :");
        Serial.print(rf69.lastRssi());
        Serial.print("] : ");
        Serial.println((char*)buf);

 мне необходимо , чтоб в зависимости от ответа клиента (например в ответ пришла цифра44) я на сервере чере IF выполнял присвоенную этой цифре команду.Serial.println((char*)buf);  - выводит на монитор нет проблем , но if  ( (char*)buf == 44 ) не работает. Знаю , что туплю не судите строго )

 

 

ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

victorv пишет:
сервер-клиент , сервер шлет сообщение ,а клиент после получения шлет ответ .

Тут ничего не перепутано? Обычно клинты задалбливают серверов вопросами, а те им отвечают. Потому они так и называются: клиент и сервер.

victorv пишет:
цифра44

Это что ж у Вас за система счисления, что там есть цифра 44?

А вообще, пока Вы не опубликуете свои (а не из примера) коды клиента и сервера, причём короткие, чтобы только проблемы показать, ничего кроме флуда в теме не будет.

Причём публикуйте коды по правилам форума, а не как у Вас сейчас.

 

victorv
Offline
Зарегистрирован: 31.07.2015
   
TX

    char radiopacket[20] = "123";//отсылаемый код
    itoa(packetnum++, radiopacket + 13, 10);
    Serial.print("Sending "); Serial.println(radiopacket);
    if (rf69_manager.sendtoWait((uint8_t *)radiopacket, strlen(radiopacket), DEST_ADDRESS))//отсылаем
    {

      // ждем ответа на сигнал
      uint8_t len = sizeof(buf);

      uint8_t from;
      if ((rf69_manager.recvfromAckTimeout(buf, &len, 2000, &from)))
      {
        buf[len] = 0; // zero out remaining string

        Serial.print("Got reply from #"); Serial.print(from);
        Serial.print(" [RSSI :");
        Serial.print(rf69.lastRssi());
        Serial.print("] : ");
        Serial.println((char*)buf);// ОТВЕТ

        delay(1000);

RX

// Dont put this on the stack:
uint8_t data[]  = "80";// КОД ОТВЕТА , ЧТО СИГНАЛ ПРИНЯТ .ЦИФРА ПРОИЗВОЛЬНАЯ
 
// Dont put this on the stack:

uint8_t buf[RH_RF69_MAX_MESSAGE_LEN];

void loop() {
  if (rf69_manager.available())
  {
    // Wait for a message addressed to us from the client
    uint8_t len = sizeof(buf);
    uint8_t from;
    if (rf69_manager.recvfromAck(buf, &len, &from)) {
      buf[len] = 0; // zero out remaining string
      
      Serial.print("Got packet from #"); Serial.print(from);
      Serial.print(" [RSSI :");
      Serial.print(rf69.lastRssi());
      Serial.print("] : ");
      Serial.println((char*)buf);
   
     
      Blink(LED, 40, 3); //blink LED 3 times, 40ms between blinks

      // Send a reply back to the originator client
      if (!rf69_manager.sendtoWait(data, sizeof(data), from))
        Serial.println("Sending failed (no ack)");
    }
  }
}

 

мне необходимо сравнивать полученное значение в ответе .Проблема - я не могу получить цифровое значение из строки


Serial.println((char*)buf);

что б потом его сравнивать , а цифра произвольная .

 

ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

А чем не устраивает atoi((char *)buf);?

victorv
Offline
Зарегистрирован: 31.07.2015

Спасибо  - то , что надо .

XOBIT
Offline
Зарегистрирован: 23.11.2018

Подскажите, а если надо сравнить полученное значение в ответе с текстом?

Serial.print("Got packet from #"); Serial.print(from);
      Serial.print(" [RSSI :");
      Serial.print(rf69.lastRssi());
      Serial.print("] : ");
      Serial.println((char*)buf);
   
      if ((char*)buf) == "LED1 on")   {digitalWrite(LED1, HIGH)};  
      if ((char*)buf) == "LED1 off")  {digitalWrite(LED1, LOW)};  

Ну как то так, надо....

b707
Онлайн
Зарегистрирован: 26.05.2017

XOBIT пишет:

Подскажите, а если надо сравнить полученное значение в ответе с текстом?

текст операцией "==" не сравнивается.

Читайте https://rsdn.org/article/cpp/cstr.xml

XOBIT
Offline
Зарегистрирован: 23.11.2018
      if(strcmp("LED1 on", (char*)buf) ! == 0 )  {digitalWrite(LED1, HIGH)};  
      if(strcmp("LED1 off", (char*)buf) ! == 0)  {digitalWrite(LED1, LOW)};  

а если так?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

а так даже не скомпилируеца

XOBIT
Offline
Зарегистрирован: 23.11.2018

Сдаюсь! Тогда как?

b707
Онлайн
Зарегистрирован: 26.05.2017

XOBIT пишет:

Сдаюсь! Тогда как?

что мешает посмотреть примеры в Гугле?

XOBIT
Offline
Зарегистрирован: 23.11.2018

Не смог найти. Может хорош? 
Один пост с решением и закроем тему.

 

b707
Онлайн
Зарегистрирован: 26.05.2017

XOBIT пишет:

Не смог найти.

пипец какой-то. программировать не умеешь и даже в Гугле искать. Тогда зачем тебе ответ? - все равно не пригодится. Сам программу ты не напишешь по первой причине, а скопипастить не сумеешь по второй....

Оператор сравнения в твоем коде какой, посмотри внимательно