Arduino Mega Server

Модератор: Alex

SPbDima
Сообщения: 113
Зарегистрирован: Пн окт 19, 2015 8:27 am
Благодарил (а): 9 раз
Поблагодарили: 21 раз

Re: Arduino Mega Server

Сообщение SPbDima » Ср дек 30, 2015 1:52 pm

victorhom писал(а):
SPbDima писал(а):Выкладываю Релиз.
файл arduino_mega_server
строка 178

Ошибка компилятора:
'strncpy_P' was not declared in this scope

Плата Arduino Due.
это к Алексу, данную функцию я не трогал, но ошибка знакомая(не помню как избавился).
victorhom
Сообщения: 5
Зарегистрирован: Ср дек 30, 2015 8:15 am
Благодарил (а): 1 раз
Поблагодарили: 0

Re: Arduino Mega Server

Сообщение victorhom » Ср дек 30, 2015 2:15 pm

'strncpy_P' работает только на AVR, у меня DUE...
SPbDima
Сообщения: 113
Зарегистрирован: Пн окт 19, 2015 8:27 am
Благодарил (а): 9 раз
Поблагодарили: 21 раз

Re: Arduino Mega Server

Сообщение SPbDima » Ср дек 30, 2015 5:11 pm

Простого варианта не будет. Возьми часть кода с варианта для due. Попробуй заменить у дистрибутива для due файлы: rtemp.ino, server_cfg.ino, server_ajax.ino
victorhom
Сообщения: 5
Зарегистрирован: Ср дек 30, 2015 8:15 am
Благодарил (а): 1 раз
Поблагодарили: 0

Re: Arduino Mega Server

Сообщение victorhom » Ср дек 30, 2015 6:44 pm

Ок, видимо уже после НГ.
С наступающим!
pastry777
Сообщения: 81
Зарегистрирован: Пт окт 02, 2015 7:47 pm
Благодарил (а): 7 раз
Поблагодарили: 4 раза

Re: Arduino Mega Server

Сообщение pastry777 » Ср дек 30, 2015 8:57 pm

загрузка файлов теперь работает превосходно!!очень клево!
пытался вытянуть(портировать)в свой проект,пока не получилось...хотя вроде и все связи нашел,но все равно,очень все сложно пока=)я вообще впервые именно здесь увидел реализацию этой функции,хотя ранее неоднократно искал по интернету ее и даже сейчас не могу найти еще примеров,только здесь=( ams уникальнее и уникальнее не по дням а по часам=))
SPbDima
Сообщения: 113
Зарегистрирован: Пн окт 19, 2015 8:27 am
Благодарил (а): 9 раз
Поблагодарили: 21 раз

Re: Arduino Mega Server

Сообщение SPbDima » Чт дек 31, 2015 9:11 am

Если есть вопросы по загрузке - спрашивайте! Расскажу подробнее. Про upload читай html5: http://www.html5rocks.com/ru/tutorials/ ... c-examples
SPbDima
Сообщения: 113
Зарегистрирован: Пн окт 19, 2015 8:27 am
Благодарил (а): 9 раз
Поблагодарили: 21 раз

Re: Arduino Mega Server

Сообщение SPbDima » Чт дек 31, 2015 10:46 am

Alex писал(а):Статья на Гиктаймс

«Новогодние приколы от проекта Arduino Mega Server»

http://geektimes.ru/post/268522/
1. В таких случаях говорят: это не баг - это фича.
2. Код же EthernetClient правили, и, скорее всего, в библиотеке(классе) оставили мусор в виде директивы #endif. В данном случае тогда всё логично.

Код: Выделить всё

#ifdef MAJORDOMO_FEATURE
// <-------------------------------------- ВОТ ЗДЕСЬ ЕЩЁ ОТКЛЮЧАЕТСЯ КОМПИЛЯЦИЯ
EthernetClient mclient;
// <-------------------------------------- А ВОТ ЗДЕСЬ УЖЕ НЕТ! ВСЁ, ЧТО НИЖЕ КОМПИЛИРУЕТСЯ, НЕСМОТРЯ НА ЗАПРЕТ!
3. Ломал голову, что за хрень выводится, но потом взял в правило печатать только значения приведенные к типу String и больше с данной проблемой не сталкивался. Скорее всего параметр функции print(ln) - это ссылка на адрес в памяти, поэтому String(является ссылкой) работает корректно, а остальные типы как повезёт.

Спасибо за AMS!

Всех с наступающим Новым годом!
pastry777
Сообщения: 81
Зарегистрирован: Пт окт 02, 2015 7:47 pm
Благодарил (а): 7 раз
Поблагодарили: 4 раза

Re: Arduino Mega Server

Сообщение pastry777 » Чт дек 31, 2015 12:33 pm

