Подскажите почему не компилируется?

iwizard7
iwizard7 аватар
Offline
Зарегистрирован: 30.04.2013
  This report would have more information with
  "Show verbose output during compilation"
  enabled in File > Preferences.
Arduino: 1.0.6 (Windows 7), Board: "Arduino Uno"
In file included from Aquacontroller_ino.ino:4:
C:\arduino-1.0.6\libraries\LiquidCrystal_I2C/LiquidCrystal_I2C.h:81: error: conflicting return type specified for 'virtual void LiquidCrystal_I2C::write(uint8_t)'
C:\arduino-1.0.6\hardware\arduino\cores\arduino/Print.h:48: error:   overriding 'virtual size_t Print::write(uint8_t)'
step962
Offline
Зарегистрирован: 23.05.2011

Потому что компилятор выявил две ошибки в исходнике.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

step962 пишет:

Потому что компилятор выявил две ошибки в исходнике.

Кэп?

а вот ты исправь ошибки не видя кода. слабо? :)

step962
Offline
Зарегистрирован: 23.05.2011

А это уже не для КО задача.

Ща ясновидящие подтянутся и сделают всю черновую работу.

iwizard7
iwizard7 аватар
Offline
Зарегистрирован: 30.04.2013

:))) извеняюсь что сразу код не выложил, вот выкладываю, помогите найти ошибки пожалуйста

#include <DS1307new.h> // for clock
#include <Wire.h> // for i2c protocol
#include <OneWire.h> // for DS18B20
#include <LiquidCrystal_I2C.h> // for 1602
#include <SPI.h>
#include <Ethernet.h>
float maxF=0, minF=212; //переменные для макс и мин температуры отображаемой на страничке
int startLight =18; //время включения света
int endLight =23;   //время выключения света
int LCDLightON =16; //время включения подсветки LCD
int LCDLightOFF =23; //время выключения подсветки LCD
OneWire  ds(6);     // on pin 10 (a 4.7K resistor is necessary)  
int ledPin = 8;     // pin for LED
int LedStatus = 0; 
int sensorPin = A0; // датчик света
unsigned int sensorValue = 0;// цифровое значение фоторезистора
LiquidCrystal_I2C lcd(0x20,16,2); // 0x20 is adresss for LCC 16x2
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,2,120);
EthernetServer server(80);
byte grad[8] = { // рисует значек градуса
  B01110,
  B10001,
  B10001,
  B01110,
  B00000,
  B00000,
  B00000,
};
int ics =0; //count number of sensor
//--------------------Переменные для Uptime---------------------
long previousMillis = 0;//переменная для хранения значений таймера
int day=0;//значение дней
int hour=0;//значение часов
int min=0;//значение минут
int second=0;//значение сукунд
//--------------------Переменные для Uptime КОНЕЦ-------------

void setup(){

  pinMode(ledPin, OUTPUT);

  Serial.begin(9600);  

  lcd.init(); 
  lcd.backlight(); //backlight is now ON
  // set up the LCD's number of columns and rows: 
  lcd.createChar(0, grad);
  lcd.begin(16, 2);
  /* Print a logo message to the LCD.
   lcd.print("AQUACONTROLLER");  
   lcd.setCursor(0, 1);
   lcd.print("by iWizard");
   delay (2500);
   lcd.clear();
   */
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }

  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip);
  server.begin();
}

