Страница 1 из 1
Почти рабочий код для аналогового датчика давления
Добавлено: Вт окт 02, 2018 1:01 am
svetozar161
Здравствуйте друзья. Запустил(почти) датчик давления с алиэкспресса - показывает четко!
- 2018-10-02_00-53-36.png (202.7 КБ) 6233 просмотра
Вот рабочий код
Код: Выделить всё
//модуль давления воды
#ifdef PRESSURE_FEATURE
#define SENSOR A2//the YELLOW pin of the Sensor is connected with A2 of Arduino/Catduino
char buffer_kPa[10];
char buffer_bar[10];
void pressureInit() {
}
void pressureWorks(){
if(cycle20s){
int raw = analogRead(SENSOR);
float voltage = (float) raw * 5.0 / 1024.0; // voltage at the pin of the Arduino
float pressure_kPa = (voltage - 0.5) / 4.0 * 1100.0 * 10; // voltage to pressure
float pressure_bar = pressure_kPa * 0.001; // kPa to bar
timeStamp();
Serial.print(pressure_bar);
Serial.println(" bar");
#ifdef MAJORDOMO_FEATURE
//sendRequestM("Давление котла", pressure_bar);
sendReqSensorFloatM("Давление котла", pressure_bar);
#endif
}
}
#endif
В сериале
Код: Выделить всё
2018-10-02 00:33:10 2.21 bar
2018-10-02 00:33:10 Host 192.168.1.100 GET /objects/?object=Давление котла&op=m&m=update&v=? HTTP/1.0
Все работает, единственное почему-то на сервер уходит знак вопроса.
Если расскоментировать строку sendRequestM то вместо знака вопроса уходит целое число до запятой, а хотелось бы дробное.
В чем заковыка?
Re: Почти рабочий код для аналогового датчика давления
Добавлено: Вт окт 02, 2018 4:24 am
ser009
Нужно Float pressure_bar бар вынести из функции void pressureInit() если хочешь использовать её за пределами функции
И нужно посмотреть на функцию sendReqSensorFloatM()
PS: для дальнейшей универсальности рекомендую завести переменные (вместо цифр) с возможностью корректировки с WEBа
Так же при калибровке может пригодится корректировочный коэффициент
Re: Почти рабочий код для аналогового датчика давления
Добавлено: Вт окт 02, 2018 7:58 am
serghei
svetozar161 писал(а): ↑Вт окт 02, 2018 1:01 am
Если расскоментировать строку sendRequestM то вместо знака вопроса уходит целое число до запятой, а хотелось бы дробное.
В чем заковыка?
Спасибо за решение. Хочу себе такой же поставить , но на 10 килограмм цена пока кусается.
Проблема в способе передачи дробных чисел по HTTP. В дистрибутиве приходится выделять целые и дробные части и посылать отдельно. Есть решение как несколько чисел отдать одним запросом. За основу взял электромодуль и чуть упростил передачу. Одним выстрелом уходит 5 значений - температура и влажность с DHT и 3 значения с BME280. Подставить надо свои значения. В сетапе
Код: Выделить всё
//============
void sendBMEMajor(char obj[]) {
sprintf(buf, "GET /objects/?object=%s&op=m&m=update&%s=%.2f&%s=%.2f&%s=%.2f&%s=%.2f&%s=%.2f& HTTP/1.0",
obj, "Temp", temp, "Pres", pres, "Hum", hum, "TempDHT", dht11_t, "HumDHT", dht11_h);
#ifdef MAJORDOMO_FEATURE
sendBuffToMajor();
#endif
}
void getUIP(char obj[]) {
sendBMEMajor(obj);
}
//============
И в лупе
Сначала собираем буфер , перечисляем названия переменных и их значения. А главное - в строке Sprintf кракозябры отдают значения с точностью 2 знака после запятой . Их количество должно точно соответствовать количеству названий.
Полную версию для Due соберу и выложу в готовых решениях. Там же работают страницы авторегулирования , и уставки данных со страницы. Все это было предоставлено
ser009 и
alexsis_76, за что им еще рез огромное спасибо!
Re: Почти рабочий код для аналогового датчика давления
Добавлено: Вт окт 02, 2018 10:54 am
svetozar161
ser009 писал(а): ↑Вт окт 02, 2018 4:24 am
Нужно Float pressure_bar бар вынести из функции void pressureInit() если хочешь использовать её за пределами функции
Так в функции voidpressureInit() пусто. Вы наверное имели ввиду вынести Float из функции voidpressureWorks()?
А где объявлять float? В начальной части arduino_mega_server.ino?
Re: Почти рабочий код для аналогового датчика давления
Добавлено: Вт окт 02, 2018 12:30 pm
serghei
Посмотри как сделано во вкладке далласов. В начале
float current_temp[MAX_DS18B20_SENSORS];
В инит
Код: Выделить всё
if (current_temp[n] != -127) {
if (current_temp[n] != 85) {
timeStamp();
Serial.print(objSens[n]); Serial.print(F(": ")); Serial.println(current_temp[n]);
tempB_[n] = (current_temp[n] - (int)current_temp[n]) * 100;
if ((current_temp[n] > -1) && (current_temp[n] < 0)) {
#ifdef MAJORDOMO_FEATURE
sendRequestMinusM(objSens[n], "-", (int)current_temp[n], abs(tempB_[n]));
#endif
} else {
#ifdef MAJORDOMO_FEATURE
sendRequestMinusM(objSens[n], "", (int)current_temp[n], abs(tempB_[n]));
#endif
}
Там сначала выделяешь дробную часть числа а затем передаешь целую часть и дробную. Но я не вижу смысла , так как можно отдать одним махом. Проверю только поздно вечером.
Re: Почти рабочий код для аналогового датчика давления
Добавлено: Вт окт 02, 2018 3:52 pm
ser009
Re: Почти рабочий код для аналогового датчика давления
Добавлено: Ср окт 03, 2018 1:54 pm
serghei
svetozar161 писал(а): ↑Вт окт 02, 2018 1:01 am
Все работает, единственное почему-то на сервер уходит знак вопроса.
Если расскоментировать строку sendRequestM то вместо знака вопроса уходит целое число до запятой, а хотелось бы дробное.
В чем заковыка?
- 2018-10-03 13:46:02 Host 192.168.2.108 not connected (GET /objects/?object=Press&op=m&m=update&v=7.60 HTTP/1.0)
2018-10-03 13:46:22 Host 192.168.2.108 not connected (GET /objects/?object=ncMega02&op=m&m=update&v=1)
2018-10-03 13:46:22 (duration 1 min 0 sec)2018-10-03 13:46:22 7.65 bar
2018-10-03 13:46:24 Host 192.168.2.108 not connected (GET /objects/?object=Press&op=m&m=update&v=7.64 HTTP/1.0)
2018-10-03 13:46:26 2570 (31%)
2018-10-03 13:46:40 7.84 bar
2018-10-03 13:46:42 Host 192.168.2.108 not connected (GET /objects/?object=Press&op=m&m=update&v=7.83 HTTP/1.0)
2018-10-03 13:47:00 7.58 bar
Смотри как сделано в скетче далласов.
Код: Выделить всё
//модуль давления воды
#ifdef PRESSURE_FEATURE
#define SENSOR A2//the YELLOW pin of the Sensor is connected with A2 of Arduino/Catduino
char buffer_kPa[10];
char buffer_bar[10];
void pressureInit() {
}
void pressureWorks(){
if(cycle20s){
int raw = analogRead(SENSOR);
float voltage = (float) raw * 5.0 / 1024.0; // voltage at the pin of the Arduino
float pressure_kPa = (voltage - 0.5) / 4.0 * 1100.0 * 10; // voltage to pressure
float pressure_bar = pressure_kPa * 0.001; // kPa to bar
int press_bar = 0;
timeStamp();
Serial.print(pressure_bar);
Serial.println(" bar");
//sendRequestM("Давление котла", pressure_bar);
//sendReqSensorFloatM("Давление котла", pressure_bar);
press_bar = (pressure_bar - (int)pressure_bar) * 100;
if ((pressure_bar > -1) && (pressure_bar < 0)) {
#ifdef MAJORDOMO_FEATURE
sendRequestMinusM("Press", "-", (int)pressure_bar, abs(press_bar));
#endif
} else {
#ifdef MAJORDOMO_FEATURE
sendRequestMinusM("Press", "", (int)pressure_bar, abs(press_bar));
#endif
}
}
}
#endif
За пример реализации еще раз спасибо.
Re: Почти рабочий код для аналогового датчика давления
Добавлено: Ср окт 03, 2018 7:56 pm
svetozar161
Смотри как сделано в скетче далласов.
Вот спасибо Серега! Все работает!
Теперь осталось понять как привязать GET в мажордомо к объектам. Что-то я подзабыл, да и температура с float тоже не работает((
Re: Почти рабочий код для аналогового датчика давления
Добавлено: Ср окт 03, 2018 10:21 pm
serghei
В седьмой раз говорю - посмотри
Тему. Скачай три файла. Power то же пригодится. Установи через импорт класса на странице "Объекты". С давлением по образу и подобию температуры. А с ней-то какие проблемы? Там всё из коробки работает. Покажи вывод температуры в сериале.
Полностью восстановлю комп - проверю сам.