Rfm69hw и библиотека RadioHead
- Войдите на сайт для отправки комментариев
Здравствуйте , помогите куда копать . Использую библиотеку 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 ) не работает. Знаю , что туплю не судите строго )
Тут ничего не перепутано? Обычно клинты задалбливают серверов вопросами, а те им отвечают. Потому они так и называются: клиент и сервер.
Это что ж у Вас за система счисления, что там есть цифра 44?
А вообще, пока Вы не опубликуете свои (а не из примера) коды клиента и сервера, причём короткие, чтобы только проблемы показать, ничего кроме флуда в теме не будет.
Причём публикуйте коды по правилам форума, а не как у Вас сейчас.
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)"); } } }мне необходимо сравнивать полученное значение в ответе .Проблема - я не могу получить цифровое значение из строки
что б потом его сравнивать , а цифра произвольная .
А чем не устраивает
atoi((char *)buf);?Спасибо - то , что надо .
Подскажите, а если надо сравнить полученное значение в ответе с текстом?
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)};Ну как то так, надо....
Подскажите, а если надо сравнить полученное значение в ответе с текстом?
текст операцией "==" не сравнивается.
Читайте https://rsdn.org/article/cpp/cstr.xml
if(strcmp("LED1 on", (char*)buf) ! == 0 ) {digitalWrite(LED1, HIGH)}; if(strcmp("LED1 off", (char*)buf) ! == 0) {digitalWrite(LED1, LOW)};а если так?
а так даже не скомпилируеца
Сдаюсь! Тогда как?
Сдаюсь! Тогда как?
что мешает посмотреть примеры в Гугле?
Не смог найти. Может хорош?
Один пост с решением и закроем тему.
Не смог найти.
пипец какой-то. программировать не умеешь и даже в Гугле искать. Тогда зачем тебе ответ? - все равно не пригодится. Сам программу ты не напишешь по первой причине, а скопипастить не сумеешь по второй....
Оператор сравнения в твоем коде какой, посмотри внимательно