Код (Text): File myFile = SD.open("config.txt", FILE_READ); if (myFile) { String aString=""; while (myFile.available()) { char c=myFile.read(); aString+=c; } } Код (Text): //define MAX_STRING_LEN 255 было #define MAX_STRING_LEN 255 // стало File myFile = SD.open("config.txt", FILE_READ); if (myFile) { char aString[MAX_STRING_LEN]; pos=0; while (myFile.available()) { char c=myFile.read(); aString[pos]=c; pos++; //if (pos)>=MAX_STRING_LEN-1 было if (pos>=MAX_STRING_LEN-1) break; // стало } aString[pos] =0; //добавлем терминатор } Исправлено
Извините за глупый вопрос, я просто недавно знакома с Arduino, первую часть кода поняла немного,а со вторым туго. "aString[pos]=c; pos++; if (pos)>=MAX_STRING_LEN-1 } aString[pos] =0; //добавлем терминатор } "???
Код (Text): #define MAX_STRING_LEN 255 char aString[MAX_STRING_LEN]; File myFile = SD.open("config.txt", FILE_READ); // открыли файл if (myFile) { pos=0; while (myFile.available()) { char c=myFile.read(); aString[pos]=c; // записали символ "c" в позицию "pos" строки "aString". pos++; // перешли к следующей позиции if ((pos)>=MAX_STRING_LEN-1) // если дошли до конца строки { break; // закончили читать строку, вышли из while } } aString[pos] =0; // поставили метку конца строки // ... // закрыли файл }
Точно. Меня прервали, и в результате ушел недописанный фрагмент кода. Дабы не возникало вопросов, дорисовал недостающее.
В обоих вариантах вполне можно скормить в Serial.print() переменную aString. В первом случае это будет класс String. Во втором - классический массив элементов типа char. Serial.print() одинаково поймет и то, и другое.
Не весь файл выдает.( Через for выводить Serial.print??? #define MAX_STRING_LEN 255 char aString[MAX_STRING_LEN]; File myFile = SD.open("config.txt", FILE_READ); // открыли файл if (myFile) { pos=0; while (myFile.available()) { char c=myFile.read(); aString[pos]=c; // записали символ "c" в позицию "pos" строки "aString". pos++; // перешли к следующей позиции if ((pos)>=MAX_STRING_LEN-1) // если дошли до конца строки { break; // закончили читать строку, вышли из while } } aString[pos] =0; // поставили метку конца строки // ... // закрыли файл } for (int j=0; j<6; j++) Serial.print(aString[j]);
Какого размера файл? Вам нужно его держать все время в памяти? Сейчас длина строки всего 255 символов (254+терминатор). Можно сделать больше, но не намного, т.к. у микроконтроллеров вообще мало оперативной памяти.
в данный момент размер не большой, но в дальнейшем нужен большой.Смысл в том что бы считать текст в char[] после сделать с ним преобразования и записать на sd другой файл но уже с координатами.
Тогда нужно обрабатывать текст по частям 1/4Kb~4Kb (смотря какой контроллер используется). Считали кусок - обработали - записали.
Было бы намного проще, если бы вы рассказали, какие у вас входные данные и как именно они должны обрабатываться.
Входные данные у меня текст (любой), далее мне нужно этот текст поместить в char[ ], после помещения его в массив он "переводится" в цифры и происходят математические операции.После полученные цифры записываем в файл на sd.Далее эти цифры считываем в переменную long[ ] производим математические вычисления, переводим обратно в текст и записываем в файл.(Алгоритм шифрования). Очень долго сидела над математической частью.А сейчас запуталась с чтением\записью (((
Сколько вам данных нужно на одну итерацию алгоритма, перед тем как вы сможете записать результат? Насколько я понимаю, алгоритм потоковый и обрабатывает данные по-байтово. Если это так, то вам не нужно даже хранить всю строку, либо можно ограничиться любым небольшим буфером.
Ну тогда вам в самом простом варианте вообще никакой буфер не нужен. Код (Text): void initEncoder() { } byte encodeByte(byte x) { byte y = x; return y; } bool processFile(char *src_name, char *dst_name) { bool result = false; File src_file = SD.open(src_name, FILE_READ); if (src_file) { File dst_file = SD.open(dst_name, FILE_WRITE); if (dst_file) { initEncoder(); while (src_file.available()) { byte x = src_file.read(); byte y = encodeByte(x); dst_file.write(y); } dst_file.close(); result = true; } src_file.close(); } return result; }