DHT11 не компилируется скетч
- Войдите на сайт для отправки комментариев
Пт, 27/01/2017 - 15:44
Подскажите, пожалуста, что не так? стоит раскоментировать строчку 98 или 99 выдает ошибку
"collect2.exe: error: ld returned 5 exit status", типовой пример компилируется и работает, Ардуино нано 328 с загрузчиком optiboot, IDE 1.6.13
#include <avr/wdt.h> #include <EEPROM.h> #include "DHT.h" #include <OneWire.h> OneWire ds(7); #define START_CONVERT 0 #define READ_TEMP 1 #include "DHT.h" #define DHTPIN 11 // what digital pin we're connected to #define DHTTYPE DHT11 // DHT 11 DHT dht(DHTPIN, DHTTYPE); //номера выводов кнопок #define BUTTON1 3 #define BUTTON2 4 #define BUTTON3 5 //int counter=0;//для проверки вачдога volatile uint8_t minut=0; volatile uint8_t chas=0; volatile uint8_t sec=0; volatile uint8_t den=0; //int i; //int old_sec=0; int temp=0; // температура Далласа float temp2=0; // температура DHT float hum=0; void readSet(){ den=EEPROM.read(0); chas=EEPROM.read(1); minut=EEPROM.read(2); sec=EEPROM.read(100); if (den>31){ den=0; // } if (chas>24){ chas=0; // } if (minut>60){ minut=0; // } } void setup(){ wdt_disable(); // запретили как можно скорее собаку, что-бы не уйти в бесконечный ребут Serial.begin(9600); readSet(); dht.begin(); //для проверки вачдога // Serial.println("Starting..."); // delay(1000); // что-бы четче видеть рестар скетча //для проверки вачдога //базовые настройки часов TCCR1A=(1<<WGM11); //режим14 FAST PWM TCCR1B=(1<<CS12)|(1<<WGM13)|(1<<WGM12); //делить частоту CPU на 256 ICR1=62499; // (16000000MHz /div256) -1 = 1 раз в секунду TIMSK1=(1<<TOIE1); //разрешить прерывание tempProcess(START_CONVERT);//конвентируем dallas wdt_enable(WDTO_8S); // активировали таймер, каждые 8 секунд его нужно сбрасывать } ISR (TIMER1_OVF_vect) { sec++ ; //инкремент переменной каждую секунду temp= tempProcess(READ_TEMP);//читаем темпратуру с далласа tempProcess(START_CONVERT); // сразу запрос на конвертацию if (sec>59){sec=0; minut++; } if (minut>59){minut=0; chas++; EEPROM.write(1, chas);} // при записи каждый час хватит памяти на 11 лет if (chas>23){chas=0;den++; EEPROM.write(0, den);}// но нам главное знать день инкубации if (den>30){den=0; } // частный случай для нас не принципиальный, у нас день инкубации } void loop(){ wdt_reset(); // говорим собаке что "В Багдаде все спокойно", начинается очередной отсчет 8-х секунд. //if (sec ==old_sec){i++;} //else {i=0; old_sec=sec;} delay(2000); // Reading temperature or humidity takes about 250 milliseconds! // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor) // hum = dht.readHumidity(); // temp2 = dht.readTemperature(); // if (isnan(h) || isnan(t)) { // Serial.println("Failed to read from DHT sensor!"); // return; // } // Serial.print("Temperature2 = "); // // Serial.print(temp); //если в целых *С // Serial.print(t);// Serial.print(",");Serial.print(temp%10);//если в десятых *C // Serial.println(" *C"); Serial.print("Humidity = "); Serial.print(hum);// Serial.print(",");Serial.print(temp%10);//если в десятых *C Serial.println(" %"); // delay(1000);//только для примера Serial.print("Temperature = "); // Serial.print(temp); //если в целых *С Serial.print(temp/10); Serial.print(",");Serial.print(temp%10);//если в десятых *C Serial.println(" *C"); Serial.write("Day="); Serial.print(den); Serial.write(' '); Serial.print(chas); Serial.write(':'); Serial.print(minut); Serial.write(':'); Serial.print(sec); //Serial.write(" i="); //Serial.print(i); Serial.println(); //для проверки вачдога // Serial.println(counter); // Это проверка вачдога // counter++; // // if(counter==9){ // Serial.println("visim...."); // // while(true){} // создаем зависание, через 8 секунды должен произойти ресет, так как не вызывается wdt_reset(); // } // delay(500); //для проверки вачдога } //============================== int tempProcess(boolean ch){ int t=0; if(!ch){ ds.reset(); ds.write(0xCC); ds.write(0x44); } else{ ds.reset(); ds.write(0xCC); ds.write(0xBE); t= ds.read(); t = t | (ds.read()<<8); //return t>>4;//целые *C, десятые отброшены //return (t+8)>>4;//целые *С с округлением return (t*10)>>4;//целое в десятых *C (214=>21,4*C) } } // чтение int EEPROM_int_read(int addr) { byte raw[2]; for(byte i = 0; i < 2; i++) raw[i] = EEPROM.read(addr+i); int &num = (int&)raw; return num; } // запись void EEPROM_int_write(int addr, int num) { byte raw[2]; (int&)raw = num; for(byte i = 0; i < 2; i++) EEPROM.write(addr+i, raw[i]); } //пример int //// запись //EEPROM_int_write(12, 1000); // адрес 12 (+2 байта) //EEPROM_int_write(14, 2000); // адрес 14 (+2 байта) //EEPROM_int_write(16, 3000); // адрес 16 (+2 байта) //// чтение //int d = EEPROM_int_read(12); //int e = EEPROM_int_read(14); //int f = EEPROM_int_read(16);
Проблема с Arduino IDE, точнее с линковщиком. Уже не раз обсуждалась.
https://www.google.com/search?q=collect2.exe%3A+error%3A+ld+returned+5+e...
Проблема с Arduino IDE, точнее с линковщиком. Уже не раз обсуждалась.
https://www.google.com/search?q=collect2.exe%3A+error%3A+ld+returned+5+e...
Спасибо, конечно, но гуглом я пользоваться умею... там уже глядел, попробовал на других IDE 1.6.5, 1.6.12 и почему тут же этот пример компилируется?
Попробуйте заменить ld.exe, как там советуют.
Спасибо, скомпилировалось на IDE 1.0.5-r2