преобразование символов в строки в передатчике и приемнике Arduino

Я использую передатчик и приемник, но хочу изменить тип данных с символьного на целочисленный

код получателя

#include <RH_ASK.h>//включаем библиотеку RadioHead ASK
#include <SPI.h> // включаем зависимую библиотеку SPI

 RH_ASK rf_driver; // создать объект ASK
int ledon = 13;
String userid;
String password;
 //RH_ASK ID1; // создать объект ASK
//RH_ASK pass1; // создать объект ASK

void setup() {

  rf_driver.init(); // инициализируем объект ASK


  Serial.begin(9600); //настройка серийного монитора на 9600

  //если(!rf_driver.init())
       //Serial.print("Ошибка инициализации");
}

void loop() {

  // установить буфер на размер ожидаемого сообщения
  uint8_t buf[9];  
  uint8_t buflen =sizeof(buf);

  //проверить правильность размера полученного пакета
  if (rf_driver.recv(buf,&buflen))
  {
    int i;
    // получено сообщение с корректной контрольной суммой
    Serial.print("id: ");
    Serial.println((char*)buf);
      userid =(char*)buf;
        Serial.println(userid);

  }

delay(5000);

   uint8_t buf2[8];  
  uint8_t buflen2 = sizeof(buf2);

   if (rf_driver.recv(buf,&buflen))

  {

    int i;
    // получено сообщение с корректной контрольной суммой
    Serial.print("password: ");
    Serial.println((char*)buf);
      password = (char*)buf;
      Serial.println(password);

  }
  delay(5000);

код передатчика

//Включаем библиотеку шифт-кеинга RadioHead Amplitidue
#include <RH_ASK.h>
// Подключаем зависимую библиотеку ISP
#include <SPI.h>

//создаем объект с амплитудной манипуляцией
RH_ASK rf_driver;


void setup() {
 // инициализируем объект ASK
rf_driver.init();

Serial.begin(9600);

  //если(!rf_driver.init())
      //Serial.print("Ошибка инициализации");

}

void loop() 
{

  const char *pass= "123456789";
rf_driver.send((uint8_t *)pass, strlen(pass));
rf_driver.waitPacketSent();
delay(5000);

const char *ID= "A00034732";

rf_driver.send((uint8_t *)ID, strlen(ID));
rf_driver.waitPacketSent();
delay(5000);

, 👍-1

Обсуждение

Заголовок и текст в ответе не спрашивают одно и то же. Что ты хочешь делать? char в число или char в строку? И код очень плохо отформатирован. Я также не вижу переменной (содержимого) передатчика, которую можно преобразовать, или «пароль» всегда является числом? Так что именно вы имеете в виду?, @Peter Paul Kiefer

Если ID является шестнадцатеричным значением, то оно слишком длинное для целого числа., @Peter Paul Kiefer

Что именно вы хотите преобразовать в число и почему вы считаете, что преобразование в число — это хорошая идея?, @Majenko


1 ответ


0

Вы должны правильно понимать, что вы пытаетесь сделать. (Похоже) у вас есть десятичное представление числа, закодированное как строка символов. «12345» — это не число, а набор символов. (Технически каждый символ представляет собой число с определенным значением ASCII, например, цифра «1» имеет значение ASCII 49.)

Чтобы преобразовать "12345" в число 12345, ЦП должен взять каждый символ, найти его цифровое значение, умножить его на правильную степень 10 и прибавить ко всем остальным. Есть несколько встроенных способов сделать это за вас. Самой простой является функция atoi(), например

int x = atoi("150");

В вашем случае попробуйте следующее:

int userid = atoi((char *) buf);

Serial.println(userid);
,

Обратите внимание, что int в Uno состоит только из 16 бит, поэтому atoi() подходит только для чисел в пределах [−32 768, +32 767]., @Edgar Bonet