Страница 190 из 326

Re: Arduino Mega Server

Добавлено: Вс фев 05, 2017 3:03 pm
Android2i2
Доброго времени суток.
(Ох чувствую закидают меня камнями...)
Небольшая предыстория
Решили мы всей группой делать курсовые и дипломные проекты на arduino. До этого дел никаких не имели мы с программированием во всех смыслах этого термина.
Но что уж тут поделать? <<Если решили, то будем делать.">> - подумал я и закупил себе мегу, шилд 5100 и пару датчиков. Но вот пришла пора решать что именно мы будем делать. И пока мой комплект ехал ко мне из столицы, все простые проекты разобрали. <<Но да ладно, оно так даже интереснее!>> - решил я и стал думать, что можно собрать из горочки всех, доселе невиданных, мне вещей. Начал писать обычную web-страницу, ну... Не писать конечно же, а собирать по крупицам из интернета, попутно уча C/C++. Но в один прекрасный момент преподаватель сказал: <<Посмотри Arduino Mega Server. Там ты что-то интереснее обычной страницы с показаниями датчиков сделаешь.>> Ну я и посмотрел... На энтузиазме скачал. Попытался запустить. Но ams упирался до последнего. :D (Видимо даже он понял, что мне лучше сюда не лезть) Спустя неделю я всё же победил IDE и запустил сервер. И тут-то началось самое интересное :D
<<Куда мне писать код для своих датчиков? Как это всё вывести на сервер? Как вообще поменять внешний вид сайта?>> Ох и завлекла же меня вся эта тема...
Нужно сказать спасибо автору. Потому что я уже хоть что-то понимаю в C/C++, HTML,CSS. СПАСИБО АВТОР^^
Но не всё так "лампово"...
Проблемы.
Решил вывести показания температуры на Dash-панель.
На руках имеется AM2320-trema. Вот даже картиночка данного датчика^^ Изображение
Рассмотрев модуль rtemp примерно понял что и как писать. Ну и набросал модуль по образу и подобию готового.
SPOILERSPOILER_SHOW
#ifdef DTEMP_FEATURE
#include <Wire.h>//I2C
#include <iarduino_AM2320.h> //датчик температуры и влажности

iarduino_AM2320 sensor;
byte const MAX_TEMP_SENSORS = 1;
char objSens[MAX_TEMP_SENSORS][12] = {"tempSTR",};
float current_temp[MAX_TEMP_SENSORS];
float temp_[MAX_TEMP_SENSORS];

void dtempInit(){
sensor.begin();
Serial.print("Module AM2320 \n" );
}

void dtempWorks() {
sensor.read();
temp_[0]=sensor.tem;
temp_[1]=sensor.hum;
Serial.println(temp_[0]);
getTemperature(0);
}

void getDTemperature(byte n) {
current_temp[n] = temp_[n];
if (!isnan(current_temp[n])) {
Serial.print(objSens[n]);
Serial.print(": ");
Serial.println(current_temp[n]);
}

}

#endif
На главной вкладке AMS опять же прописал (я не знаю как это правильно называть... Наверное, объявил, да?)
SPOILERSPOILER_SHOW
//#define TEMP_FEATURE
#define DTEMP_FEATURE
.
.
.
#ifdef TEMP_FEATURE
tempInit();
#endif
#ifdef DTEMP_FEATURE
dtempInit();
#endif
.
.
.
#ifdef TEMP_FEATURE
if (cycle5m) {
tempWorks();
}
#endif
#ifdef DTEMP_FEATURE
if (cycle5m) {
dtempWorks();
}
#endif
Т.е. я по сути просто заменил rtemp своим dtemp и на dash-панели, как я думал, должна была появится температура с моего датчика. Но IDE опять хорошенечко так меня пнула.
Помогите пожалуйста понять нулю в программирование, что это за ошибка.
SPOILERSPOILER_SHOW
Arduino: 1.6.5 (Windows 8.1), Плата"Arduino Mega or Mega 2560, ATmega2560 (Mega 2560)"

arduino_mega_server.cpp.o: In function `dtempWorks()':
E:\Arduino/rtemp.ino:26: undefined reference to `getTemperature(unsigned char)'
collect2.exe: error: ld returned 1 exit status

Ошибка компиляции.
IDE 1.6.5 скачана на сайте AMS.
Надеюсь тапками бить не будете.
><
U.P.D.
Проблема решена.
Исправил
void getDTemperature(byte n)
на
void getTemperature(byte n)

