преобразование символов в строки в передатчике и приемнике 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);
@amal, 👍-1
Обсуждение1 ответ
Вы должны правильно понимать, что вы пытаетесь сделать. (Похоже) у вас есть десятичное представление числа, закодированное как строка символов. «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
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
Заголовок и текст в ответе не спрашивают одно и то же. Что ты хочешь делать? char в число или char в строку? И код очень плохо отформатирован. Я также не вижу переменной (содержимого) передатчика, которую можно преобразовать, или «пароль» всегда является числом? Так что именно вы имеете в виду?, @Peter Paul Kiefer
Если ID является шестнадцатеричным значением, то оно слишком длинное для целого числа., @Peter Paul Kiefer
Что именно вы хотите преобразовать в число и почему вы считаете, что преобразование в число — это хорошая идея?, @Majenko