Не компилируется код из примера.

triada13
Offline
Зарегистрирован: 04.01.2013

Хочу скомпилировать код примера но выскакивает ошибка компиляции, подскажите что может быть причиной.

Вот код:


// подключаем библиотеку
#include <dht.h>

// создаём объект-сенсор
DHT sensor = DHT();

void setup()
{
    Serial.begin(9600);

    // методом attach объявляем к какому контакту подключен
    // сенсор. В нашем примере это нулевой аналоговый контакт
    sensor.attach(A0);
    //
    // после подачи питания ждём секунду до готовности сенсора к работе
    delay(1000);
}

void loop()
{
    // метод update заставляет сенсор выдать текущие измерения
    sensor.update();

    switch (sensor.getLastError())
    {
        case DHT_ERROR_OK:
            char msg[128];
            // данные последнего измерения можно считать соответствующими
            // методами
            sprintf(msg, "Temperature = %dC, Humidity = %d%%", 
                    sensor.getTemperatureInt(), sensor.getHumidityInt());
            Serial.println(msg);
            break;
        case DHT_ERROR_START_FAILED_1:
            Serial.println("Error: start failed (stage 1)");
            break;
        case DHT_ERROR_START_FAILED_2:
            Serial.println("Error: start failed (stage 2)");
            break;
        case DHT_ERROR_READ_TIMEOUT:
            Serial.println("Error: read timeout");
            break;
        case DHT_ERROR_CHECKSUM_FAILURE:
            Serial.println("Error: checksum error");
            break;
    }

    delay(2000);
}

вот сообщения компилятора:

example:6: error: redefinition of 'DHT sensor'
dht:5: error: 'DHT sensor' previously declared here
example.ino: In function 'void setup()':
example:8: error: redefinition of 'void setup()'
dht:7: error: 'void setup()' previously defined here
example.ino: In function 'void loop()':
example:20: error: redefinition of 'void loop()'
dht:19: error: 'void loop()' previously defined here

 

medossa
Offline
Зарегистрирован: 10.07.2012

а почему цифровой датчик подключаете к аналоговому пину?

triada13
Offline
Зарегистрирован: 04.01.2013

это не я, это так в примере который шел с библиотекой.

medossa
Offline
Зарегистрирован: 10.07.2012

датчик DHT11? киньте ссылку на библиотеку.

triada13
Offline
Зарегистрирован: 04.01.2013

Недам )), уже разобрался, перезалил библиотеку. Сори за беспокойство.

triada13
Offline
Зарегистрирован: 04.01.2013

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

#include <IRremote.h>
#include <IRremoteInt.h>



void setup()
{
  
}
void loop()
{

}

Пишет:

In file included from Untitled_Sketch.ino:2:
D:\arduino-1.0.3\libraries\IRremote/IRremoteInt.h:15:22: warning: WProgram.h: No such file or directory
In file included from Untitled_Sketch.ino:2:
D:\arduino-1.0.3\libraries\IRremote/IRremoteInt.h:113: error: 'uint8_t' does not name a type
D:\arduino-1.0.3\libraries\IRremote/IRremoteInt.h:114: error: 'uint8_t' does not name a type
D:\arduino-1.0.3\libraries\IRremote/IRremoteInt.h:115: error: 'uint8_t' does not name a type
D:\arduino-1.0.3\libraries\IRremote/IRremoteInt.h:118: error: 'uint8_t' does not name a type

Я так понимаю что нехватает еще одной библиотеки? а где ее можно качнуть?

triada13
Offline
Зарегистрирован: 04.01.2013

Отвечаю сам себе: Цитата уважаемого maksim "В версиях 1.0 и выше нужно указывать файл #include "Arduino.h". Вывод - правка файла: IRremoteInt.h

kdm1980
Offline
Зарегистрирован: 12.02.2016

Хочу скомпилировать код примера но выскакивает ошибка компиляции, подскажите что может быть причиной.

#include <PID_v1.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <EEPROM2.h>
#include <DallasTemperature.h>
#include <OneWire.h>
#include <Sensirion.h>
#include <avr/wdt.h>
 
int del = 80;                     // переменная ожидания между выборами меню
unsigned int interval = 300;      // интервал сколько будет длиться цикл while, после чего перейдёт к следующему меню.(кол-во итераций)
 
//#define EXT_HEATING                    // ИСПОЛЬЗУЕМ ДОП.НАГРЕВАТЕЛЬ ВМЕСТО УВЛАЖНИТЕЛЯ. Если нужен увлажнитель, просто закомментируйте эту строку.
#define heater_pin 13                  // нагреватель
#define humidifer_pin 12               // увлажнитель
#define fan_pin 11                     // вентилятор
#define alarm_pin 14                   // пин аварии
#define beeper_pin 9                   //пищалка по аварии
#define dataPin 5                      //SHT10
#define clockPin 7                     //SHT10 
#define turn_pin 10                    // управление поворотом
#define extend_heater_pin 8         // дополнительный нагреватель
#define button_minus_pin 2            //пин кнопки "минус"
#define button_plus_pin 3             //пин кнопки "плюс"
#define button_enter_pin 4            //пин кнопки "enter"
#define DS18B20_Pin 6                 //пин термометра
#define setSampleTime 200            //время цикла ПИД
#define voltmeter_pin 1               //вход А1 через делитель (22к/10к) подключен к питанию модуля. Измеряет до 16В.
#define T_correction -0.4             // коррекция температуры SHT10
#define h_histeresis 1.0              // гистерезис влажности
 
