передача показаний на народный мониторнг
- Войдите на сайт для отправки комментариев
Ср, 30/03/2016 - 09:11
помогите передать показания на народный мониторинг, не пойму как передать! у меня два устройства "Resiver" подключен к хабу и должен принимать показания по 433мГц от устройства расположенного на улице "Transiver"
Resiver:
#include <VirtualWire.h> #include <EasyTransferVirtualWire.h> //create object EasyTransferVirtualWire ET; struct SEND_DATA_STRUCTURE{ //put your variable definitions here for the data you want to send //THIS MUST BE EXACTLY THE SAME ON THE OTHER ARDUINO //Struct can'e be bigger then 26 bytes for VirtualWire version byte ID; int temperature; int humidity; int voltage; }; // вычисление напряжения float vout = 0; float vin = 0; float R1 = 10000.0; // сопротивление R1 (10K) float R2 = 680.0; // сопротивление R2 (680) int value = 0; //give a name to the group of data SEND_DATA_STRUCTURE mydata; void setup(){ //start the library, pass in the data details ET.begin(details(mydata)); Serial.begin(9600); // Initialise the IO and ISR vw_set_ptt_inverted(true); // Required for DR3100 vw_setup(2000); // Bits per sec vw_set_tx_pin(11); vw_rx_start(); // Start the receiver PLL running pinMode(13, OUTPUT); } void loop(){ //check and see if a data packet has come in. if(ET.receiveData()){ //this is how you access the variables. [name of the group].[variable name] //since we have data, we will blink it out. value = mydata.voltage; vout = (value * 5.0) / 1024; vin = vout / (R2/(R1+R2)); if (mydata.ID == 1) { Serial.print("ID:"); Serial.println(mydata.ID); Serial.print("Temperature: "); Serial.println(mydata.temperature); Serial.print("Humidity: "); Serial.println(mydata.humidity); Serial.print("Voltage: "); Serial.println(vin); Serial.println("-----------------"); } } }
Transiver:
#include <VirtualWire.h> #include <EasyTransferVirtualWire.h> #include <DHT11.h> #define DHT11PIN 5 // для замера напряжения int analogInput = 1; float vout = 0; float vin = 0; float R1 = 10000.0; // сопротивление R1 (10K) float R2 = 680.0; // сопротивление R2 (680) int value = 0; dht11 sensor; EasyTransferVirtualWire ET; struct SEND_DATA_STRUCTURE{ //put your variable definitions here for the data you want to send //THIS MUST BE EXACTLY THE SAME ON THE OTHER ARDUINO //Struct can'e be bigger then 26 bytes for VirtualWire version byte ID; int temperature; int humidity; int voltage; }; //give a name to the group of data SEND_DATA_STRUCTURE mydata; void setup(){ Serial.begin(9600); pinMode(analogInput, INPUT); //start the library, pass in the data details ET.begin(details(mydata)); mydata.ID = 1; // Initialise the IO and ISR vw_set_ptt_inverted(true); // Required for DR3100 vw_set_tx_pin(3); vw_setup(2000); // Bits per sec pinMode(13, OUTPUT); randomSeed(analogRead(0)); } void loop(){ // считывание аналогового значения value = analogRead(analogInput); vout = (value * 5.0) ; vin = vout / (R2/(R1+R2)); if (vin<0.09) { vin=0.0; // обнуляем нежелательное значение } sensor.read(DHT11PIN); // читаем покзания DHT11 //this is how you access the variables. [name of the group].[variable name] mydata.temperature = sensor.temperature; mydata.humidity = sensor.humidity; mydata.voltage = value; Serial.print("Temp: "); Serial.println(sensor.temperature); Serial.print("Hum: "); Serial.println(sensor.humidity); Serial.print("Voltage: "); Serial.println(vin); //send the data digitalWrite(13, HIGH); ET.sendData(); digitalWrite(13, LOW); delay(random(5000, 10000)); }
как передать показания полученные в Resiver'е на народный мониторинг???
получилось передать показания на сайт Narodmon
но вольтаж почему то передается целым числом например 5 а не 4.85
и немного надо переработать отправку данных а то при старте отправляет все показания 0
но вольтаж почему то передается целым числом например 5 а не 4.85
и немного надо переработать отправку данных а то при старте отправляет все показания 0
1. Batt описана как целочисленная (int), вряд ли в ней когда-либо будет 4.85
2. Строку 83 замените на
if
(millis() > timer + REQUEST_RATE && Batt > 0)
в сериале :
и кстати с помощю библиотеки VirtualWire не получается передать сотые то есть если уличный датчик считает волтаж 4,85 и отправляет на сервер то на сервере приходит 5
поможет ли мне использование NRF24L01 ?
struct
SEND_DATA_STRUCTURE{
009
//put your variable definitions here for the data you want to send
010
//THIS MUST BE EXACTLY THE SAME ON THE OTHER ARDUINO
011
//Struct can'e be bigger then 26 bytes for VirtualWire version
012
byte
ID;
013
int
temperature;
014
int
humidity;
015
long
voltage;
Тип данных long используется для хранения целых чисел.
Повторяю:
Тип данных long используется для хранения целых чисел.
Araris, вы не против, надеюсь ;) Повторение, как известно...
Когда переменная типа int в следствие арифметической операции достигает своего максимального значения, она "перескакивает" на самое минимальное значение и наоборот:
расечатать?
int
x
x = -32,768;
x = x - 1;
// x теперь равно 32,767 - перескакивает на минимальное значение
x = 32,767;
x = x + 1;
// x теперь равно -32,768
http://arduino.ru/Reference/Int
сдесь написано что с тысячной?? ошибка?
Запятая здесь отделяет тысячи, а не целую часть от дробной (в данной записи для этого использовалась бы точка).
код
сдесь написано что с тысячной?? ошибка?
Здесь бред написан. x будет равен -32 и 32 и всё.
помогите сделать подсчет, пересмотрел отправку по 433mhz отказался от EasyTransferVirtualWire
Сервер:
клиент:
так вот немогу сделать хранение полученных данных в переменной
Надо что бы на сервере полученные данные Temp * 0.1
сохранить в переменную а потом перед отправкой на сайт народного мониторинга взять данные с переменной то есть xx.x
аналогично для Press / 133.3
для Alt /100.0, 2
для Batt /4/ 256. * 1.2 * 10 * 1.1
почему то у меня никак не получается
При компиляции ругается на 138 строку