Добрый день. Хочу передавать данные от метео датчиков на сайт народного мониторинга. Датчики через специальную плату передают данные в виртуальный COM-порт Arduino Nano. Эти данные будут отправляться на сайт народного мониторинга через gprs модем от Амперки. В связи с этим вопрос как правильно реализовать передачу данных из SoftwareSerial в HardwareSerial? Я пробую так: Код (C++): mySerial.print(WindDirection()); int W = WindDirection(); Serial.print(W); В мониторе порта действительно появляются значения от датчика направления ветра, но вместе с ними появляются ещё какие-то символы: 135 135 459T 135 135 135 Где 135 это реальное направление ветра. А вот эти 459Т - лишняя какая-то гадость
А вы думаете, если на Народмон послать голую цифру "135" - он поймет? Это я к тому. что вы не с того конца заходите. Нужно не просто пересылать байты из одного Сериала в другой - а еще и правильно их обрабатывать. Заодно и мусор, который у вас сейчас лезет в порт - отсеете.
Да, я понимаю, что там есть специальная форма для отправки на сайт. Я просто начал делать задачу от простого к сложному. Вначале подключил датчики к аппаратному порту на 0 и 1 пины. Убедился, что всё работает. Затем переподключил их на 10 и 11 пин и решил передать из виртуального в аппаратный. Далее уже планировал работать с модемом ... Мне просто непонятно, что это за мусор такой? Откуда он? Помехи? Подскажите, что конкретно Вы имеете ввиду под правильной обработкой байтов?
У GPRS шилда от Амперки пины 0 и 1 это UART. Будет ли правильно туда же подключить датчики? Не будет никакой путаницы с приёмом информации от датчиков и в то же время с отправкой её через GPRS?
Пока что код только для снятия показаний с датчиков. Передачу из виртуального сериала в аппаратный пробовал осуществить только на датчике направления ветра. Да ещё в скетче есть датчик температуры и влажности DHT21 подключённый к 5 пину. Код (C++): #include <TroykaDHT.h> #include <SoftwareSerial.h> DHT dht(5, DHT21); SoftwareSerial mySerial(10, 11); // RX, TX char databuffer[35]; double temp; void setup() { Serial.begin(9600); mySerial.begin(9600); dht.begin(); } void loop() { dht.read(); switch(dht.getState()) { case DHT_OK: mySerial.print("Temperature = "); mySerial.print(dht.getTemperatureC()); mySerial.println(" C \t"); mySerial.print("Humidity = "); mySerial.print(dht.getHumidity()); mySerial.println(" %"); break; // ошибка контрольной суммы case DHT_ERROR_CHECKSUM: mySerial.println("Checksum error"); break; // превышение времени ожидания case DHT_ERROR_TIMEOUT: mySerial.println("Time out error"); break; // данных нет, датчик не реагирует или отсутствует case DHT_ERROR_NO_REPLY: mySerial.println("Sensor not connected"); break; } getBuffer(); mySerial.print("Wind Direction: "); mySerial.print(WindDirection()); mySerial.println(" "); mySerial.print(WindDirection()); int W = WindDirection(); Serial.print(W); mySerial.print("Average Wind Speed (One Minute): "); mySerial.print(WindSpeedAverage()); mySerial.println("m/s "); mySerial.print("Max Wind Speed (Five Minutes): "); mySerial.print(WindSpeedMax()); mySerial.println("m/s"); mySerial.print("Rain Fall (One Hour): "); mySerial.print(RainfallOneHour()); mySerial.println("mm "); mySerial.print("Rain Fall (24 Hour): "); mySerial.print(RainfallOneDay()); mySerial.println("mm"); mySerial.print("Temperature: "); mySerial.print(Temperature()); mySerial.println("C "); mySerial.print("Humidity: "); mySerial.print(Humidity()); mySerial.println("% "); mySerial.print("Barometric Pressure: "); mySerial.print(BarPressure()); mySerial.println("hPa"); mySerial.println(""); mySerial.println(""); delay(2000); } void getBuffer() { int index; for (index = 0;index < 35;index ++) { if(mySerial.available()) { databuffer[index] = mySerial.read(); if (databuffer[0] != 'c') { index = -1; } } else { index --; } } } int transCharToInt(char *_buffer,int _start,int _stop) { int _index; int result = 0; int num = _stop - _start + 1; int _temp[num]; for (_index = _start;_index <= _stop;_index ++) { _temp[_index - _start] = _buffer[_index] - '0'; result = 10*result + _temp[_index - _start]; } return result; } int WindDirection() //Wind Direction { return transCharToInt(databuffer,1,3); } float WindSpeedAverage() //air Speed (1 minute) { temp = 0.44704 * transCharToInt(databuffer,5,7); return temp; } float WindSpeedMax() //Max air speed (5 minutes) { temp = 0.44704 * transCharToInt(databuffer,9,11); return temp; } float Temperature() //Temperature ("C") { temp = (transCharToInt(databuffer,13,15) - 32.00) * 5.00 / 9.00; return temp; } float RainfallOneHour() //Rainfall (1 hour) { temp = transCharToInt(databuffer,17,19) * 25.40 * 0.01; return temp; } float RainfallOneDay() //Rainfall (24 hours) { temp = transCharToInt(databuffer,21,23) * 25.40 * 0.01; return temp; } int Humidity() //Humidity { return transCharToInt(databuffer,25,26); } float BarPressure() //Barometric Pressure { temp = transCharToInt(databuffer,28,32); return temp / 10.00; }