boolean button_minus;               // статус нажатия кнопок
boolean button_plus;
boolean button_enter;
boolean bottomView = 0;            // флаг индикации нижней строки
float humidity;                    // Влажность
float temp1Ink;                    // Температура DS18B20
float temp2Ink;                    // Температура SHT10
//float dewpoint;                    // Точка росы
unsigned int rawData;
unsigned long currentTime;            // задаем переменные для тайминга поворота
unsigned long serialTime; //this will help us know when to talk with processing
unsigned long now;
unsigned long trhMillis = 0;    // период опроса датчиков
byte measActive = false;
byte measType = TEMP;
const unsigned long TRHSTEP   = 300UL;  // Период опроса датчиков
 
LiquidCrystal_I2C lcd(0x3F, 20, 4);  // инициализация библиотеки дисплея
//SHT1x sht1x(dataPin, clockPin);
OneWire oneWire(DS18B20_Pin);
DallasTemperature sensors(&oneWire);
Sensirion sht = Sensirion(dataPin, clockPin);
double Setpoint, Input, Output;            //объявляем переменные для ПИД
PID myPID(&Input, &Output, &Setpoint, 50.5, 0.5, 10.5, DIRECT); //Инициализируем ПИД-библиотеку и коэффициенты
int WindowSize = 1000;                  // ширина окна терморегулятора 1 секунда.
unsigned long windowStartTime;
unsigned long alarmDelay;
 
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////
void setup() {
  Serial.begin(9600);
  lcd.init();          // Старт дисплея
  lcd.backlight();     // Включаем подсветку дисплея
  windowStartTime = millis();
  byte stat;
  byte error = 0;
  float set_humidity;
  float alarmTemp;
  
  // Раскомментировать строки ниже для проверки и инициализации данных в энергонезависимой памяти
  // EEPROM_read(1, tempInk);
  // if(tempInk > 40 || tempInk < 30) EEPROM_write(1, 37.5);
  // EEPROM_read(5, alarmTemp);
  // if(alarmTemp > 10.0 || alarmTemp < 1.0) EEPROM_write(5, 2.0);
  // EEPROM_read(9, fanTemp);  
  // if(fanTemp > 10 || fanTemp < 40) EEPROM_write(9, 39);
  // EEPROM_read(11, turnPeriod);
  // if(turnPeriod > 13 || turnPeriod < 0) EEPROM_write(11, 2);
  // EEPROM_read(13, set_humidity);
  //if(set_humidity > 100.0 || set_humidity < 20.0) EEPROM_write(13, 55.5);
 
  
 
  delay(15);
  wdt_enable (WDTO_8S); //взводим сторожевой таймер на 8 секунд.
  myPID.SetOutputLimits(0, WindowSize); //задаем лимиты ширины ПИД-импульса от 0 до 1 секунды.
  myPID.SetMode(AUTOMATIC);             //включаем ПИД-регулирование
  myPID.SetSampleTime(setSampleTime);
  pinMode(extend_heater_pin, OUTPUT);      //пин дополнительного нагревателя. Переводим в 1 чтобы не включать реле.
  digitalWrite(extend_heater_pin, HIGH);
  pinMode(heater_pin, OUTPUT);
  pinMode(turn_pin, OUTPUT);      // устанавливаем выводы
  digitalWrite(turn_pin, HIGH);
  pinMode(humidifer_pin, OUTPUT);
  digitalWrite(humidifer_pin, LOW);
  pinMode(fan_pin, OUTPUT);
  digitalWrite(fan_pin, HIGH);
  pinMode(alarm_pin, OUTPUT);
  digitalWrite(alarm_pin, HIGH);
  pinMode(button_minus_pin, INPUT_PULLUP); //подтягиваем входы кнопок к плюсу встроенными резисторами
  pinMode(button_plus_pin, INPUT_PULLUP);
  pinMode(button_enter_pin, INPUT_PULLUP);
  alarmDelay = millis();
  sensors.begin();
  sensors.setResolution(12);    // установить разрешение (точность)
  sensors.setWaitForConversion(false);  // отключить ожидание
  windowStartTime = millis();
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Smart Inkubator V2.3");
  lcd.setCursor(3, 2);
  lcd.print("http://u-m.biz");
  delay(5000);
  lcd.clear();
}
 
 
////////////////////////////////////////////////////////////////////////////////////////////////////////
void loop() {
  // Input = getTemp();
  unsigned long now = millis();
  //timer.run();
  button_read();
  if (!button_enter) {
    delay(del);
    lcd.clear();
    menu();
  }
  if (!button_minus) {
    delay(del);
    lcd.clear();
    alarmDelay = millis();    // задержка аварии по нажатии кнопки Минус
  }
  if (!button_plus) {
    delay(del);
    lcd.clear();
    digitalWrite(turn_pin, !digitalRead(turn_pin));       // включаем/выключаем реле поворота по кнопке Плюс
  }
  if (!button_plus && !button_plus) {
    delay(del);
    lcd.clear();
    // bottomView = !bottomView;       // переключаем режим показа нижней строки.
  }
  //send-receive with processing if it's time
  if (millis() > serialTime)
  {
    SerialReceive();
    SerialSend();
    serialTime += 500;
  }
 
  getSensors();
  thermostat();
  humidifer();
  turn();
  fan();
  alarm();
  outpuPower();
  ext_heater();
  wdt_reset();
  
  //unsigned long now1 = millis();
  //Serial.println(now1-now);
}
 
 
///читаем кнопки /////////////////////////////////////////////////////////////////////////
void button_read() {//функция проверки нажатия кнопки
  button_minus = digitalRead(button_minus_pin); //запоминаем значение кнопки
  button_plus = digitalRead(button_plus_pin); //запоминаем значение кнопки
  button_enter = digitalRead(button_enter_pin); //запоминаем значение кнопки
  if (!button_minus || !button_plus || !button_enter) beeper(50);
  wdt_reset();
}
 
 
//меню////////////////////////////////////////////////////////////////////////////////////////
void menu() {
  temp_setup();
  hum_setup();
  turn_setup();
  alarm_setup();
  vent_setup();
  //data_time_setup();
}
 
 
//устанавливаем температуру в меню///////////////////////////////////////////////////////////
void temp_setup() {
  float tempInk;
  lcd.clear();
  delay(del);
  button_read();
  lcd.setCursor(2, 0);
  lcd.print("TEMP.INK SETUP");
  delay(1000);
  int x = 0;
  while (1) {
    x++;
    if (x > interval) {
      break;
    }
    button_read();
    //EEPROM_write(1, 37.5);
  EEPROM_read_mem(1, &tempInk, sizeof(tempInk));
    EEPROM_read(1, tempInk);
    if (!button_enter) {
      delay(del);
      lcd.clear(); //очищаем экран
      break;
    }
    if (!button_minus) {
      x = 0;
      EEPROM_write(1, tempInk - 0.1);
      if (tempInk < 30.0) {     //проверяем, если выше 40,
        EEPROM_write(1, 30.0);  //пишем в память 40
      }
      lcd.clear();
    }
 
    if (!button_plus) {
      x = 0;
      EEPROM_write(1, tempInk + 0.1);
      if (tempInk > 40.0) {     //проверяем, если выше 30,
        EEPROM_write(1, 40.0);  //пишем в память 30
      }
      lcd.clear();
    }
    lcd.setCursor(2, 0);
    lcd.print("TEMP.INK = ");
    lcd.print(tempInk, 1);
    lcd.setCursor(0, 3);
    lcd.print("minus  NEXT  plus");
    delay(del);
  }
}
 
 
//устанавливаем влажность////////////////////////////////////////////////////////////////////////
void hum_setup() {
  float set_humidity;
  lcd.clear();
  delay(del);
  button_read();
  lcd.setCursor(3, 0);
  lcd.print("HUMIDITY SETUP");
  delay(1000);
  int x = 0;
  while (1) {
    x++;
    if (x > interval) {
      break;
    }
    button_read();
    //EEPROM_write(13, 65.0);
    //EEPROM_read_mem(13, &set_humidity, sizeof(set_humidity));
    EEPROM_read(13, set_humidity);
    if (!button_enter) {
      delay(del);
      lcd.clear(); //очищаем экран
      break;
    }
    if (!button_minus) {
      x = 0;
      EEPROM_write(13, set_humidity - 0.5);
      if (set_humidity < 20) {     //проверяем, если выше 40,
        EEPROM_write(13, 20.0);  //пишем в память 40
      }
      lcd.clear();
    }
 
    if (!button_plus) {
      x = 0;
      EEPROM_write(13, set_humidity + 0.5);
      if (set_humidity > 100) {     //проверяем, если выше 40,
        EEPROM_write(13, 100.0);  //пишем в память 40
      }
      lcd.clear();
    }
    lcd.setCursor(2, 0);
    lcd.print("Humidity = ");
    lcd.print(set_humidity, 1);
    lcd.setCursor(0, 3);
    lcd.print("minus  NEXT  plus");
    delay(del);
  }
}
 
 
//устанавливаем поворот/////////////////////////////////////////////////////////////////////////
void turn_setup() {
  int turnPeriod;
  lcd.clear();
  delay(del);
  button_read();
  lcd.setCursor(4, 0);
  lcd.print("TURN SETUP");
  delay(1000);
  int x = 0;
  while (1) {
    x++;
    if (x > interval) {
      break;
    }
    button_read();
    EEPROM_read(11, turnPeriod);
    if (!button_enter) {
      delay(del);
      lcd.clear(); //очищаем экран
      break;
    }
    if (!button_minus) {
      x = 0;
      EEPROM_write(11, turnPeriod - 1);
      if (turnPeriod < 0) {     //проверяем, если выше 13,
        EEPROM_write(11, 0);  //пишем в память 13
      }
      lcd.clear();
    }
    if (!button_plus) {
      x = 0;
      EEPROM_write(11, turnPeriod + 1);
      if (turnPeriod > 13) {     //проверяем, если ниже 0,
        EEPROM_write(11, 13);  //пишем в память 0
      }
      lcd.clear();
    }
    EEPROM_read(11, turnPeriod);
    lcd.setCursor(2, 0);
    lcd.print("PERIOD = ");
    if (turnPeriod < 13)lcd.print(turnPeriod);
    if (turnPeriod > 12) lcd.print("RND");
    lcd.print(" Hour");
    lcd.setCursor(0, 3);
    lcd.print("minus  NEXT  plus");
    delay(del);
  }
}
 
 
//устанавливаем сигнализацию/////////////////////////////////////////////////////////////////////
void alarm_setup() {
  float alarmTemp;
  lcd.clear();
  delay(del);
  button_read();
  lcd.setCursor(4, 0);
  lcd.print("ALARM SETUP");
  delay(1000);
  int x = 0;
  while (1) {
    x++;
    if (x > interval) {
      break;
    }
    button_read();
    EEPROM_read(5, alarmTemp);
    if (!button_enter) {
      delay(del);
      lcd.clear(); //очищаем экран
      break;
    }
    if (!button_minus) {
      x = 0;
      EEPROM_write(5, alarmTemp - 0.1);
      if (alarmTemp < 1.0) {     //проверяем, если ниже 1,
        EEPROM_write(5, 1.0);  //пишем в память 1
      }
      lcd.clear();
    }
    if (!button_plus) {
      x = 0;
      EEPROM_write(5, alarmTemp + 0.1);
      if (alarmTemp > 10.0) {     //проверяем, если выше +-10,
        EEPROM_write(5, 10.0);  //пишем в память 10
      }
      lcd.clear();
    }
    lcd.setCursor(2, 0);
    lcd.print("T.Alarm + - ");
    lcd.print(alarmTemp, 1);
    lcd.print((char)223);
    lcd.print("C");
    lcd.setCursor(0, 3);
    lcd.print("minus  NEXT  plus");
    delay(del);
  }
}
 
 
//устанавливаем вентиляцию/////////////////////////////////////////////////////////////////
void vent_setup() {
  int fanTemp;
  lcd.clear();
  delay(del);
  button_read();
  lcd.setCursor(4, 0);
  lcd.print("FAN SETUP");
  delay(1000);
  int x = 0;
  while (1) {
    x++;
    if (x > interval) {
      break;
    }
    button_read();
    EEPROM_read(9, fanTemp);
    if (!button_enter) {
      delay(del);
      lcd.clear(); //очищаем экран
      break;
    }
    if (!button_minus) {
      x = 0;
      EEPROM_write(9, fanTemp - 1);
      if (fanTemp < 20) {     //проверяем, если выше 40,
        EEPROM_write(9, 20);  //пишем в память 40
      }
      lcd.clear();
    }
    if (!button_plus) {
      x = 0;
      EEPROM_write(9, fanTemp + 1);
      if (fanTemp > 40) {     //проверяем, если выше 40,
        EEPROM_write(9, 40);  //пишем в память 40
      }
      lcd.clear();
    }
    lcd.setCursor(4, 0);
    lcd.print("T.Fan = ");
    lcd.print(fanTemp);
    lcd.print((char)223);
    lcd.print("C");
    lcd.setCursor(0, 3);
    lcd.print("minus  NEXT  plus");
    delay(del);
  }
}
 
 
///опрашиваем датчики //////////////////////////////////////////////////////////////////////////
void getSensors() {
  unsigned long curMillis = millis();          // Получаем текущее время работы
  if (curMillis - trhMillis >= TRHSTEP) {    // время для нового измерения?
    sensors.requestTemperatures();
    temp1Ink = sensors.getTempCByIndex(0);
    if (temp1Ink == -127.0) temp1Ink = 85.0;
  }
  if (curMillis - trhMillis >= TRHSTEP * 4) {    // время для нового измерения?
    measActive = true;
    measType = TEMP;
    sht.meas(TEMP, &rawData, NONBLOCK);        // измеряем температуру.
    trhMillis = curMillis;
  }
  if (measActive && sht.measRdy()) {           // проверяем статус измерения
    if (measType == TEMP) {                    // обрабатываем температуру или влажность?
      measType = HUMI;
      temp2Ink = sht.calcTemp(rawData);     // Конвертируем сырые данные с сенсора
      temp2Ink = (temp2Ink + (T_correction)); // Корректируем показания текрмометра
      sht.meas(HUMI, &rawData, NONBLOCK);      // измеряем влажность
    }
    else {
      measActive = false;
      humidity = sht.calcHumi(rawData, temp2Ink); // конвертируем данные с сенсора
      //     dewpoint = sht.calcDewpoint(humidity, temp2Ink);
    }
  }
  // logData();
}
 
 
//используем терморегулятор/////////////////////////////////////////////////
void thermostat() {
  now = millis();
  float tempPoint;
  float set_humidity;
  EEPROM_read_mem(1, &tempPoint, sizeof(tempPoint));
  EEPROM_read(1, tempPoint);
  EEPROM_read_mem(13, &set_humidity, sizeof(set_humidity));
  EEPROM_read(13, set_humidity);
  Setpoint = tempPoint;
  myPID.Compute();
  if (now - windowStartTime > WindowSize) { //время для перещелкивания периода окна
    windowStartTime = windowStartTime + WindowSize;
    //voltmeter();                        //запускаем функцию измерения напряжения
    Input = temp1Ink;
    lcd.setCursor(1, 0);                 // устанавливаем курсор в 0-ом столбце, 0 строка (начинается с 0)
    lcd.print("T1= ");
    lcd.print(temp1Ink, 1);              // печать температуры на дисплей
    lcd.print((char)223);
    lcd.print("  (");
    lcd.print(Setpoint, 1);
    lcd.print(")");
    lcd.setCursor(1, 1);
    lcd.print("T2= ");
    lcd.print(temp2Ink, 1);            // печать температуры на дисплей
    lcd.print((char)223);
    lcd.setCursor(11, 1);
    lcd.print(" (*");
    lcd.print(temp1Ink - temp2Ink, 1);
    lcd.print(") ");
    //lcd.print((char)223);
    //lcd.print("  (");
    //lcd.print(Setpoint, 1);
    //lcd.print(")");
    lcd.setCursor(1, 2);                 // устанавливаем курсор в 2-ом столбце, 3 строка (начинается с 0)
    lcd.print(" H= ");
    lcd.print(humidity, 1);           // печать влажности на дисплей
    lcd.print("%");
    lcd.print("  (");
    lcd.print(set_humidity, 1);
    lcd.print(")");
  }
  if (Output > (now - windowStartTime) && temp1Ink < 39.9) digitalWrite(heater_pin, HIGH);
  else digitalWrite(heater_pin, LOW);
}
 
 
//управляем влажностью/////////////////////////////////////////////////////////////////////////
void humidifer() {
  //float humidity;
  float set_humidity;
  //  if (curMillis - humMillis >= humStep) {
  //    humMillis = curMillis;
  //    //humidity = sht1x.readHumidity();
  //  }
  //EEPROM_read_mem(13, &set_humidity, sizeof(set_humidity));
  EEPROM_read(13, set_humidity);
  if (set_humidity > humidity) digitalWrite(humidifer_pin, HIGH); //сравниваем измеренную влажность с заданной
  if (set_humidity < humidity + h_histeresis) digitalWrite(humidifer_pin, LOW);
}
 
