IDE 1.6.0 ошибка компиляции

MDV
Offline
Зарегистрирован: 08.08.2013
Arduino: 1.6.0 (Windows 7), Плата"Arduino Uno"

In file included from E:\arduino-1.6.0\hardware\arduino\avr\cores\arduino/Arduino.h:224:0,
                 from E:\arduino-1.6.0\libraries\OneWire/OneWire.h:7,
                 from Dmitry19_12.ino:7:
E:\arduino-1.6.0\hardware\arduino\avr\cores\arduino/USBAPI.h:30:24: error: conflicting declaration 'typedef short unsigned int u16'
 typedef unsigned short u16;
                        ^
In file included from Dmitry19_12.ino:6:0:
E:\arduino-1.6.0\libraries\GSM/Narodmon.h:26:22: error: 'u16' has a previous declaration as 'typedef unsigned int u16'
 typedef unsigned int u16;

                      ^
Ошибка компиляции.

  This report would have more information with
  "Отображать вывод во время компиляции"
  enabled in File > Preferences.

доброго дня всем

решил установить версию 1.6.0 и сразу получиь ошибку на проекте который на версии 1.0.5 компилируется без проблем. Скорей всего на данные грабли уже кто то налетал. нужен совет как это исправить.

 

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

конфликт типов - дважды обьявлен один и тот-же тип. Несовместимая библиотека Narodmon.h

Поменяй в ней u16 на uint16_t, а строку с обьявленим типа вообще убери.

MDV
Offline
Зарегистрирован: 08.08.2013
Arduino: 1.6.0 (Windows 7), Плата"Arduino Uno"

In file included from Dmitry19_12.ino:9:0:
E:\arduino-1.6.0\libraries\GSM/GSM.h:27:22: error: conflicting declaration 'typedef unsigned int u16'
 typedef unsigned int u16;
                      ^
In file included from E:\arduino-1.6.0\hardware\arduino\avr\cores\arduino/Arduino.h:224:0,
                 from E:\arduino-1.6.0\libraries\OneWire/OneWire.h:7,
                 from Dmitry19_12.ino:7:
E:\arduino-1.6.0\hardware\arduino\avr\cores\arduino/USBAPI.h:30:24: error: 'u16' has a previous declaration as 'typedef short unsigned int u16'
 typedef unsigned short u16;
                        ^
Ошибка компиляции.

  This report would have more information with
  "Отображать вывод во время компиляции"
  enabled in File > Preferences.

строку заремил эффект тотже

MDV
Offline
Зарегистрирован: 08.08.2013
Arduino: 1.6.0 (Windows 7), Плата"Arduino Uno"

In file included from E:\arduino-1.6.0\libraries\GSM\GSM.cpp:20:0:
E:\arduino-1.6.0\libraries\GSM\GSM.cpp:76:32: error: variable 'searchStrings' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
 const char * searchStrings[11] PROGMEM         = {OK, RING, CONOK, CR_LF, MORE, CPIN, CGATT, SENOK, NPD, CALR, CMGR};

                                ^
E:\arduino-1.6.0\libraries\GSM\GSM.cpp:307:29: error: 'u16' was not declared in this scope
 s8 UART0_check_acknowledge( u16 pause )

                             ^