void loop(){
  byte i;
  byte present = 0;
  byte type_s;
  byte data[12];
  byte addr[8];
  float celsius;

  if ( !ds.search(addr)) {
     lcd.setCursor(0, 1);
    ds.reset_search();
    ics=0;
    sensorValue = analogRead(sensorPin);  // считываем значение с фоторезистора

    if (RTC.hour >= startLight && RTC.hour <= endLight) digitalWrite(ledPin, HIGH); //устанавливаем время и зажигаем светодиод
    else digitalWrite(ledPin, LOW); // тушим светодиод

    if (RTC.hour >= LCDLightON && RTC.hour <= LCDLightOFF) lcd.backlight(); //устанавливаем время и зажигаем подсветку LCD
    else lcd.noBacklight(); // тушим подсветку LCD
///--------------------------------КОД ДЛЯ UPTIME-------------------------------///
     if (millis() - previousMillis >500)
{
  previousMillis = millis();  //запускаем таймер
 second++;//переменная секунда + 1
}
   if(second>59)//если переменная секунда больше 59 ...
   {
     second=0;//сбрасываем ее на 0
     min++;//пишем +1 в переменную минута
   }
if(min>59)//если переменная минута больше 59 ...
   {
     min=0;//сбрасываем ее на 0
     hour++;//пишем +1 в переменную час
   }
   if(hour>23)//если переменная час больше 23 ...
   {
     hour=0;//сбрасываем ее на 0
 day++;//пишем +1 в переменную час
   }
///-----------------------------КОД ДЛЯ UPTIME КОНЕЦ----------------------------///
///-----------------------------НАЧАЛО КОДА ЧАСОВ------------------------------///

    RTC.getTime();
    if (RTC.hour < 10)                   
    {
      Serial.println();
      Serial.print("0");
      Serial.print(RTC.hour, DEC);
    }
    else
    {
      Serial.print(RTC.hour, DEC);
    }

    Serial.print(":");

    if (RTC.minute < 10) Serial.print("0");
    Serial.print(RTC.minute, DEC);

    Serial.print(":");
    if (RTC.second < 10) Serial.print("0");
    Serial.print(RTC.second, DEC);

    Serial.print(" ");
    if (RTC.day < 10) Serial.print("0");
    Serial.print(RTC.day, DEC);

    Serial.print("-");
    if (RTC.month < 10) Serial.print("0");
    Serial.print(RTC.month, DEC);  
    Serial.print("-");
    Serial.print(RTC.year, DEC);         
    Serial.print(" ");
    Serial.print("-");
    switch (RTC.dow)                     
{
    case 0: Serial.print("SUN "); break;
    case 1: Serial.print("MON "); break;
    case 2: Serial.print("TUE "); break;
    case 3: Serial.print("WED "); break;
    case 4: Serial.print("THU "); break;
    case 5: Serial.print("FRI "); break;
    case 6: Serial.print("SAT "); break;
}

    ics++; 

    ds.reset();
    ds.select(addr);
    ds.write(0x44, 1);        // start conversion, with parasite power on at the end

    delay(750);     // maybe 750ms is enough, maybe not
                    // we might do a ds.depower() here, but the reset will take care of it.

    present = ds.reset();
    ds.select(addr);    
    ds.write(0xBE);         // Read Scratchpad

    for ( i = 0; i < 9; i++) {           // we need 9 bytes
      data[i] = ds.read();
    }
    // Convert the data to actual temperature
    // because the result is a 16 bit signed integer, it should
    // be stored to an "int16_t" type, which is always 16 bits
    // even when compiled on a 32 bit processor.
    int16_t raw = (data[1] << 8) | data[0];
    if (type_s) {
      raw = raw << 3; // 9 bit resolution default
      if (data[7] == 0x10) {
        // "count remain" gives full 12 bit resolution
        raw = (raw & 0xFFF0) + 12 - data[6];
      }
    } 
    else {
      byte cfg = (data[4] & 0x60);
      // at lower res, the low bits are undefined, so let's zero them
      if (cfg == 0x00) raw = raw & ~7;  // 9 bit resolution, 93.75 ms
      else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
      else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms
      //// default is 12 bit resolution, 750 ms conversion time
    }

    celsius = (float)raw / 16.0;

    lcd.setCursor(0,0);
    lcd.print("Temp");
    lcd.print(" = ");
    lcd.print(celsius);
    lcd.write(byte(0));
    lcd.print("C");
    Serial.print(celsius);
    Serial.print("C, ");
    //вывод часов на дисплей//  
    lcd.setCursor(0, 1);
    if(RTC.hour<10)lcd.print(0);
    lcd.print(RTC.hour);

    lcd.print(":");
    //lcd.print( (RTC.second %2 )?" ":":"); //мигать двоеточием
    if(RTC.minute<10)lcd.print(0);
    lcd.print(RTC.minute);

    lcd.setCursor(10, 1); 
    switch (RTC.dow)                      // Friendly printout the weekday
    {
    case 0: lcd.print("SUN"); break;
    case 1: lcd.print("MON"); break;
    case 2: lcd.print("TUE"); break;
    case 3: lcd.print("WED"); break;
    case 4: lcd.print("THU"); break;
    case 5: lcd.print("FRI"); break;
    case 6: lcd.print("SAT"); break;
    }
    lcd.print("-"); 
    lcd.print(RTC.day);

    // listen for incoming clients
    EthernetClient client = server.available();
    if (client) {
      Serial.println("new client");
      // an http request ends with a blank line
      boolean currentLineIsBlank = true;
      while (client.connected()) {
        if (client.available()) {
          char c = client.read();
          Serial.write(c);
          // if you've gotten to the end of the line (received a newline
          // character) and the line is blank, the http request has ended,
          // so you can send a reply
          //if (c == '\n' && currentLineIsBlank) {
            // send a standard http response header
            client.println("HTTP/1.1 200 OK");
            client.println("Content-Type: text/html");
            client.println("<head> ");
            client.println("<meta http-equiv='Content-Type' content='text/html; charset=utf-8' /> ");
            client.println("<title> Arduino :: Акваконтролеер</title>");
            client.println("</head> ");
            client.println("<body bgcolor=\"#9bbad6\">"); // цвет фона
            client.println("Connection: close");  // the connection will be closed after completion of the response
            client.println("Refresh: 10");  // refresh the page automatically every 5 sec
            client.println();
            client.println("<!DOCTYPE HTML>");
            client.println("<html>");
            client.println("<center>");
            // output the value of each analog input pin
            for (int analogChannel = 0; analogChannel < 1; analogChannel++) {
              int sensorReading = analogRead(analogChannel);
             client.println("<H1>");
              client.print(RTC.hour, DEC);
              client.print(":");
              if (RTC.minute < 10) client.print("0");
              client.print(RTC.minute, DEC);

              client.println("<br>");
              client.println("</h1>");
            client.println("<h2>");
              if (RTC.day < 10) client.print("0");
              client.print(RTC.day, DEC);


              client.print(" ");
             // if (RTC.month < 10) client.print("0");
             // client.print(RTC.month, DEC);
              switch (RTC.month)                     
              {
              case 1: client.print("Января"); break;
              case 2: client.print("Февраля"); break;
              case 3: client.print("Марта"); break;
              case 4: client.print("Апреля"); break;
              case 5: client.print("Мая"); break;
              case 6: client.print("Июня"); break;
              case 7: client.print("Июля"); break;
              case 8: client.print("Августа"); break;
              case 9: client.print("Сентября"); break;
              case 10: client.print("Октября"); break;
              case 11: client.print("Ноября"); break;
              case 12: client.print("Декабря"); break;
}            
              client.print(" ");
              client.print(RTC.year, DEC);         
              client.print(" ");
              client.print(", ");
              switch (RTC.dow)                     
{
              case 0: client.print("Воскресенье"); break;
              case 1: client.print("Понедельник"); break;
              case 2: client.print("Вторник"); break;
              case 3: client.print("Среда"); break;
              case 4: client.print("Четверг"); break;
              case 5: client.print("Пятница"); break;
              case 6: client.print("Суббота"); break;
}
              client.println("</h2>");
              client.println("<br>");
              client.println("<h3>");
              client.print("Температура");
              client.print(" = ");
              client.print(celsius);
              client.write(byte(0));
              client.print("°C");
              client.println("</h3>");
             // client.print(", ");
           
  if (celsius>maxF) {maxF=celsius;}  //check for max temp
  if (celsius<minF) {minF=celsius;}  //check for min temp
  	client.print("Макс=");
  	client.print(maxF);
        client.print("°C ");
  	client.print("Мин=");
  	client.print(minF);
  	client.print("°C ");
        client.print(", Датчик№");
        client.print(ics); //показывает номер датчика
        client.println("<br>");

  if ( digitalRead(ledPin) == HIGH ) {
      client.print ("Подсветка <font color=’green’>включена</font>");
  }
  if ( digitalRead(ledPin) == LOW )  {
      client.print ("Подсветка <font color=’red’>выключена</font>");
}
client.println("<br>");
client.print("Время включения света: ");
client.print(startLight);
client.print(" часов.");
client.println("<br>");
client.print("Время выключения света: ");
client.print(endLight);
client.print(" часов.");
client.println("<br>");
client.print("Уровень света:");
client.print(sensorValue);
client.println("<br>");
client.print("Uptime: ");
client.print(day);
client.print(" дней ");
client.print(hour);
client.print(" часов ");
client.print(min);
client.print(" минут ");
client.print(second);
client.print(" секунд ");
client.println("<br>");
client.print("IP адрес: ");
client.print(Ethernet.localIP());
client.println("<br>");
client.print("Ver. v 0.0.9 ");
}
      client.println("</center>");
       client.println("</html>");
            break;

  }
}

      delay(500);
      client.stop();
      Serial.println("client disonnected");
    }
  }
}

 