//////!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
void humidiferPulse() {
  float set_humidity;
  unsigned long currentTime;
  unsigned long waitPause;
  static unsigned long startTime; 
  int humPause = 600;
  //EEPROM_read(8, humPause);
  waitPause = humPause * 60000UL;
  int humWork = 2500;
  EEPROM_read_mem(13, &set_humidity, sizeof(set_humidity));
  EEPROM_read(13, set_humidity);
  currentTime = millis();
  Serial.println(currentTime - startTime);
  Serial.println(humWork);
  Serial.println(humPause);
  if (currentTime - startTime < humWork){
   if (set_humidity > humidity) digitalWrite(humidifer_pin, HIGH); //сравниваем измеренную влажность с заданной
  }
  else digitalWrite(humidifer_pin, LOW);
  if (currentTime - startTime > waitPause){
    startTime = currentTime;
  }
}
 
 
//управляем поворотом//////////////////////////////////////////////////////////////////////////
void turn() {
  int turnPeriod;                //период поворота лотков в часах
  int turnCommand;
  boolean turnFlag = 0;          // флаг поворота для случайного периода
  static unsigned long loopTime;
  EEPROM_read(11, turnPeriod);
  if (turnPeriod == 0) return;           //если нулевой период поворота, то не поворачиваем яйца.
  if (turnPeriod < 13) turnCommand = turnPeriod;
  else if (turnPeriod > 12 && turnFlag == 0) { //если произошел поворот (сброшен флаг) и значение в памяти 13, то
    turnCommand = random(1, 6);        //берем случайное значение часов 1-6
    turnFlag = 1;                     //защелкиваем флаг вычисления случайных значений до следующего поворота
  }
  currentTime = millis() / 1000;
  lcd.setCursor(10, 3);
  lcd.print("P");
  //Serial.println(currentTime);
  //Serial.println(loopTime + turnCommand * 3600UL);
  if (currentTime > (loopTime + turnCommand * 3600UL)) {  // 3600000 сравниваем текущий таймер с переменной loopTime + период поворота в часах.
    digitalWrite(turn_pin, !digitalRead(turn_pin));       // включаем/выключаем реле поворота
    loopTime = currentTime;    // в loopTime записываем новое значение
    turnFlag = 0;    //сбрасываем флаг поворота
  }
  lcd.print((loopTime - currentTime + turnCommand * 3600UL) / 60UL);
  lcd.print(" ");
}
 
 
//управляем авариями/////////////////////////////////////////////////////////////////////////////
void alarm() {
  float temp1Ink = sensors.getTempCByIndex(0);
  float alarmTemp;
  float setTemp;
  EEPROM_read(5, alarmTemp);
  EEPROM_read_mem(1, &setTemp, sizeof(setTemp));
  EEPROM_read(1, setTemp);
  lcd.setCursor(0, 3);
  lcd.print("A");
  lcd.print(setTemp + alarmTemp, 1);
  if ((millis() - alarmDelay) > 1800000) {
    if (temp1Ink > (setTemp + alarmTemp) || temp1Ink < (setTemp - alarmTemp)) {
      beeper(10);
      digitalWrite(alarm_pin, LOW); //если измеренная температура выше заданной на величину аварии
    }
    else digitalWrite(alarm_pin, HIGH); //то включаем аварийный сигнал.
  }
}
 
 
///пищим пищалкой ////////////////////////////////////////////////////////////////////////////
void beeper(int duration) {
  tone(beeper_pin, 2000, duration);
}
 
 
//управляем вентиляторами//////////////////////////////////////////////////////////////////////
void fan() {
  //float tempInk = sht1x.readTemperatureC();
  int fanTemp;
  EEPROM_read(9, fanTemp);
  lcd.setCursor(6, 3);
  lcd.print("F");
  lcd.print(fanTemp);
  if (temp1Ink > fanTemp) digitalWrite(fan_pin, LOW); //если измеренная температура выше заданной на величину аварии
  if (temp1Ink < fanTemp+1) digitalWrite(fan_pin, HIGH); //то включаем аварийный сигнал.
}
 
 
// вольтметр/////////////////////////////////////////////////////////////////////////////////////////
void voltmeter() {
  float outputValue = 0;
  outputValue = float(analogRead(voltmeter_pin)) / 63, 9;
  //if(outputValue < 4.5) beeper(50);
  //Serial.print("Voltage = " );
  //Serial.println(outputValue);
  lcd.setCursor(14, 3);
  lcd.print("V");
  lcd.print(outputValue, 1);
}
 
 
// Печать мощности нагрвателя///////////////////////////////////////////////////////////////////////
void outpuPower() {
  lcd.setCursor(15, 3);
  lcd.print("W");
  lcd.print(Output, 0);
  lcd.print(" ");
}
 
 
// управление дополнительным нагревателем на 8 ножке через блок реле.///////////
void ext_heater() {
  float tempInk = sensors.getTempCByIndex(0);
  float setTemp;
  EEPROM_read_mem(1, &setTemp, sizeof(setTemp));
  EEPROM_read(1, setTemp);
  if (tempInk < (setTemp - 3)) {
    digitalWrite(extend_heater_pin, LOW);
  }
  else digitalWrite(extend_heater_pin, HIGH);
#ifdef EXT_HEATING
  //digitalWrite(humidifer_pin, HIGH);
#endif
}
 
 
/********************************************
 * Обмен данными с Processing!
 ********************************************/
