Здравствуйте имеется файл который хранит N строк, разделителем является символ ";". Пример файла: Код (Text): 0.0031183; 0.0031183; 0.0031183; 0.0031183; 0.0031183; -0.0017693; -0.0066569; -0.0066569; -0.0017693; После того как я пытаюсь считать данные с SD получаю следующие: Код (Text): 31183 31183 31183 31183 31183 17693 66569 66569 17693 Что не получается: Считать знак и точку. Код программы: Код (C++): while (myFile.available()) { char ch = myFile.read(); if(ch == ';') { Serial.println(buff); buff = 0; } else if(ch >= 48 && ch <= 57) { buff *= 10; buff += ch - 48; } } Как я понимаю дело в таблице символ ASCII, но я не понимаю каким образом включить недостающие символы, в связи с этим и возник вопрос.
Код (C++): while (myFile.available()) { char ch = myFile.read(); Serial.print(ch); if (ch == ';') { Serial.println(); } }
С помощью Serial.print(ch); я получаю строку, ее возможно как то преобразовать в float и записать в массив?
Ну это вполне естественно, данные-то в вашем файле ведь представлены вероятнее всего в символьном виде. Ваши числа в файле - последовательности символов, вернее цифр, это и есть строка. Для преобразования в вещественное число используйте подобный код: Код (C++): char* buff = "-0.117"; float fnum = atof(buff);
а вот такая реализация считается плохим тоном? Код (C++): while (myFile.available()) { char ch = myFile.read(); data += (char)ch; if (ch == '\n') { Serial.println(data.toFloat(), 7); in += data.toFloat(); data = ""; } }
В контексте AVR (с его малым объёмом памяти) -- скорее да, эта реализация считается плохим тоном. Класс String из комплекта Arduino IDE конечно удобен для работы со строками, но этот класс использует динамическое выделение/освобождение памяти. С этим классом нужно очень аккуратно работать.
Добавить else if ( '.' == ch ) ... Но от точки нужно считать дробную часть. Т.е. нужен флаг, что дальше цифры доли десятых и считать их в другой аккумулятор а потом сложить. Все это имеет смысл, если нужно получить из строки число, а не скопировать её в Serial.
Мое мнение, для данной задачи это как из пушки по воробьям стрелять. А потом выясняется, что не хватает скорости/объема памяти.