Arduino Mega Server

Модератор: Alex

SPbDima
Сообщения: 113
Зарегистрирован: Пн окт 19, 2015 8:27 am

Re: Arduino Mega Server

Сообщение SPbDima »

Там не наворочено. Смотри sensors.js и sensors.htm
SPOILERSPOILER_SHOW

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

//функция подготовки файла для отправки. Разбивающая и контролирующая корректность доставки
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

Re: Arduino Mega Server

Сообщение Alex »

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

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

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

Ну и напишите, как вы приводите к типу String (я попробую проверить).
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm

Re: Arduino Mega Server

Сообщение Alex »

Адаптирую Due для работы с Power Monitor и столкнулся с непонятной проблемой: на аналоговых входах присутствуют какие-то непонятные потенциалы, которые мешают вести измерения. Причём на разных входах — разные.

Вопрос: кто-нибудь может сказать, что это за потенциалы и откуда они взялись (и как их убрать)?
Вложения
analog
analog
analog.jpg (112.03 КБ) 10595 просмотров
pastry777
Сообщения: 81
Зарегистрирован: Пт окт 02, 2015 7:47 pm

Re: Arduino Mega Server

Сообщение pastry777 »

ну,однозначно убрать только подтяжкой к земле в setup....
digitalWrite(54, LOW); это подтянули А0,55-А1,56-А2 и тд..
или внешний резистор 10кОм к земле...
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm

Re: Arduino Mega Server

Сообщение Alex »

Попробовал digitalWrite(54, LOW); - не работает.

И вообще, непонятно в принципе, что это за напряжение. Я ни в одном месте в Интернет не нашёл упоминания ни о напряжении, ни о проблеме смещения измеряемой величины, ни о необходимости резистора.

Что это вообще такое?
pastry777
Сообщения: 81
Зарегистрирован: Пт окт 02, 2015 7:47 pm

Re: Arduino Mega Server

Сообщение pastry777 »

внешний резистор 100% решит проблему...странно почему не работает... digitalWrite(54, HIGH); работает 100% но соответственно с аналогового порта А0 я снимаю значение 1023,плата с этим скетчем где я использую эти строки у меня подключена перед глазами...я написал вам LOW предполагая,что соответственно получим обратный результат.сейчас допишу это сообщение и перепрошью свою мегу с параметром LOW...

если вывод мк висит в "воздухе",не подключен никуда в схеме,то у него не стабильное состояние..это от наводок,ну может еще от каких внутренних процессов,не углублялся сильно...поэтому там где нужно снимать конкретные показания с порта(аналоговые)нужно подтянуть порт к земле,чтоб на нем был жесткий/стабильный 0...с цифровыми портами тоже такая штука..легко проверить:
на пятом пине будем зажигать светодиод,исходя из состояния четвертого пина,если будет на четвертом 1,значит и на пятый даем 1..
void setup(){
pinMode(4, INPUT);
pinMode(5, OUTPUT);}
void loop(){
if(digitalRead(4)) digitalWrite(5, HIGH);
else digitalWrite(5, LOW);
delay(200); //чтобы зрительно увидеть мерцание
}
так вот мы получим по факту мерцание светодиода,ибо иногда на 4 пине будет 1 иногда 0...
лечится это строчкой digitalWrite(4, LOW); в setup..
таким образом мы подключаем встроенный в кристалл резистор(кажется они там 20кОм) на этот пин к земле,теперь там будет стабильный 0,и светодиод на 5 пине не загорится по условию,пока мы не дадим +5в на 4 пин,кнопкой или чем еще не суть...

обьяснил как мог,возможно вы для себя найдете более понятное описание ситуации,поискав по запросу "подтягивающий резистор"...=)
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm

Re: Arduino Mega Server

Сообщение Alex »

поэтому там где нужно снимать конкретные показания с порта(аналоговые)нужно подтянуть порт к земле,чтоб на нем был жесткий/стабильный 0
Вопрос: почему об это нет ни одного слова в Интернет?
таким образом мы подключаем встроенный в кристалл резистор(кажется они там 20кОм) на этот пин к земле,теперь там будет стабильный 0
Проверял: не реагирует.

Напряжение не просто «паразитное», которое можно притянуть к земле. Оно «АКТИВНОЕ», то есть активно сопротивляется притягиванию.

КРОМЕ ТОГО: на А0 потенциал 3.6 В (при питании 3.3 В на Дуе !!!)

Резистор 10К не спасает — какой-то результат можно получить только снизив сопротивление до 6К. Кроме того «активный» потенциал гуляет и смещает среднюю точку, несмотря на резистор.
pastry777
Сообщения: 81
Зарегистрирован: Пт окт 02, 2015 7:47 pm

Re: Arduino Mega Server

Сообщение pastry777 »

да действительно сразу с LOW не заработало...
опытным путем установил что нужно заведомо в сетап прописать на аналоговые порты
pinMode(54, OUTPUT);
digitalWrite(54, LOW);

не могу это обьяснить,но это работает)))

идет стабильный 0,если подаю 3.3в то 674,если 5в то 1016(до 1023 не дотягивает,но это ничего)..
pastry777
Сообщения: 81
Зарегистрирован: Пт окт 02, 2015 7:47 pm

Re: Arduino Mega Server

Сообщение pastry777 »

уточню,что я на меге сейчас!!
сейчас проверю и дуе...
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm

Re: Arduino Mega Server

Сообщение Alex »

pinMode(56, OUTPUT);
digitalWrite(56, LOW);

Результат: НЕ РАБОТАЕТ!

И посмотрите мой пост выше
Вложения
analog3.jpg
analog3.jpg (58.52 КБ) 10528 просмотров
Ответить