union {                // This Data structure lets
  byte asBytes[24];    // us take the byte array
  float asFloat[6];    // sent from processing and
}                      // easily convert it to a
foo;                   // float array
 
///////////////////////////////////////////////////////////////////////////////////////////////////
void SerialReceive() {
  // read the bytes sent from Processing
  int index = 0;
  byte Auto_Man = -1;
  byte Direct_Reverse = -1;
  while (Serial.available() && index < 26) {
 
    if (index == 0) Auto_Man = Serial.read();
    else if (index == 1) Direct_Reverse = Serial.read();
    else foo.asBytes[index - 2] = Serial.read();
    index++;
  }
 
  // if the information we got was in the correct format,
  // read it into the system
  if (index == 26  && (Auto_Man == 0 || Auto_Man == 1) && (Direct_Reverse == 0 || Direct_Reverse == 1))
  {
    Setpoint = double(foo.asFloat[0]);
    //Input=double(foo.asFloat[1]);       // * the user has the ability to send the
    //   value of "Input"  in most cases (as
    //   in this one) this is not needed.
    if (Auto_Man == 0)                    // * only change the output if we are in
    { //   manual mode.  otherwise we'll get an
      Output = double(foo.asFloat[2]);    //   output blip, then the controller will
    }                                     //   overwrite.
 
    double p, i, d;                       // * read in and set the controller tunings
    p = double(foo.asFloat[3]);           //
    i = double(foo.asFloat[4]);           //
    d = double(foo.asFloat[5]);           //
    myPID.SetTunings(p, i, d);            //
 
    if (Auto_Man == 0) myPID.SetMode(MANUAL); // * set the controller mode
    else myPID.SetMode(AUTOMATIC);             //
 
    if (Direct_Reverse == 0) myPID.SetControllerDirection(DIRECT); // * set the controller Direction
    else myPID.SetControllerDirection(REVERSE);          //
  }
  Serial.flush();                         // * clear any random data from the serial buffer
}
 
 
///////////////////////////////////////////////////////////////////////////////////////////////
void SerialSend() {
  Serial.print(millis() / 1000);
  Serial.print("PID ");
  Serial.print(Setpoint);
  Serial.print(" ");
  Serial.print(Input);
  Serial.print(" ");
  Serial.print(Output);
  Serial.print(" ");
  Serial.print(myPID.GetKp());
  Serial.print(" ");
  Serial.print(myPID.GetKi());
  Serial.print(" ");
  Serial.print(myPID.GetKd());
  Serial.print(" ");
  if (myPID.GetMode() == AUTOMATIC) Serial.print("Automatic");
  else Serial.print("Manual");
  Serial.print(" ");
  if (myPID.GetDirection() == DIRECT) Serial.println("Direct");
  else Serial.println("Reverse");
}
вот сообщения компилятора:
SimpleSmartInkubator (1).ino: In function 'void setup()':
SimpleSmartInkubator (1):62: error: redefinition of 'void setup()'
sketch_feb12a:1: error: 'void setup()' previously defined here
SimpleSmartInkubator (1).ino: In function 'void loop()':
SimpleSmartInkubator (1):121: error: redefinition of 'void loop()'
sketch_feb12a:6: error: 'void loop()' previously defined here
redefinition of 'void setup()'
 
 
SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