Re: Arduino Mega Server

Добавлено: Вс фев 05, 2017 4:00 pm
alexsis_76
попробуйте поместите функцию getDTemperature перед вызовом dtempWorks

Re: Arduino Mega Server

Добавлено: Вс фев 05, 2017 6:23 pm
Android2i2
И снова я со своим AM2320...
Переделал модуль заново. Потому что с тем запутался, да так что распутаться с моими знаниями невозможно.
Писал уже не по примеру имеющегося, а как подсказывало воображение.
SPOILERSPOILER_SHOW
#ifdef DTEMP_FEATURE
#include <iarduino_AM2320.h> //датчик температуры и влажности
iarduino_AM2320 sensor;
int A; //переменная для хранения показаний с датчика
void dtempInit() {
sensor.begin(); //пнул датчик, чтобы работал
}

void dtempWork() {
sensor.read();//читаем показания с датчика
A=sensor.tem;//записываем показания температуры в переменную А
}
#endif
В server_ajax добавил пару строк.
SPOILERSPOILER_SHOW
#ifdef DTEMP_FEATURE
s += makeTag("tempHOM", "", String(A));
#endif
*модуль rtemp отключен.
В dash.js добавил
SPOILERSPOILER_SHOW
try {
var tempHOM = this.responseXML.getElementsByTagName('tempHOM')[0].childNodes[0].nodeValue;
} catch (err) {
tempHOM = "-";
}

try {
var dtempHOM_ = Math.round(tempHOM, 1);
document.getElementById("temp-home").innerHTML = tempHOM_ + "°";
document.getElementById("temp-home-hide").innerHTML = tempHOM_ + "°";
} catch (err) { }
В _dash.html так же прописал
SPOILERSPOILER_SHOW
<p>Дома: <span class="value" id="temp-home-hide">...</span> C</p>
<p>Дома: <span class="value" id="temp-home">...</span> C</p>
Т.е. с файлами .js и .html строго следовал инструкции.
И естественно у меня ничего не вышло.
Точнее скетч компилируется, сервер запускается. Но температура на dash-панели показываться не хочет. Вместо неё просто три точки.
Помогите пожалуйста. Хотя бы ссылочку на полезную для данной темы статью пожертвуйте. Сам я, увы, никакой полезной информации найти не могу.
Только не бейте, пожалуйста. :cry:

Re: Arduino Mega Server

Добавлено: Вс фев 05, 2017 6:27 pm
serghei
Получилось вытащить показания в даш-панель? Тогда велком в тему " Визуализация" ! Когда на защите диплома покажите в телефоне спидометр с Вашей температурой, первое место будет обеспечено!))))

Re: Arduino Mega Server

Добавлено: Вс фев 05, 2017 6:29 pm
Android2i2
serghei писал(а):Получилось вытащить показания в даш-панель? Тогда велком в тему " Визуализация" ! Когда на защите диплома покажите в телефоне спидометр с Вашей температурой, первое место будет обеспечено!))))
Получилось вытащить только слово "Дома" :D
Но я уже побежал в визуализацию. Вы меня очень заинтриговали.

Re: Arduino Mega Server

Добавлено: Вс фев 05, 2017 6:50 pm
serghei
В 016 версии немного по другому организованы скрипты, но попробую . Три точки говорят о том , что serverAjax не видит переменную вообще или она не задана.Если даже где то накосячить , то ажакс отработает
SPOILERSPOILER_SHOW

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

     // Temperature
         
          try {
            var tempSTR = this.responseXML.getElementsByTagName('tempSTR')[0].childNodes[0].nodeValue;
          } catch (err) {
              tempSTR = "99";// тут ставьте осмысленное , но не реальное число.Легче увидеть ошибку
            }  
И скорее всего
SPOILERSPOILER_SHOW

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

try {
var dtempHOM_ = Math.round(tempHOM, 1); // попробуйте var tempHOM_.............................
document.getElementById("temp-home").innerHTML = tempHOM_ + "°";
document.getElementById("temp-home-hide").innerHTML = tempHOM_ + "°";
} catch (err) { }
И какие ошибки выдает браузер в режиме просмотра кода элемента ? А еще лучше выложи сюда его скрин.

Re: Arduino Mega Server

