Делаю небольшой проект по управлению пивоварней. Рецепты хранятся на sd карте в таком виде - Код (Text): 3,IPA,62,72,82,3,3,3,8,3,2,5,7; 3,STAUT,32,43,62,10,25,30,60,3,60,90,95; 5,BITTER,30,40,50,60,70,10,20,30,40,50,60,3,60,90,95; 3,PORTER,32,45,72,10,25,30,30,2,10,20; ..... А так я его заношу в массив Код (Text): char *recepies[30][30]; void setup() { Serial.begin(9600); .... SD_recepies() ; //проверка №1 for (int j=0; j <10 ; j++) { Serial.print(recepies[j][0]); Serial.print("-") ;Serial.print(recepies[j][1]);Serial.print("-") ;Serial.println(recepies[j][2]); } } void SD_recepies() { String stringOne = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,;"; int q=0; int t=0; int h=0; char symbol2 = 0; char array[10]; File configFile = SD.open("recepies.txt"); if (configFile) { while (configFile.available()) { symbol2 = configFile.read(); if (stringOne.indexOf(symbol2)!=-1) { if (symbol2==';' ) {t++; recepies[q][t]=array; q++; t=0; h=0 ; kol_receptov++; memset (array, 0, sizeof(array)); } else { if (symbol2==',') {recepies[q][t]=array; h=0; t++; memset (array, 0, sizeof(array)); } else {array[h]=symbol2; h++;} } } delay(1); } configFile.close(); } //проверка №2 for (int j=0; j <10 ; j++) { Serial.print(recepies[j][0]); Serial.print("-") ;Serial.print(recepies[j][1]);Serial.print("-") ;Serial.println(recepies[j][2]); } } Делаю 2 проверки. Проверка №1 выдает иероглифы, 2-я выдает только знаки "-". Всю голову вчера себе сломал..... Подскажите где я не то делаю...
А если добавить в строчки Код (Text): if (symbol2==';' ) {t++; recepies[q][t]=array; q++; t=0; h=0 ; kol_receptov++; memset (array, 0, sizeof(array)); } ... if (symbol2==',') {recepies[q][t]=array; h=0; t++; memset (array, 0, sizeof(array)); } после recepies[q][t]=array; следующее Serial.println(recepies[q][t]); то выводит все как надо.
Вы совершенно неправильно работаете со строками. Присваивание одной переменной типа char* другой всего лишь копирует указатель на массив символов, оно не копирует содержимое строки. А уж распихивать указатель на локальную статическую переменную array, находящуюся в стеке во все элементы recepies - это изощренный способ обкладывание себя граблями со всех сторон.
Хорошие люди с соседнего форума подсказали Код (Text): char recname[30][15]; int recpara[30][20]; void Load_recepies() { File configFile = SD.open("recepies.txt"); if (configFile) { char buff[15]; byte rec = 0, par = 0, c = 0; while(configFile.available()) { char symb = configFile.read(); if(symb >= 32) { if(symb == ',' || symb == ';') { buff[c] = '\0'; c = 0; if(par == 0) strcpy(recname[rec], buff); else recpara[rec][par-1] = atoi(buff); par++; if(symb == ';') { par = 0; rec++; } } else buff[c++] = symb; } } } }