kdm1980  , это и дополнительно "свернуть код" , и "пронумеровать"
http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

kdm1980 пишет:

Хочу скомпилировать код примера но выскакивает ошибка компиляции, подскажите что может быть причиной.

 
Причина указана в ошибке.
pickuper220
Offline
Зарегистрирован: 09.07.2015

Хочу чтобы вы все знали! Освежили

Форум - это где...

1. Те кто не знает - задают вопросы;

2. Те кто знает - на них отвечает

Для чего это все?

1. Для того, чтобы другие люди, "прохожие" прочитали решение своей проблемы из уст более просвященных

2. Для того, чтобы другие люди увидели "А как бы сделали профи"

Что нельзя, категорически, тут делать? По соображениям здравого смысла.

1. Хламить темы лишней болтовней. Не знаешь - не умничай! Спроси себя: "А поможет ли моя реплика тем тысячам людей, что читают этот форум?" Нет? - Разрядись крикни это в открытое окно.

2. Нельзя думать, что ответ на твой вопрос лично твой. Озвученный тобою вопрос на формуме - больше не твой вопрос, а тысяч людей читателей. И, если ты выяснил сам для себя, то писать надо ответ самому себе. Я сделал 1. 2. 3. загрузил вот так вот так.

3. Умничать. Типа "я тут великий учитель". Это вы тут лохи, не можете догадаться, а это очевидные (для меня) вещи. И рассказывать не путь решения, а путь догадки. Мужик, блин, это форум, а не лекторий в институте, и ты обычный смертный, и не платят тебе за образование. Такие люди должны получать в морду сразу же, как только показались на горизонте. Бах бах.