[*]
SPbDima писал(а):Если есть вопросы по загрузке - спрашивайте! Расскажу подробнее. Про upload читай html5: http://www.html5rocks.com/ru/tutorials/ ... c-examples
ну раз так,то воспользуюсь моментом=)у вас случаем нет заготовки аплоада на карту,ну к примеру если бы это был веб-сервер тупо с одной страничкой,а не такой навороченный как амс?мне бы там было проще разобраться с алгоритмом,а то тут так все корнями сплетено друг за друга))спасибо...
SPbDima
Сообщения: 113
Зарегистрирован: Пн окт 19, 2015 8:27 am
Благодарил (а): 9 раз
Поблагодарили: 21 раз

Re: Arduino Mega Server

Сообщение SPbDima » Чт дек 31, 2015 1:30 pm

Там не наворочено. Смотри sensors.js и sensors.htm
СпойлерПоказать

Код: Выделить всё

//функция подготовки файла для отправки. Разбивающая и контролирующая корректность доставки
function uploadFile(file, start, nRepeat) {

  var inputButton  = document.getElementById('p_uploaddata'); 
  
    if(stopUpload) {
        stopUpload=false; 
        setTimeoutGetDashData(1); 
        alert('отправка отменена'); 
        inputButton.innerHTML=file.name+" + отправка остановлена";
        return;
    }

window.BlobBuilder = window.MozBlobBuilder || window.WebKitBlobBuilder || window.BlobBuilder;

  const BYTES_PER_CHUNK = 3000; // размер блока посылаемого на сервер
  const SIZE = file.size;
  
  var
    request = new XMLHttpRequest();  
    request.timeout = 10000; // Максимальная продолжительность асинхронного запроса 10 секунд
    request.ontimeout = function() { alert( 'отсутствует ответ от сервера' ); } //действие по таймауту
  
  var end = start+BYTES_PER_CHUNK;
  
  var writtenByte=0;  //количество записанных байт - ответ сервера
  var maxRepeat = 10; //максимальное количество повторов  
  var url="";  

  var progressBar = document.querySelector('progress'); 
  progressBar.value = (start/SIZE)*100;
  progressBar.textContent = (start/SIZE)*100;
  progressBar.title = (start/SIZE)*100;
  inputButton.innerHTML  = file.name+" "+start+"/"+SIZE;
    
  
  if(start==SIZE){
    alert ('Загрузка выполнена успешно'); 
    setTimeoutGetDashData(1); 
    inputButton.innerHTML=file.name+" успешно отправлен";
    return;
  }

  setTimeoutGetDashData(0);//делаем реже запрос на получение информации для даш-панели

  //с первым блоком данных посылаем команду на создание файла
    if(start==0) url="/"+file.name.toLowerCase()+"&createfile&uploadfile";
        else url="/"+file.name.toLowerCase()+"&uploadfile";
        
    var chunk = file.slice(start, end);

    request.onreadystatechange = function() {
        if (this.readyState != 4) return;
        if ((this.status == 200)&&(isFinite(this.responseText))){
          if(this.responseText>0)
            uploadFile(file, start+parseInt(this.responseText), 0);
        }
          else{
            //alert('Запрос вернулся с ошибкой: '+this.status+'\n текст:'+this.statusText+'\n responseText:'+this.responseText); 
            if(nRepeat<maxRepeat) 
              uploadFile(file, start, nRepeat++);
            else {
              alert('Отправка файла прервана из-за большого количества неудачных попыток');
              setTimeoutGetDashData(1);
              inputButton.innerHTML=file.name+" + отправка остановлена по причине отсутствия сервера";
            }
          }
    };    
    request.open('POST', url + randomNoCache(), true);
    request.send(chunk);  // multipart/form-data
}

Код: Выделить всё

                <div class="box">
                    <div class="input_button_style">
                        <div class="input_font_style">Отправить файл на сервер</div>
                        <input type="file" name="select_file" onchange="getFiles(this.files[0])" id="inputFilename" size="1" class="input_input_style">
                    </div>
                    <p id="p_uploaddata"></p>
                    <p><progress min="0" max="100" value="0"><span>0</span>%</progress></p>
                    <p><button onclick="stopUpload=true">Отменить</button></p>
                </div>    
Ссылку на описание основ кода выше.
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Arduino Mega Server

Сообщение Alex » Чт дек 31, 2015 2:07 pm

2. Код же EthernetClient правили, и, скорее всего, в библиотеке(классе) оставили мусор в виде директивы #endif. В данном случае тогда всё логично.
Не всё так просто

1. Если я что-то правлю, то делаю это аккуратно
2. Я проверил библиотеку — там нет лишних директив
3. Библиотеки у всех одинаковые и это легко проверить
3. Ломал голову, что за хрень выводится, но потом взял в правило печатать только значения приведенные к типу String и больше с данной проблемой не сталкивался. Скорее всего параметр функции print(ln) - это ссылка на адрес в памяти, поэтому String(является ссылкой) работает корректно, а остальные типы как повезёт.
Очень странно. В проекте сотни переменных и все печатаются адекватно. Я с таким поведением сталкиваюсь в первый раз и у меня почти полная уверенность, что это не бред печатается, а бред содержится в самой переменной.

И очень бы хотелось узнать причину этого.

Ну и напишите, как вы приводите к типу String (я попробую проверить).
Ответить