Cпасибо. А если не секрет: зачем нужны "xvalue" и "yvalue" ? Почему две переменные? Я не совсем четко представляю себе что делает эта функция. Был бы благодарен за комментарии к каждому действию.
DIYMan пишет:
spa-sam пишет:
Один добрый человек подсказал вот такую функцию
Жесть. Можно сильно проще. Но раз это работает - пущай.
А можно поинтересоваться - как именно? ))) Очень хочу разобраться в происходящем.
А можно поинтересоваться - как именно? ))) Очень хочу разобраться в происходящем.
С тем же strchr, например. Имея в виду "проще" - я подразумевал понятность и краткость кода, алгоритм там примерно одинаков.
Так... Эти все функции, насколько я могу судить - библиотечные? Это я про strchr(), strtok(), atoi()... Наверно там еще какие-то есть? А можете подсказать где можно прочитать про "sscanf()", "sprintf()" и тому подобные? И что это за библиотека?
Вах! Какие хорошие ссылки. Не ну погуглить - это я конечно, полентяйничал. А вот ссылка со списком хэдеров - очень полезная. Я ж надеюсь всё это применимо к конексту? В смысле - IDE нормально отнесется если в скетче ему будут встречаться функции этих хэдеров?
Я ж надеюсь всё это применимо к конексту? В смысле - IDE нормально отнесется если в скетче ему будут встречаться функции этих хэдеров?
Всё, что есть в поставке GCC, который идёт в комплекте Arduino IDE - будет понято компилятором. Стандартные библиотеки - точно, при условии, конечно, что есть их порт под МК.
Cпасибо. А если не секрет: зачем нужны "xvalue" и "yvalue" ? Почему две переменные? Я не совсем четко представляю себе что делает эта функция. Был бы благодарен за комментарии к каждому действию.
String val = "12.34;nod;54;-23.7;hello"; // наша строка на парсинг
void setup() {
Serial.begin(9600);
}
void loop() {
String data_1 = getValue(val,';',0 ); //присваиваем переменной первый набор символов разделённые ";" т.е 12.34
String data_2 = getValue(val, ';', 1); //присваиваем переменной второй набор символов разделённые ";" т.е nod
String data_3 = getValue(val, ';', 2); //присваиваем переменной второй набор символов разделённые ";" т.е 54
String data_4 = getValue(val, ';', 3); //присваиваем переменной второй набор символов разделённые ";" т.е -23.7
String data_5 = getValue(val, ';', 4); //присваиваем переменной второй набор символов разделённые ";" т.е hello
//вместо ";" может быть любой символ -разделитель
//выводим в компорт всё, что напарсили
Serial.println("data_1: " + data_1);
Serial.println("data_2: " + data_2);
Serial.println("data_3: " + data_3);
Serial.println("data_4: " + data_4);
Serial.println("data_5: " + data_5);
Serial.println();
Serial.println();
delay (2000);
float var =data_1.toFloat() + data_3.toFloat(); //конвертируем string во float и суммируем
//выводим результат сложения
Serial.print ("data_1 + data_3 = ");
Serial.println( var);
Serial.println();
Serial.println();
delay (2000);
}
// Функция парсинга строки, которая вызывается в loop
String getValue(String data, char separator, int index)
{
int found = 0;
int strIndex[] = {0, -1 };
int maxIndex = data.length()-1;
for(int i=0; i<=maxIndex && found<=index; i++){
if(data.charAt(i)==separator || i==maxIndex){ found++;
strIndex[0] = strIndex[1]+1;
strIndex[1] = (i == maxIndex) ? i+1 : i;}
}
return found>index ? data.substring(strIndex[0], strIndex[1]) : "";
}
добавляю и удаляю из скетча кусок ниже - память и динамическая память - НЕ МЕНЯЕТСЯ.
На что влияет String ? только на скорость выполнения программы или все же память где то сильно кушает?
int Index1 = val.indexOf(','); //разделительный символ
int Index2 = val.indexOf(',', Index1+1); //вычисляем второй символ
int Index3 = val.indexOf(',', Index2+1); //...третий и т.д.
int Index4 = val.indexOf(',', Index3+1);
int Index5 = val.indexOf(',', Index4+1);
String Val_1 = val.substring(0, Index1);//что-то перед первым разд. сим.
String Val_2 = val.substring(Index1+1, Index2);//что-то за первым разд. сим.
String Val_3 = val.substring(Index2+1, Index3);//за вторым и т.д
String Val_4 = val.substring(Index3+1, Index4);
String Val_5 = val.substring(Index4+1, Index5);
Один добрый человек подсказал вот такую функцию, очень удобную и простую. За что ему и спасибо!
Cпасибо. А если не секрет: зачем нужны "xvalue" и "yvalue" ? Почему две переменные? Я не совсем четко представляю себе что делает эта функция. Был бы благодарен за комментарии к каждому действию.
Один добрый человек подсказал вот такую функцию
Жесть. Можно сильно проще. Но раз это работает - пущай.
А можно поинтересоваться - как именно? ))) Очень хочу разобраться в происходящем.
А можно поинтересоваться - как именно? ))) Очень хочу разобраться в происходящем.
С тем же strchr, например. Имея в виду "проще" - я подразумевал понятность и краткость кода, алгоритм там примерно одинаков.
А можно поинтересоваться - как именно? ))) Очень хочу разобраться в происходящем.
С тем же strchr, например. Имея в виду "проще" - я подразумевал понятность и краткость кода, алгоритм там примерно одинаков.
А можете подсказать где можно прочитать про "sscanf()", "sprintf()" и тому подобные? И что это за библиотека?
Обычно делается так: https://www.google.ru/search?q=sscanf&oq=sscanf&aqs=chrome..69i57&sourceid=chrome&ie=UTF-8
Ну и далее по списку ;) Вот тебе ещё интересная ссылка, на предмет почитать: http://cppstudio.com/cat/309/
А можете подсказать где можно прочитать про "sscanf()", "sprintf()" и тому подобные? И что это за библиотека?
Обычно делается так: https://www.google.ru/search?q=sscanf&oq=sscanf&aqs=chrome..69i57&sourceid=chrome&ie=UTF-8
Ну и далее по списку ;) Вот тебе ещё интересная ссылка, на предмет почитать: http://cppstudio.com/cat/309/
Я ж надеюсь всё это применимо к конексту? В смысле - IDE нормально отнесется если в скетче ему будут встречаться функции этих хэдеров?
Всё, что есть в поставке GCC, который идёт в комплекте Arduino IDE - будет понято компилятором. Стандартные библиотеки - точно, при условии, конечно, что есть их порт под МК.
Cпасибо. А если не секрет: зачем нужны "xvalue" и "yvalue" ? Почему две переменные? Я не совсем четко представляю себе что делает эта функция. Был бы благодарен за комментарии к каждому действию.
Вот ещё способ неплохой: (ликбез тут - https://www.arduino.cc/en/Tutorial/StringSubstring)
добавляю и удаляю из скетча кусок ниже - память и динамическая память - НЕ МЕНЯЕТСЯ.
На что влияет String ? только на скорость выполнения программы или все же память где то сильно кушает?