загадочный код

sergey_777-s
Offline
Зарегистрирован: 20.02.2015

Добрый день, есть два участка кода один - вебсервер с возможностью скачивать файлы с 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();}

 

sergey_777-s
Offline
Зарегистрирован: 20.02.2015

убрал последние два Serial.println и заработало! почему так я так и не понял...

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

память наверно закончилась