загадочный код
- Войдите на сайт для отправки комментариев
Вс, 22/02/2015 - 16:43
Добрый день, есть два участка кода один - вебсервер с возможностью скачивать файлы с SD карты второй- отдельная функция getRCcommand которая в основном коде даже не вызывается пока что. И если в теле функции в переменную заносится nashelpult=true; то основной веб сервер престает читать файлы с карты памяти при запросе через браузер, почему так ? вот код:
#include <SPI.h>
#include <Ethernet.h>
#include <SD.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,7,177);
IPAddress dns1(192,168,7,1);
IPAddress gateway(192,168,7,1);
IPAddress subnet(255,255,255,0);
EthernetServer server(80);
File webFile;
void setup() {
Ethernet.begin(mac, ip, dns1, gateway, subnet);
server.begin();
Serial.begin(9600);
digitalWrite(10, HIGH);
// Serial.print("Result key===============");
// Serial.println(getRCcommand(1,3));
if (!SD.begin(4)) {
return;
}
}
void loop() {
int BUFSIZ = 255;
int index = 0;
char clientline[BUFSIZ];
EthernetClient client = server.available();
if (client) {
boolean currentLineIsBlank = true;
index = 0;
while (client.connected()) {
if (client.available()) {
char c = client.read();
if (c != '\n' && c != '\r') {
clientline[index] = c;
index++;
if (index >= BUFSIZ)
index = BUFSIZ -1;
continue;
}
clientline[index] = 0;
char* filename = processFile(clientline);
Serial.print("Requested: ");
Serial.println(filename);
/* Setup AJAX Requests Here:
* These are just direct output values that are requested
* with AJAX.
*/
if (strstr(clientline, "GET /?data=val1") != 0) {
Serial.println("file");
code200(client);
client.println(1337);
break;
}
if (SD.exists(filename)) {
code200(client);
webFile = SD.open(filename);
if (webFile) {
while(webFile.available()) {
client.write(webFile.read());
}
webFile.close();
}
break;
} else {
if (strlen(filename) < 2) {
webFile = SD.open("index.htm");
if (webFile) {
while(webFile.available()) {
client.write(webFile.read());
}
webFile.close();
}
} else {
client.println("HTTP/1.1 404 Not Found");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println();
client.println("<html><head><title>404 - Not Found</title></head><body><h1>404 - Not Found</h1></body></html>");
break;
}
}
break;
}
}
delay(1);
client.stop();
}
}
void code200(EthernetClient client) {
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println();
}
char* processFile(char clientline[255]) {
char *filename;
filename = clientline + 5;
(strstr(clientline, " HTTP"))[0] = 0;
return filename;
}
int getRCcommand(int pult, int key){//получаем ключ вводя номер пульта и номер команды
char pultchar[20];//временный массив для получения аски кода пульта
char keychar[20];// масив для аскикода ключа
boolean nashelpult=0;
boolean nashelkey=0;
File configfile;
char configline[]={};//массив для хранения конф файла с карты памяти
int i=0;
int j=0;
char resultkey[]={};
itoa(pult,pultchar,10);// преобразуем номер пульта в аски код
itoa(key,keychar,10);//преобразуем номер команды в аски код
const char pultcharconst={pultchar[0]};//постоянное хранение аски кода пульта
const char keycharconst={keychar[0]};
if (!SD.exists("config.txt")){
Serial.println("config.txt not exist!!!");
return 0;}
configfile=SD.open("config.txt");//читаем файл
while (configfile.available()){//пока доступен делаем:
configline[i]=configfile.read();//читаем первый символ файла
if (i==0){
i++;
continue;}
if (!nashelpult && configline[i-1]==pultcharconst && configline[i]=='p'){
i++;
nashelpult=true;
continue;}
if (nashelpult && !nashelkey && configline[i]=='p'){
Serial.println("!key not found error!!!!");
configfile.close();
resultkey[0]=0;
return 0;}
if (nashelpult && !nashelkey && configline[i-1]==keycharconst && configline[i]=='k'){//если нашли пульт но не нашли команду и нашли номер команды и букву К
nashelkey=1;
i++;
continue;}// команда и пульт найдены
if (nashelkey && !(configline[i]=='|')){//если нашли позицию в файле с командой по очереди записываем в массив Резулт каждый символ пока не увидим "|"
Serial.print ("Part of resultkey==");
Serial.println (configline[i]);
resultkey[j]=configline[i];
i++;
j++;
continue;}
if (nashelkey && configline[i]=='|'){//если команда закончилась закрываем файл и выводим результат преобразуя его из аски в интеджер
resultkey[j]='\0';
configfile.close();
Serial.print ("resultkey==");
Serial.println (resultkey);
return atoi(resultkey);}
i++;}
configline[i]='\0';//записываем в конец массива символ окончания
if (configline[i]=='\0' && !nashelpult) {//если массив кончился и пульт не найден
Serial.println("pult not found error!!!!");
configfile.close();
resultkey[0]=0;
return 0;}
if (configline[i]=='\0' && !nashelkey) {//если массив кончился и команда не найдена
Serial.println("key not found error!!!!");
configfile.close();
resultkey[0]=0;
return 0;}
configfile.close();}
убрал последние два Serial.println и заработало! почему так я так и не понял...
память наверно закончилась