Как надо писать? Желательно

1. Так, чтобы была хоть какая-то логическая структура. 1. Сделать это; 2. Сделать так-то; 3. Загрузить так-то;

2. А я вот делал вот так вот... Считаю это правильно

3. Проще выполнить вот так...

4. Ну или как-то в доступном ключе

pickuper220
Offline
Зарегистрирован: 09.07.2015

У меня такая же проблема:

1. Загрузил библиотеку DHT.h через Arduino IDE - скетч - загрузить библиотеку.

Скачивал библиотеку на страничке урока тут

2. Выбрал пример из этой библиотеки (ссылка на .ino)

Ошибка:

Не используется: C:\Program Files\Arduino\libraries\DHT
exit status 1
redefinition of 'DHT dht'
 
Что я делал?
1. Удалял библиотеку из директории и загружал опять через меню
2. Удалял библ. из директории и загружал напрямую копированием 
Нифига...
pickuper220
Offline
Зарегистрирован: 09.07.2015

Как я решил свою проблему?

Библиотека, которую я скачал (см. выше) со странички одного урока (примера) оказалась не пригодной (я так думаю). Она скачалась в .rar формате, я распаковал, сжал в .zip. Она не работала даже если сохранять файлы контента в папку DHT и эту папку в архив DHT., так и сразу при распаковке DHT.

