ошибка при компиляции скетча для модуля 433 мГц под мегу 2560
- Войдите на сайт для отправки комментариев
Вс, 28/01/2018 - 01:20
Не пинайте сильно уважаемый ALL но есть проблема при компиляции скетча для передачи температуры по каналу 433мГц на ардуине мега 2560 возникает ошибка:
C:\Users\Gi\Documents\Arduino\libraries\OneWire\OneWire.cpp: In static member function 'static uint16_t OneWire::crc16(const uint8_t*, uint16_t, uint16_t)':
C:\Users\Gi\Documents\Arduino\libraries\OneWire\OneWire.cpp:571:42: error: '_crc16_update' was not declared in this scope
crc = _crc16_update(crc, input);
^
exit status 1
Ошибка компиляции для платы Arduino/Genuino Mega or Mega 2560.
Вот код для передатчика
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal_I2C.h>
#include <EEPROM.h>
#include <VirtualWire.h>
#include <EasyTransferVirtualWire.h>
#define ledPin 22
OneWire oneWire(3); // вход датчиков 18b20
DallasTemperature ds(&oneWire);
LiquidCrystal_I2C lcd (0x3F, 40, 2); // инициализируем 2х строчный дисплей1
LiquidCrystal_I2C lcd1 (0x3E, 20, 1); // инициализируем 2х строчный дисплей2
DeviceAddress sensor1 = {0x28, 0xFF, 0x10, 0x2F, 0x01, 0x17, 0x05, 0xC8 };
DeviceAddress sensor2 = {0x28, 0xFF, 0x70, 0x66, 0x01, 0x17, 0x04, 0xF4 };
DeviceAddress sensor3 = {0x28, 0xFF, 0xAE, 0x31, 0x01, 0x17, 0x05, 0x08 };
int state = LOW;
int floorPin = 28; // порт управления полом
int setAeroTemp;
int AeroTempGisteresis; // гистерезис температуры воздуха
int setFloorTemp = 40; // Температура пола при которой отключается нагрев
int comfortFloorTemp = 35; // комфортная температура поверхности пола
int FloorTempGisteresis = 1; // Гистерезис температуры пола
float FloorTemp; // Температура теплого пола
float Temp; // Температура воздуха на балконе
float OutDoorTemp; // Температура наружного воздуха
boolean ledEnabled = false;
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;
float temperature;
float temperatureA;
};
//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));
mydata.ID = 1;
// Initialise the IO and ISR
vw_set_ptt_inverted(true); // Required for DR3100
vw_set_tx_pin(8);
vw_setup(2000); // Bits per sec
randomSeed(analogRead(0));
Serial.begin(9600);
ds.begin();
lcd.init(); // инициализация LCD
lcd.backlight(); // включаем подсветку
lcd1.init(); // инициализация LCD1
lcd1.backlight(); // включаем подсветку LCD1
pinMode(floorPin, OUTPUT); // Включаем порт управления теплым полом
pinMode(ledPin, OUTPUT);
}
void loop() {
ds.requestTemperatures(); // считываем температуру с датчиков
Temp = ds.getTempC(sensor1);
OutDoorTemp = ds.getTempC(sensor2);
FloorTemp = ds.getTempC(sensor3);
mydata.temperature = OutDoorTemp;
mydata.temperatureA = Temp;
ET.sendData();
delay(3000);
lcd.setCursor(0, 0);
lcd.print("Sensor 1: ");
lcd.print(Temp); // отправляем температуру
lcd.write(byte(223));
lcd.print("C");
lcd1.setCursor(0, 0);
lcd1.print("OutDoorTemp:");
lcd1.print(OutDoorTemp);
lcd1.write(byte(223));
lcd1.print("C");
lcd.setCursor(0, 1);
lcd.print("Sensor 3: ");
lcd.print(FloorTemp);
lcd.write(byte(223));
lcd.print("C");
setAeroTemp = EEPROM.read(0);
AeroTempGisteresis = EEPROM.read(7); //гистерезис температуры воздуха. Хранится в ЕПРОМ в 7-ой ячейке
digitalWrite(ledPin, state);
state = !state;
//=========================================================================================
// Модуль управления ТЕПЛЫМ ПОЛОМ
//=========================================================================================
Serial.println("----------------------------------------------------------------------------------------------------");
Serial.println("ТЕПЛЫЙ ПОЛ");
Serial.println("----------------------------------------------------------------------------------------------------");
Serial.print ("температура включения пола *C: ");
Serial.println(setFloorTemp - FloorTempGisteresis);
Serial.print ("температура отключения пола *C: ");
Serial.println(setFloorTemp);
Serial.print ("гистерезис температуры включения пола *C: ");
Serial.println(FloorTempGisteresis);
Serial.print ("температура включения пола по воздуху *C: ");
Serial.println(setAeroTemp - AeroTempGisteresis);
Serial.print ("температура воздухa над теплым полом *C: ");
Serial.println(Temp);
if (FloorTemp >= setFloorTemp||Temp >= setAeroTemp)
{
digitalWrite (floorPin, LOW);
lcd.setCursor(37, 1);
lcd.print("-"); // Выводим: -
Serial.println("Пол Выключен");
Serial.print("достигнута температура пола *C: ");
Serial.println(FloorTemp);
}
else
{
if (FloorTemp <= (setFloorTemp - FloorTempGisteresis) && Temp < (setAeroTemp - AeroTempGisteresis)||FloorTemp < comfortFloorTemp)
{
digitalWrite (floorPin, HIGH);
lcd.setCursor(37, 1);
lcd.print("|"); // Выводим: |
Serial.println("пол Включен");
Serial.print("идет нагрев пола до температуры *C: ");
Serial.println(setFloorTemp);
Serial.print ("температура пола *C: ");
Serial.println(FloorTemp);
}
else
{
//digitalWrite (floorPin, LOW);
lcd.setCursor(37, 1);
lcd.print("+"); // Выводим: -
Serial.println("Пол Выключен");
Serial.print("достигнута температура пола *C: ");
Serial.println(FloorTemp);
}
}
Serial.println("----------------------------------------------");
}
при отключении библиотеки OneWire и Даласовской все компелиться тоже при отключении библиотек для передатчика. вместе не хотят.
Подскажите плиз где грабли.