Kolchugin
Offline
Зарегистрирован: 15.12.2013

Какая-та проблема с библиотекой для дисплея.

zugni
Offline
Зарегистрирован: 14.06.2015

а у меня как у новичка нет не какой ошибки)

скетч рабочий не какой ошибки не показывает(

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Насколько помню, это может быть связано с версией ArduinoIDE

zugni
Offline
Зарегистрирован: 14.06.2015

у меня последняя версия

 

Arhat109
Offline
Зарегистрирован: 26.05.2015

iwizard7 пишет:
In file included from Aquacontroller_ino.ino:4:

C:\arduino-1.0.6\libraries\LiquidCrystal_I2C/LiquidCrystal_I2C.h:81: error: conflicting return type specified for 'virtual void LiquidCrystal_I2C::write(uint8_t)'
1. Проблема в 81-й строке библиотеки. Конфликт возвращаемого типа у этой функции. Скорее всего "конфликт" в том, что объявлена она в библотеке одним способом, а пользуете вы её иначе. Сравнивайте объявление в этом хидере и как она у вас вызывается.
 
iwizard7 пишет:
C:\arduino-1.0.6\hardware\arduino\cores\arduino/Print.h:48: error:   overriding 'virtual size_t Print::write(uint8_t)'
 
2. Старая шутка. Тоже недавно нарывался. Смените оболочку на версию попозжее. У меня нормально пашет 1.6.4.
 
Проблема в том, что к старой оболочке требуется старый компилятор со старыми заголовками, а у вас он похоже "свежий". Можно, конечно поправить и эту фигню (1.0.6)... гугль в помощь. "КАК" есть даже тут.
iwizard7
iwizard7 аватар
Offline
Зарегистрирован: 30.04.2013

Спасибо! буду качать оболочку постарше, вечером отпишусь что получится

Arhat109
Offline
Зарегистрирован: 26.05.2015

И по первой ошибке. Присмотритесь. Компилятор указывает на то, что функция write() в библиотеке типа "Статическая" , а у вас в опубликованном скетче пользуется везде метод, как понимаю... оно точно определено как метод, а не статическая процедура? Посмотрите внимательно в библиотеке.

iwizard7
iwizard7 аватар
Offline
Зарегистрирован: 30.04.2013

Интересно то что раньше компилировалось все, с полгода назад

Arhat109
Offline
Зарегистрирован: 26.05.2015

возможно что он просто так все методы обозначает, я не вдавался в детали. Тогда, скорее всего ошибка наведенная косяком в типовом print() из-за несовместимости версий ИДЕ и компилятора.

iwizard7
iwizard7 аватар
Offline
Зарегистрирован: 30.04.2013

Помогла установка версии оболочки более старой