Всем привет! Хочу спросить совета у местных гуру. Делаю связь ардуины с модулем nodemcu. На модуле такой код: Код (C++): void setup() { Serial.begin(9600); } String out = "CV:1234"; void loop() { // put your main code here, to run repeatedly: Serial.println(out); delay(1000); } Данные идут, принимаю на сериал3 меги, и выдаю принятые данные в монитор порта - все ок. Далее хочу разбить строку - отделить числа от букв, следующим кодом: Код (C++): String input = ""; while (Serial3.available()) { input = input + (char)(Serial3.read()); Serial.print(input); } //Что ниже не работает... if (input.startsWith("CV:")) { String Voltage = input.substring(3); Voltage.trim(); int Vol = Voltage.toInt(); Serial.print(Vol); } Но код не работает. Куда копать?
Код (C++): while (Serial3.available()) { char temp=Serial3.read(); if (temp>' ') { input += temp; } } int start=input.indexOf(F("CV:")); int Vol=0; if (start>-1){ if (input.length()>=(start+7)) { input=input.substring(start+3); Vol=input.toInt(); } } Не оптимально конечно, но все же....
Блин. А почему я создал функцию, поместил этот код в нее и вызвал в лупе и не работает. Поместил код тупо в луп и работает
Функцию в студию Вангую, в функции объявите переменную input, как статик static String input; Но это ооочень не айс, неумирающие стринги засирают память.
Для начала - выучить максимальные диапазоны, которые вмещает переменная типа int. В вашем случае - в неё не влезает переданное число, ибо диапазон значений знакового int - смотрите: -32767 - 32767, подробности: http://www.cplusplus.com/reference/climits/ Понимаете, да? Либо расширяйте тип до long, либо (что будет лучшим вариантом) - ознакомьтесь с началами.