это к Алексу, данную функцию я не трогал, но ошибка знакомая(не помню как избавился).victorhom писал(а):файл arduino_mega_serverSPbDima писал(а):Выкладываю Релиз.
строка 178
Ошибка компилятора:
'strncpy_P' was not declared in this scope
Плата Arduino Due.
Arduino Mega Server
Модератор: Alex
-
- Сообщения: 113
- Зарегистрирован: Пн окт 19, 2015 8:27 am
- Благодарил (а): 9 раз
- Поблагодарили: 21 раз
Re: Arduino Mega Server
-
- Сообщения: 113
- Зарегистрирован: Пн окт 19, 2015 8:27 am
- Благодарил (а): 9 раз
- Поблагодарили: 21 раз
Re: Arduino Mega Server
Простого варианта не будет. Возьми часть кода с варианта для due. Попробуй заменить у дистрибутива для due файлы: rtemp.ino, server_cfg.ino, server_ajax.ino
-
- Сообщения: 81
- Зарегистрирован: Пт окт 02, 2015 7:47 pm
- Благодарил (а): 7 раз
- Поблагодарили: 4 раза
Re: Arduino Mega Server
загрузка файлов теперь работает превосходно!!очень клево!
пытался вытянуть(портировать)в свой проект,пока не получилось...хотя вроде и все связи нашел,но все равно,очень все сложно пока=)я вообще впервые именно здесь увидел реализацию этой функции,хотя ранее неоднократно искал по интернету ее и даже сейчас не могу найти еще примеров,только здесь=( ams уникальнее и уникальнее не по дням а по часам=))
пытался вытянуть(портировать)в свой проект,пока не получилось...хотя вроде и все связи нашел,но все равно,очень все сложно пока=)я вообще впервые именно здесь увидел реализацию этой функции,хотя ранее неоднократно искал по интернету ее и даже сейчас не могу найти еще примеров,только здесь=( ams уникальнее и уникальнее не по дням а по часам=))
-
- Сообщения: 113
- Зарегистрирован: Пн окт 19, 2015 8:27 am
- Благодарил (а): 9 раз
- Поблагодарили: 21 раз
Re: Arduino Mega Server
Если есть вопросы по загрузке - спрашивайте! Расскажу подробнее. Про upload читай html5: http://www.html5rocks.com/ru/tutorials/ ... c-examples
-
- Сообщения: 113
- Зарегистрирован: Пн окт 19, 2015 8:27 am
- Благодарил (а): 9 раз
- Поблагодарили: 21 раз
Re: Arduino Mega Server
1. В таких случаях говорят: это не баг - это фича.Alex писал(а):Статья на Гиктаймс
«Новогодние приколы от проекта Arduino Mega Server»
http://geektimes.ru/post/268522/
2. Код же EthernetClient правили, и, скорее всего, в библиотеке(классе) оставили мусор в виде директивы #endif. В данном случае тогда всё логично.
Код: Выделить всё
#ifdef MAJORDOMO_FEATURE
// <-------------------------------------- ВОТ ЗДЕСЬ ЕЩЁ ОТКЛЮЧАЕТСЯ КОМПИЛЯЦИЯ
EthernetClient mclient;
// <-------------------------------------- А ВОТ ЗДЕСЬ УЖЕ НЕТ! ВСЁ, ЧТО НИЖЕ КОМПИЛИРУЕТСЯ, НЕСМОТРЯ НА ЗАПРЕТ!
Спасибо за AMS!
Всех с наступающим Новым годом!
-
- Сообщения: 81
- Зарегистрирован: Пт окт 02, 2015 7:47 pm
- Благодарил (а): 7 раз
- Поблагодарили: 4 раза
Re: Arduino Mega Server
[*]
ну раз так,то воспользуюсь моментом=)у вас случаем нет заготовки аплоада на карту,ну к примеру если бы это был веб-сервер тупо с одной страничкой,а не такой навороченный как амс?мне бы там было проще разобраться с алгоритмом,а то тут так все корнями сплетено друг за друга))спасибо...SPbDima писал(а):Если есть вопросы по загрузке - спрашивайте! Расскажу подробнее. Про upload читай html5: http://www.html5rocks.com/ru/tutorials/ ... c-examples
-
- Сообщения: 113
- Зарегистрирован: Пн окт 19, 2015 8:27 am
- Благодарил (а): 9 раз
- Поблагодарили: 21 раз
Re: Arduino Mega Server
Там не наворочено. Смотри 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>
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Arduino Mega Server
Не всё так просто2. Код же EthernetClient правили, и, скорее всего, в библиотеке(классе) оставили мусор в виде директивы #endif. В данном случае тогда всё логично.
1. Если я что-то правлю, то делаю это аккуратно
2. Я проверил библиотеку — там нет лишних директив
3. Библиотеки у всех одинаковые и это легко проверить
Очень странно. В проекте сотни переменных и все печатаются адекватно. Я с таким поведением сталкиваюсь в первый раз и у меня почти полная уверенность, что это не бред печатается, а бред содержится в самой переменной.3. Ломал голову, что за хрень выводится, но потом взял в правило печатать только значения приведенные к типу String и больше с данной проблемой не сталкивался. Скорее всего параметр функции print(ln) - это ссылка на адрес в памяти, поэтому String(является ссылкой) работает корректно, а остальные типы как повезёт.
И очень бы хотелось узнать причину этого.
Ну и напишите, как вы приводите к типу String (я попробую проверить).