Не удается преобразовать строку в целое число при получении данных из pubnub

Мне удалось загрузить данные датчика mpu9250 на PubNub и NodeMCU, но я не смог использовать полученные данные для управления сервоприводом

Посмотрите на показания порта и увидите, что угол сервопривода по-прежнему показывает "0".

COM PORT Reading

Код:-

IMU.readSensor();
char buf[500] = {};
int imu = IMU.getAccelX_mss() * 10;

sprintf(buf, "\"%d\"", imu);

Serial.print(buf);


PubNonSubClient *pclient = PubNub.publish(pubchannel, buf);
if (!pclient) return;
PublishCracker cheez;
cheez.read_and_parse(pclient);

/** You're mostly interested in `outcome()`, and,
    if it's "failed", then `description()`. 
*/

Serial.print("Outcome: "); Serial.print(cheez.outcome());
Serial.print(' '); Serial.println(cheez.to_str(cheez.outcome()));
Serial.print("description: "); Serial.println(cheez.description());
Serial.print("timestamp: "); Serial.println(cheez.timestamp());
Serial.print("state: "); Serial.print(cheez.state());
Serial.print(' '); Serial.println(cheez.to_str(cheez.state()));
Serial.print("IMU Reading: "); Serial.println(IMU.getAccelX_mss());

pclient->stop();

/* Wait for news. */
PubSubClient *sclient = PubNub.subscribe(subchannel);
if (!sclient) return; // ошибка
String msg;
SubscribeCracker ritz(sclient);
while (!ritz.finished()) {
    ritz.get(msg);
    if (msg.length() > 0) {
        Serial.print("Received: "); Serial.println(msg);
        pos = msg.toInt();
        Serial.print("value of servo angle: "); Serial.println(pos);
        myservo.write(pos);
    }

}
sclient->stop();



delay(1000);

Как мне преобразовать строку в целое число, чтобы ее можно было использовать в servo?

, 👍1

Обсуждение

Подсказка: Возможно, потребуется удалить лишние символы ("..") перед преобразованием строки в целое число., @Mikael Patel

о да, позвольте мне попробовать, @Sultan Morbiwala


1 ответ


1

Это код, который сработал для меня: -

        msg.remove(0,1); msg.remove(msg.length());
        pos = msg.toInt();
        Serial.print("value of servo angle: "); Serial.println(pos);
        myservo.write(pos);

Мне пришлось удалить этот символ (" ") с помощью msg.remove(0,1) & msg.remove(msg.length()), который удаляет начальную и конечную строки.

,

очиститель: msg.trim(); Serial.println("значение угла сервопривода:" + Строка(msg.toInt());, @dandavis

хорошо, намного лучше, @Sultan Morbiwala

но msg.trim() не сработал, @Sultan Morbiwala

в ardunio это метод мутации void, а не трансформатор, как в других языках., @dandavis