Библиотеки из менеджера библиотек тоже не устанавливат библиотеку DHT by Adafruit. Ошибка скачивания по ссылке http://downloads.arduino.cc/github.com/adafruit...

Решение:

1. Удалил из всех дирректорий (в документах и в Program Files - Arduino) все библиотеки

2. Перезапустил IDE (хотя наверно, можно и без этого)

3. Скачал библиотеку напрямую отсюда  ( https://github.com/adafruit/DHT-sensor-library )

Заработало.

Разве что показывает влажность 740%, температуру 640'С... Но это уже другая история

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

pickuper220 пишет:

Хочу чтобы вы все знали! Освежили

Форум - это где...

1. Те кто не знает - задают вопросы;

2. Те кто знает - на них отвечает

1. Нет. Для это изобрели Гугль.

2. Нет, это тоже происходит в Гугле.

pickuper220 пишет:

Для чего это все?

1. Для того, чтобы другие люди, "прохожие" прочитали решение своей проблемы из уст более просвященных

2. Для того, чтобы другие люди увидели "А как бы сделали профи"

1. Нет. Люди должны сами искать решение своих проблем.

2. Нет, проблеммы "других" интересуют только их самих.

pickuper220 пишет:

Что нельзя, категорически, тут делать? По соображениям здравого смысла.

1. Хламить темы лишней болтовней. Не знаешь - не умничай! Спроси себя: "А поможет ли моя реплика тем тысячам людей, что читают этот форум?" Нет? - Разрядись крикни это в открытое окно.

2. Нельзя думать, что ответ на твой вопрос лично твой. Озвученный тобою вопрос на формуме - больше не твой вопрос, а тысяч людей читателей. И, если ты выяснил сам для себя, то писать надо ответ самому себе. Я сделал 1. 2. 3. загрузил вот так вот так.

3. Умничать. Типа "я тут великий учитель". Это вы тут лохи, не можете догадаться, а это очевидные (для меня) вещи. И рассказывать не путь решения, а путь догадки. Мужик, блин, это форум, а не лекторий в институте, и ты обычный смертный, и не платят тебе за образование. Такие люди должны получать в морду сразу же, как только показались на горизонте. Бах бах.

1. Нет, часто именно НУЖНО, вместо ответа объяснить спрашивающему, что он должен искать ответ сам, иначе плодим тупых, безответственных инфантилов.

2. Вообще чушь совковая, просто насрать, проблемы других это их проблемы. См. выше про инфантилов. Ты нужен только себе. Если думаешь иначе - велком в страну эльфов.

3. Именно НУЖНО давать не ответ, а способ его найти, "не рыбу, а удочку", иначе НИКАКОЙ пользы от форума не будет, а станем плодить тупых инфантилов. Пассаж про мурду - понравился. Ты папке своему так скажи, если тебя, вдруг(?), мамка с ним позкакомила.

[/quote]

Ну собственно все, что ты написал после этой точки просто нахер на форуме не нужно. Хочешь побыть клоуном - велком!

=================

ЕЩЕ РАЗ КАПСОМ, ДЛЯ ТУПЫХ:

Форум - для общения по интересам. Форум - не справочная и не для ответов на вопросы. Вот ты - попробуй стать кому-то интересным или проваливай.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

pickuper220 пишет:

Хочу чтобы вы все знали! Освежили

Форум - это где...

1. Те кто не знает - задают вопросы;

2. Те кто знает - на них отвечает

Для чего это все?

1. Для того, чтобы другие люди, "прохожие" прочитали решение своей проблемы из уст более просвященных

2. Для того, чтобы другие люди увидели "А как бы сделали профи"

Что нельзя, категорически, тут делать? По соображениям здравого смысла.

1. Хламить темы лишней болтовней. Не знаешь - не умничай! Спроси себя: "А поможет ли моя реплика тем тысячам людей, что читают этот форум?" Нет? - Разрядись крикни это в открытое окно.

2. Нельзя думать, что ответ на твой вопрос лично твой. Озвученный тобою вопрос на формуме - больше не твой вопрос, а тысяч людей читателей. И, если ты выяснил сам для себя, то писать надо ответ самому себе. Я сделал 1. 2. 3. загрузил вот так вот так.

3. Умничать. Типа "я тут великий учитель". Это вы тут лохи, не можете догадаться, а это очевидные (для меня) вещи. И рассказывать не путь решения, а путь догадки. Мужик, блин, это форум, а не лекторий в институте, и ты обычный смертный, и не платят тебе за образование. Такие люди должны получать в морду сразу же, как только показались на горизонте. Бах бах.

Как надо писать? Желательно

1. Так, чтобы была хоть какая-то логическая структура. 1. Сделать это; 2. Сделать так-то; 3. Загрузить так-то;

2. А я вот делал вот так вот... Считаю это правильно

3. Проще выполнить вот так...

4. Ну или как-то в доступном ключе

 

Дао Дэбилов. 

bwn
Offline
Зарегистрирован: 25.08.2014

pickuper220 пишет:

Хочу чтобы вы все знали! Освежили

Форум - это где...

1. Те кто не знает - задают вопросы;

2. Те кто знает - на них отвечает

Истинно, в целом здесь так и происходит, до появления очередного типажа: "Время, ценнейший невозобновляемый ресурс - быстро мне ответ без рассуждений"; "Код типовой, неработает, в примерах посмотрите"; "Схема простейшая, сами найдете","Мне решение не нравится, дайте другое", "Форум - место где все должны мне делать Ку, по два раза" и т.д. и т.п. После чего происходит переход в троллинг и здесь еще не все потеряно, если индивидуум осознает свои ошибки то скорее всего ему опять таки помогут, ну а когда начался базар из песочницы: "Вы, козлы, с вами не дружу", "Приходи морду набью", "Уроды тупые, ухожу", здесь уже без вариантов, будет и послан, и отправлен в разные интересные места, осуждаемые роскомпозором.
А в других сообществах разве не так? ИМХО.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

pickuper220 пишет:

Хочу чтобы вы все знали! Освежили

Форум - это где...

1. Те кто не знает - задают вопросы;

2. Те кто знает - на них отвечает

Для чего это все?

1. Для того, чтобы другие люди, "прохожие" прочитали решение своей проблемы из уст более просвященных

2. Для того, чтобы другие люди увидели "А как бы сделали профи"

Что нельзя, категорически, тут делать? По соображениям здравого смысла.

1. Хламить темы лишней болтовней. Не знаешь - не умничай! Спроси себя: "А поможет ли моя реплика тем тысячам людей, что читают этот форум?" Нет? - Разрядись крикни это в открытое окно.

2. Нельзя думать, что ответ на твой вопрос лично твой. Озвученный тобою вопрос на формуме - больше не твой вопрос, а тысяч людей читателей. И, если ты выяснил сам для себя, то писать надо ответ самому себе. Я сделал 1. 2. 3. загрузил вот так вот так.

3. Умничать. Типа "я тут великий учитель". Это вы тут лохи, не можете догадаться, а это очевидные (для меня) вещи. И рассказывать не путь решения, а путь догадки. Мужик, блин, это форум, а не лекторий в институте, и ты обычный смертный, и не платят тебе за образование. Такие люди должны получать в морду сразу же, как только показались на горизонте. Бах бах.

Как надо писать? Желательно

1. Так, чтобы была хоть какая-то логическая структура. 1. Сделать это; 2. Сделать так-то; 3. Загрузить так-то;

2. А я вот делал вот так вот... Считаю это правильно

3. Проще выполнить вот так...

4. Ну или как-то в доступном ключе

Ща, вам тут накидают .. :)

В целом, Вы правы, но местное сообщество не общается на серъезных профильных форумах типа Cyberforum и др. Им это всё НЕИЗВЕСТНО. Так шта .. хотите внятной помощи - ищите её НЕ ТУТ. Хотите потрындеть - Вам сюда. :)

P.S. Ага, дочитал .. опоздал, уже накидали. :)