E:\arduino-1.6.0\libraries\GSM\GSM.cpp:308:1: error: expected ',' or ';' before '{' token
 {

 ^
Ошибка компиляции.

  This report would have more information with
  "Отображать вывод во время компиляции"
  enabled in File > Preferences.

новый результат.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Наверное все гадалки ещё спят, подождите, к обеду проснутся и вам устроят..... помощь

Radjah
Offline
Зарегистрирован: 06.08.2014

Тебе GSM для проекта нужно? Если нет, убирай нафиг. Ну и без скетча только общие советы получишь.

MDV
Offline
Зарегистрирован: 08.08.2013

/*
Скетч для отправки данных температуры на сервис http://narodmon.ru/
 Используется плата Ардуино Уно, шилд «EFcom v1.2», дисплей LCD5110, температурные датчики - DS18B20 или DS18S20, датчик давления BMP085
 и датчик влажности DHT21 
 */
#include <Narodmon.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <GSM.h>
#include <avr/pgmspace.h>
#include <LCD5110_Basic.h>
//#include <SoftwareSerial.h>
#include <Wire.h>
#include <Adafruit_BMP085.h>
#include <dht.h>
LCD5110 myGLCD(9,10,11,12,13);
#define DHT21PIN 7
dht DHT;
Adafruit_BMP085 bmp;
extern uint8_t SmallFont[];
#define ONE_WIRE_BUS 8 // Номер линии, к которой подключены датчики температуры
#define TEMPERATURE_PRECISION 9 // Разрядность датчиков температуры

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress sensor_1, sensor_2, sensor_3, sensor_4;// Используем 4 температурных датчика

unsigned char RHMacn[8] = {  
  0x00, 'D', 'H', 'T', '1', '1', '4', '5'}; // MAC датчика влажности.
unsigned char RTMacn[8] = {  
  0x00, 'D', 'H', 'T', '1', '1', '4', '6'}; // MAC датчика  t влажности.
unsigned char PDMacn[8] = {  
  0x00, 'B', 'M', 'P', '1', '1', '4', '5'}; // MAC датчика давления.
unsigned char PTMacn[8] = {  
  0x00, 'B', 'M', 'P', '1', '1', '4', '6'}; // MAC датчика t давления
int TempKoll; // темпераура в солнечном коллекторе
int TempBoll; // температура в бойлере
int Temp3; //
int Temp4;
int TempOut; // температура на улице
int TempInp; // температура в доме

const char PIN[] PROGMEM =  "0000";//ПИН-код
const char ISP_IP[] PROGMEM =  "internet.mts.ru"; //Настройки для доступа к GPRS
const char LOGIN[] PROGMEM =  "mts";
char IMEI[16];  //Буфер для считывания IMEI

unsigned int minutes = 0;
unsigned char SendIntervalInMinutes = 10; // Интервал сна устройства, в минутах.
unsigned char GSM_TASK_flag; // Флаг для активации отправки

volatile unsigned char WDT_wake;
volatile unsigned char SleepTimeInSec = 60;

/*
Обработчик прерываний по срабатыванию охранного таймера
 */
ISR(WDT_vect) 
{  
  static unsigned char WDT_counter;  // увеличим счетчик прерываний
  if (WDT_counter++ == SleepTimeInSec) 
  { //отсчет минут
    WDT_counter = 0;
    if (minutes++ == SendIntervalInMinutes) 
    {
      minutes = 0;
      GSM_TASK_flag = 1; // Надо выполнить задачу по отправке данных на сервер
    }
  }  
  asm ("WDR");
}

void setup_WDT(void) 
{
  asm ("CLI");
  asm ("WDR");
  // WDT_counter = 0; 
  MCUSR &= ~(1<<WDRF); //Сброс флага срабатывания
  WDTCSR = (1 << WDCE)|(1<<WDE);
  WDTCSR = (1 << WDP2)|(1 << WDP1)|(1 << WDIE)|(1 << WDIF);  // Настройка сторожевого таймера на период 1 сек. Перевод в режим работы генерирования прерываний
  asm ("SEI"); 
}

void off_WDT(void) 
{
  asm ("CLI");
  asm ("WDR");
  // WDT_counter = 0;
  MCUSR &= ~(1<<WDRF); //Сброс флага срабатывания
  WDTCSR = (1 << WDCE)|(1<<WDE)|(1 << WDIF); 
  /* Turn off WDT */
  WDTCSR = 0x00;
  asm ("SEI"); 
}

void sys_sleep(void) 
{
  asm ("CLI");    
  // asm ("WDR");      
  ADCSRA &= ~(1 << ADEN);  // Выключим АЦП  
  SMCR = (1<<SE)|(1<<SM1); // Конфигурируем режим power-down
  //MCUCR |= (1<<BODSE) | (1<<BODS); // Отключаем BOD на время сна
  asm ("SEI");    
  asm ("SLEEP");
}

void sys_wake(void) 
{
  SMCR = 0x00; // Конфигурируем режим power-down
}

void setup() 
{
  myGLCD.InitLCD();
  myGLCD.setFont(SmallFont);
  myGLCD.setContrast(63);
  pinMode(3, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(2, OUTPUT);
  pinMode(17, OUTPUT);
  digitalWrite(3, HIGH); 
  digitalWrite(2, HIGH); 
  digitalWrite(17, HIGH); 
  myGLCD.clrScr();
  myGLCD.print("Dmitry", CENTER, 4);
  myGLCD.print("Makarov", CENTER, 12);
  myGLCD.print("Narodniy", CENTER, 18);
  myGLCD.print("monitor", CENTER, 26);
  delay (500);
  sensors.begin();
  delay (500);
  bmp.begin();
  delay (500);
  // Поиск 1-wire датчиков
  sensors.getAddress(sensor_1, 0);
  sensors.getAddress(sensor_2, 1);
  sensors.getAddress(sensor_3, 2); 
  sensors.getAddress(sensor_4, 3);    
  // установка разрядности датчиков
  sensors.setResolution(sensor_1, TEMPERATURE_PRECISION);
  sensors.setResolution(sensor_2, TEMPERATURE_PRECISION);
  sensors.setResolution(sensor_3, TEMPERATURE_PRECISION);
  sensors.setResolution(sensor_4, TEMPERATURE_PRECISION);    
  // опрос всех датчиков на шине
  sensors.requestTemperatures(); 
  GSM_TASK_flag = 1;   
  delay (1000);
}
void loop() 
{  
  myGLCD.print("Loop", 0, 45);
  delay (500);
  if (GSM_TASK_flag) 
  { // В обработчике Watchdog таймер установился флаг GSM-задания
    GSM_TASK_flag = 0;
    // Отключаем сторожевой таймер
    off_WDT();   
    // инициализация GSM модема 
    myGLCD.clrScr();
    myGLCD.print("Init modem", LEFT, 0);
    // включаем модем
    digitalWrite(6, HIGH); 
    delay(2000);               
    digitalWrite(6, LOW);   
    delay(15000);
    while (GSM.Init(PIN)<0); 
    myGLCD.clrScr();
    // Пoлучаем IMEI   
    while (GSM.GetIMEI (IMEI) < 0);
    myGLCD.print("IMEI poluchen", LEFT, 18);
    delay (500);
    // Конверитруем в MAC  
    Narodmon.SetDeviceMACbyIMEI(IMEI);
    delay (500);
    //myGLCD.update();
    // считываем температуры, заносим в массив          
    digitalWrite(3, LOW); // включаем подсветку дисплея
    unsigned char SensorsNum = 0; // Для подсчета работающих датчиков
    signed int SensorData;
    if (ReadSensor (sensor_1, &SensorData)) 
    { 
      myGLCD.clrScr();
      Narodmon.SetMACnByIndex(SensorsNum, sensor_1);
      Narodmon.SetDATAByIndex(SensorsNum, SensorData);
      myGLCD.print("Read Data", LEFT, 0);
      myGLCD.print("T1=", LEFT, 9);
      myGLCD.printNumI(int(SensorData), 20, 9);
      Temp3=int(SensorData);
      delay (1000); 
      SensorsNum++;
    }
    if (ReadSensor (sensor_2, &SensorData)) 
    {  
      Narodmon.SetMACnByIndex(SensorsNum, sensor_2);
      Narodmon.SetDATAByIndex(SensorsNum, SensorData);
      myGLCD.print("T2=", LEFT, 18);
      myGLCD.printNumI(int(SensorData), 20, 18);
      Temp4=int(SensorData);
      delay (1000); 
      SensorsNum++;
    }
    if (ReadSensor (sensor_3, &SensorData)) 
    {  
      Narodmon.SetMACnByIndex(SensorsNum, sensor_3);
      Narodmon.SetDATAByIndex(SensorsNum, SensorData);
      myGLCD.print("SK=", LEFT, 27);
      myGLCD.printNumI(int(SensorData), 20, 27);
      TempKoll=int(SensorData);
      delay (1000);
      SensorsNum++;
    }
    if (ReadSensor (sensor_4, &SensorData)) 
    { 
      Narodmon.SetMACnByIndex(SensorsNum, sensor_4);
      Narodmon.SetDATAByIndex(SensorsNum, SensorData);
      myGLCD.print("BL=", 0, 36);
      myGLCD.printNumI(int(SensorData), 20, 36);
      TempBoll=int(SensorData);
      delay (1000);
      SensorsNum++;
    }
    //  берем данные с датчика DTH21
    {  
      int chk = DHT.read22(DHT21PIN);
      Narodmon.SetMACnByIndex(SensorsNum, RHMacn);
      Narodmon.SetDATAByIndex(SensorsNum, DHT.humidity*10);
      myGLCD.print("RH=", 45, 9);
      myGLCD.printNumI(DHT.humidity*10, 65, 9);
      delay (1000);
      SensorsNum++;
      Narodmon.SetMACnByIndex(SensorsNum, RTMacn);
      Narodmon.SetDATAByIndex(SensorsNum, DHT.temperature*10);
      myGLCD.print("TH=", 45, 18);
      myGLCD.printNumI(DHT.temperature*10, 65, 18);
      TempOut=int(DHT.temperature*10);
      delay (1000);
      SensorsNum++;
    } 
    // берем данные с датчика BMP085 
    {  
      float PRS = bmp.readPressure()/133.3;
      Narodmon.SetMACnByIndex(SensorsNum, PDMacn);
      Narodmon.SetDATAByIndex(SensorsNum, PRS*10.0);
      myGLCD.print("PD=", 45, 27);
      myGLCD.printNumI(PRS, 65, 27);
      delay (1000);
      SensorsNum++;
      float PRT = bmp.readTemperature();
      Narodmon.SetMACnByIndex(SensorsNum, PTMacn);
      Narodmon.SetDATAByIndex(SensorsNum, PRT*10.0);
      myGLCD.print("PT=", 45, 36);
      myGLCD.printNumI(PRT*10, 65, 36);
      TempInp=int(PRT*10);
      delay (1000);
      SensorsNum++;
    } 
    // включаем насос в зависимости от внешних условий
    if (TempOut<0 && TempKoll-TempInp>50 && TempKoll>TempInp) // включение в режиме обогрева дома
    {
      digitalWrite(2, LOW);
      myGLCD.printNumI(TempKoll-TempInp, 45, 45);
    }
    else 
    {
      digitalWrite(2, HIGH);
      myGLCD.printNumI(TempKoll-TempInp, 45, 45);
    }
    if (TempOut>50 && TempKoll>TempBoll) //включение насоса для нагрева воды в бойлере
    {
      digitalWrite(16, LOW);
    }
    else 
    {
      digitalWrite(16, HIGH);
    }
    if (TempOut>100 && TempKoll<TempBoll && TempBoll <400) //включение ТЭНов для нагрева воды в бойлере
    {
      digitalWrite(17, LOW);
    }
    else 
    {
      digitalWrite(17, HIGH);
    }
    u8 TxCounter = 0;
    myGLCD.print("Otpravka:      ", LEFT, 0);
    delay (1000); 
    if (SensorsNum)
    {
      delay (1000); 
      Narodmon.SetNumSensors(SensorsNum);
      while (GSM.SocketTCPWrite(ISP_IP, LOGIN, LOGIN, PSTR("narodmon.ru"), 8283, &Narodmon.TelnetSend) < 0) 
      {
        myGLCD.clrScr();
        myGLCD.print("TX=", 0, 9);
        myGLCD.printNumI(int(TxCounter),20, 9);
        myGLCD.print("T1=", LEFT, 18);
        myGLCD.printNumI(int(SensorData), 20, 18);
        delay (5000);
        // Если 4 раза неуспешно
        if (TxCounter++ == 4) 
        {
          myGLCD.clrScr();
          myGLCD.print("Data Bad", LEFT, 0);
          delay (1000); 
          TxCounter = 0;
          GSM_TASK_flag = 1;
          break; // Выход из цикла отправки
        }
      }
    }
    delay (1000); 
    //Усыпляем GSM-модуль
    while (GSM.PowerOFF() < 0);
    //myGLCD.clrScr();
    myGLCD.print("Modem OFF", LEFT, 0);
    digitalWrite(3, HIGH); 
    delay (1000); 
    // Включаем сторожевой таймер
    setup_WDT();
  }
  // Усыпляем Атмегу
  sys_sleep();
}

signed char ReadSensor (DeviceAddress sensor_addr, signed int* pData) 
{
  // Считываем с датчика температуры
  sensors.requestTemperatures();
  float tempS = sensors.getTempC(sensor_addr);
  if (tempS != DEVICE_DISCONNECTED) {
    signed int tempS10 = (signed int) (tempS * 10.0);
    *pData = tempS10;
    return 1;
  }
  return 0;
}

GSM для проекта нужен.

скеч выкладываю

 

Radjah
Offline
Зарегистрирован: 06.08.2014

Тогда открывай Narodmon.h и делай замену того злосчастного u16 на u_16, например, чтобы имена у типов были разные, или как ранее советовали, убрать объявление u16 нафиг, а все u16 заменить на uint16_t. До кучи пойдись по всем c-файлам в папке, там скоре всего тоже есть объявление переменных с типом u16. Это как раз в сообщении #3 видно.

Вариант с удалнием объявления и заменой на uint16_t даже лучше будет.

MDV
Offline
Зарегистрирован: 08.08.2013
typedef unsigned int u16;

это ремим и меняем u16 на uint16_t

правильно?

Radjah
Offline
Зарегистрирован: 06.08.2014

Да, но только в папке с той бибилиотекой. По идее должно помочь.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

1.0.6

MDV
Offline
Зарегистрирован: 08.08.2013

охота на 1.6.0 запустить

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

хоти. кто тебе мешает))

MDV
Offline
Зарегистрирован: 08.08.2013
Arduino: 1.6.0 (Windows 7), Плата"Arduino Uno"

In file included from E:\arduino-1.6.0\libraries\GSM\GSM.cpp:20:0:
E:\arduino-1.6.0\libraries\GSM\GSM.cpp:76:32: error: variable 'searchStrings' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
 const char * searchStrings[11] PROGMEM         = {OK, RING, CONOK, CR_LF, MORE, CPIN, CGATT, SENOK, NPD, CALR, CMGR};

                                ^
Ошибка компиляции.

  This report would have more information with
  "Отображать вывод во время компиляции"
  enabled in File > Preferences.

внес изменения, прогресс на лицо но есть еще другая ощибка. гуру окажите помощь советом.