Добавлено: Пн фев 06, 2017 3:56 pm
Android2i2
serghei писал(а):В 016 версии немного по другому организованы скрипты, но попробую . Три точки говорят о том , что serverAjax не видит переменную вообще или она не задана.Если даже где то накосячить , то ажакс отработает
SPOILERSPOILER_SHOW

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

     // Temperature
         
          try {
            var tempSTR = this.responseXML.getElementsByTagName('tempSTR')[0].childNodes[0].nodeValue;
          } catch (err) {
              tempSTR = "99";// тут ставьте осмысленное , но не реальное число.Легче увидеть ошибку
            }  
И скорее всего
SPOILERSPOILER_SHOW

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

try {
var dtempHOM_ = Math.round(tempHOM, 1); // попробуйте var tempHOM_.............................
document.getElementById("temp-home").innerHTML = tempHOM_ + "°";
document.getElementById("temp-home-hide").innerHTML = tempHOM_ + "°";
} catch (err) { } 
И какие ошибки выдает браузер в режиме просмотра кода элемента ? А еще лучше выложи сюда его скрин.
Разобрался! Наверное.
Температуру вывел, как оказалось, а может всё не так и я просто что-то нужное случайно сделал, помимо _dash код нужно было поменять так же и в _DASH_HK.
Спасибо за то что отозвались.

Re: Arduino Mega Server

Добавлено: Пн фев 06, 2017 4:04 pm
serghei
Так расскажи что сделал и что поменял. Другим то же интересно.

Re: Arduino Mega Server

Добавлено: Пн фев 06, 2017 5:35 pm
Android2i2
serghei писал(а):Так расскажи что сделал и что поменял. Другим то же интересно.
Скетч практически не трогал, только подключил библиотеку i2c.
SPOILERSPOILER_SHOW
#ifdef DTEMP_FEATURE
#include <iarduino_AM2320.h> //датчик температуры и влажности
#include <Wire.h>
iarduino_AM2320 sensor;
int A; //переменная для хранения показаний с датчика
void dtempInit() {
sensor.begin(); //пнул датчи, чтобы работал
}
void dtempWorks() {
sensor.read();//читаем показания с датчика
A=sensor.tem;//записываем показания температуры в переменную А
}
#endif

В ajax опять же ничего не менял.
SPOILERSPOILER_SHOW
#ifdef DTEMP_FEATURE
s += makeTag("dtempHOME", "", String(A));
#endif
А вот с dash.js решил не заморачиваться и просто прописал свой тег вместо имеющегося.
SPOILERSPOILER_SHOW
// Temperature
try {
var tempSTR = this.responseXML.getElementsByTagName('dtempHOME')[0].childNodes[0].nodeValue;
} catch (err) {
tempSTR = "-";
}

// Voltage & power
try {
var dvolt = this.responseXML.getElementsByTagName('voltage')[0].childNodes[0].nodeValue;
} catch (err) {
dvolt = "0";
}
try {
var dvoltage = Math.round(parseInt(dvolt), 0);
/* document.getElementById("dash-voltage").innerHTML = dvoltage;
document.getElementById("dash-voltage-hide").innerHTML = dvoltage; */
var tempSTR_ = Math.round(tempSTR, 1);
document.getElementById("dash-voltage").innerHTML = tempSTR_ + "°";
document.getElementById("dash-voltage-hide").innerHTML = tempSTR_ + "°";
} catch (err) { }
dash.html и dash_hk.html заменил "На улице" на "Дома"
SPOILERSPOILER_SHOW
<p>Дома: <span class="value" id="dash-voltage-hide">...</span> C</p>
И показания свои получил.

Re: Arduino Mega Server

Добавлено: Пн фев 06, 2017 5:49 pm
serghei
Отлично ! Теперь воткни на SD карту файл Full18.htm отсюда viewtopic.php?f=19&t=3168&start=30#p40876. И замени
SPOILERSPOILER_SHOW

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

function getFull18Data() {
  var request = new XMLHttpRequest();
  request.onreadystatechange = function() {
    if (this.readyState == 4) {
      if (this.status == 200) {
        if (this.responseXML != null) {
          // net activ
          insertTick(30, bufferCpuLoad2);
       
         try {
                data_val7 = this.responseXML.getElementsByTagName('tmpTemp')[0].childNodes[0].nodeValue;// tmpTemp замени на свой 'dtempHOME'
            } catch (err) {
                data_val7 = "99";
            }
            
            
        
        }
      }
    }
  } // request.onreadystatechange = function()    
И на выходе получишь такую же картинку. С лишним кодом думаю разберешься сам. Удачи!

PS На месте второго спидометра прицепи влажность ))))