не проходит компилирование
- Войдите на сайт для отправки комментариев
Пнд, 20/01/2014 - 23:40
сижу неделю и не могу продвинуться, хотел повторить Инкубатор под управлением Ардуино УНО, автор tamerlan37 . Но при компиляции программы зависаю на строке 15
DHTdht(DHTPIN, DHTTYPE); не могу понять в чем ошибка, пробовал и другие программы схожие, результат тот же.
int led2 = 4;// "таймер переворот"
int led3 = 2;// нагреватель
int led4 = 5;//туманогенератор
#include <DS1307RTC.h>
#include <Time.h>
#include <Wire.h>
#include <LiquidCrystal.h>
#include "DHT.h"
#define DHTPIN 3 // куда подключен термодатчик
#define DHTTYPE DHT11 // DHT 11 используемый термодатчик
//#define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal lcd(8, 9, 10, 11, 12, 13);
void setup() {
Serial.begin(9600);
dht.begin();
while (!Serial) ; // wait for serial
delay(200);
pinMode(led2, OUTPUT);// сигнал "таймер"
pinMode(led3, OUTPUT);// сигнал нагрева
pinMode(led4,OUTPUT);//сигнал туманогенератора
Serial.println("DS1307RTC Read Test");
Serial.println("-------------------");
lcd.begin(16, 2);
// печатаем первую строку
lcd.print("Inkubator" );
lcd.setCursor(1, 1);
delay(500);
// печатаем вторую строку
lcd.print("tamerlan-1");
delay(500);
}
void loop() {
float h = dht.readHumidity();//обозначение влажности
float t = dht.readTemperature(); //обозначение температуры
tmElements_t tm; //вывод на экран дата и влажность
{lcd.setCursor(0, 1);
print2digits(tm.Day);
lcd.write('/');
print2digits(tm.Month);
lcd.write('/');
lcd.print(tmYearToCalendar(tm.Year));
lcd.write('h');
print2digits (h);
lcd.write("*H ");
lcd.setCursor(0, 0);//вывод на экран время и температура
print2digits(tm.Hour);
lcd.write(':');
print2digits(tm.Minute);
lcd.write('`');
print2digits(tm.Second);
lcd.write('t');
print2digits (t);
lcd.write("*C ");
}
if (RTC.read(tm)) //информацыя в sereal monitor
{
Serial.print("Ok, Time = ");
Serial.print(tm.Hour);
Serial.write(':');
Serial.print(tm.Minute);
Serial.write(':');
Serial.print(tm.Second);
Serial.print(", Date (D/M/Y) = ");
Serial.print(tm.Day);
Serial.write('/');
Serial.print(tm.Month);
Serial.write('/');
Serial.print(tmYearToCalendar(tm.Year));
Serial.println();
} else {
if (RTC.chipPresent()) {
Serial.println("The DS1307 is stopped. Please run the SetTime");
Serial.println("example to initialize the time and begin running.");
Serial.println();
} else {
Serial.println("DS1307 read error! Please check the circuitry.");
Serial.println();
}
delay(900);
}
delay(500);
if ((tm.Second)>58) //условия таймера
{
digitalWrite(led2, HIGH);//включает таймер
Serial.print("Taimer On!! ");//вывод инфо состояния
lcd.setCursor(13, 0);//вывод инфо состояния на LCD
lcd.print("%");
}
else
{
digitalWrite(led2, LOW);
Serial.print("Taimer OFF");
}
if (t<17)//условия терморегуляции
{
digitalWrite(led3,HIGH);
Serial.print("Vkluchen nagrev!!");//вывод инфо состояния
lcd.setCursor(15, 0);
lcd.print("^");//вывод инфо состояния на LCD
//delay (500);
}
else
{ digitalWrite(led3,LOW);
Serial.print("Temp ok ");//вывод инфо состояния
lcd.setCursor(15, 0);
lcd.print("~");//вывод инфо на LCD
}
if (h<60)//условия терморегуляции
{
digitalWrite(led4,HIGH);
Serial.print("Vkluchen tuman!!");//вывод инфо состояния
lcd.setCursor(14, 0);
lcd.print("#");//вывод инфо состояния на LCD
//delay (500);
}
else
{ digitalWrite(led4,LOW);
Serial.print("Vlagnost ok ");//вывод инфо состояния
lcd.setCursor(14, 0);
lcd.print("~");//вывод инфо состояния
}
}
void print2digits(int number) {
if (number >= 0 && number < 10) {
lcd.write('0');
}
lcd.print(number);
}
А какая ошибка должны сами догадаться ?
sketch_jan21a:15: error: 'DHT11' was not declared in this scope
sketch_jan21a.ino: In function 'void setup()':
sketch_jan21a:20: error: 'class DHT' has no member named 'begin'
Вот что пишет Ардуино.
А где находятся файлы DHT.h и DHT.cpp?
В библиотеке в папке libraries, менял на другие скачивал с сайтов, распаковывал. пробовал по разному и указывал на архив. "добавить библиотеку" Вот и парюсь почему не идет.
Да там в ковычках
#include "DHT.h"я на это обратил внимание и стирал эту строку и добавлял из библиотеки DHT.h и 8 строка становилась c правильными скобками < > но результат тот же.Пробуйте отдельно пример работы с датчиком запустить.
Если уж пробуйте разные библиотеки,то учитывайте ,что они по разному настраиваются
Вот библиотека удобнее http://homes-smart.ru/upload/arduino/DHTAUTO.zip с автоматическим определением датчиков
попробовал поставить, проблема та же самая. Взял другую программу для пробы,тоже самое ругает строку №16 sketch_jan21a:16: error: 'DHT22' was not declared in this scope. вероятно копаю не там. Тест библиотеки примеры DHT_test нормально компилируеться.
#include <DHT.h> // Подключаем библиотеку для работы с датчиком #include <DS1307.h> // Подключаем библиотеку управления модулем реального времени #include <LiquidCrystalExt.h> // Подключаем библиотеку управления экраном #include <LineDriver.h> // Далее вспомогательные библиотеки для реализации интерфейса SPI #include <SPI.h> #include <SPI_Bus.h> #include <Wire.h> #define DHTPIN 9 // Считывающий пин с датчика #define DHTTYPE DHT22 // Модель датчика #define tPIN 7 // Пин управления температурой #define hPIN 6 // Пин управления влажностью #define lPIN 5 // Пин управления светом #define sdPIN 3 // Пин управления светодиодной лентой DHT dht(DHTPIN, DHTTYPE); // Создаем объект dht int tStatus = HIGH; // определяем переменную, отвечающую за состоянеие нагревателя HIGH=выкл, LOW=вкл int tempDay = 28; // Желаемая дневная температура в градусах Цельсия int tempNight = 25; // Желаемая ночная температура в градусах Цельсия int hStatus = HIGH; // определяем переменную, отвечающую за состоянеие увлажнителя HIGH=выкл, LOW=вкл int humDay = 45; // Желаемая дневная влажность int humNight = 40; // Желаемая ночная влажность SPI_Bus shreg(_8bit, 10); // Подключаем сдвиговый регистр LiquidCrystal lcd(1, 2, 3, 4, 5, 6, &shreg, 7); // Инициализируем дисплей void setup() // инициализация основных данных { Serial.begin(9600); // Инициализируем COM-порт dht.begin(); // Инициализируем датчик pinMode(tPIN, OUTPUT); // Определяем пин для управления температурой как Вывод pinMode(hPIN, OUTPUT); pinMode(lPIN, OUTPUT); lcd.begin(16,2); // устанавливаем размеры экрана //lcd.backlight(true); // Указываем использование подсветки экрана } void loop() // зацикливание (код управляющей программы) { if (Serial.available() > 0) SetTime(); // Если на COM-порт поступила информация, то изменим системное время float h = dht.readHumidity(); // Считываем влажность float t = dht.readTemperature(); // Считываем температуру int Hour = RTC.get(DS1307_HR,true); // Получаем значение текущего часа int Minute = RTC.get(DS1307_MIN,false); int Second = RTC.get(DS1307_SEC,false); boolean Day = (Hour >= 8 & Hour <20); // Если текущий час находится в промежутке от 8 до 20, то действуют дневные параметры tStatus = (t < ((Day) ? tempDay : tempNight)) ? LOW:HIGH; // Если температура меньше желаемой, то статус обогревателя=Вкл, в противном случае Выкл digitalWrite(tPIN, tStatus); if (h < ((Day) ? humDay : humNight)) hStatus = LOW; else hStatus = HIGH; // Если влажность меньше желаемой, то статус увлажнителя=Вкл, в противном случае Выкл digitalWrite(hPIN, hStatus); digitalWrite(lPIN, (Day) ? LOW:HIGH); // Если дневное время, то включим подсветку switch(Hour) // в зависимости от времени меняем яркость светодиодной ленты { case 7:analogWrite(sdPIN, map(Minute, 0, 59, 0, 255)); break; case 20:analogWrite(sdPIN, map(Minute, 0, 59, 255, 0)); break; default:analogWrite(sdPIN, (Day) ? 255:0); } lcd.setCursor(1,0); // устанавливаем позицию курсора на экране (на один символ правее левого верхнего угла) lcd.print(t, 1); lcd.print("C "); lcd.print(h, 1); lcd.print("% "); // Выводим информацию о климате lcd.setCursor(4,1); // устанавливаем курсор для вывода времени lcd.print(addZero(Hour));lcd.print(":");lcd.print(addZero(Minute));lcd.print(":");lcd.println(addZero(Second)+ " "); // Выводим время lcd.setCursor(1,1);lcd.print((tStatus == LOW) ? "+":" "); // Выводим индикатор работы подогрева lcd.setCursor(13,1);lcd.print((hStatus == LOW) ? "+":" "); // Выводим индикатор работы увлажнения delay(500); // Задержка в пол секунды } void SetTime() // установка времени из шаблона tчч:мм { if (Serial.read() == 't') // Если первый символ t, то установим указанное время { int h = (Serial.read() - '0') * 10 + (Serial.read() - '0'); Serial.read(); int m = (Serial.read() - '0') * 10 + (Serial.read() - '0'); RTC.stop(); RTC.set(DS1307_SEC,0); //set the seconds RTC.set(DS1307_MIN,m); //set the minutes RTC.set(DS1307_HR,h); //set the hours RTC.start(); } Serial.flush(); } String addZero(int val) { if (val<10) return "0" + String(val);else return String(val); }нашел другую библиотеку DHT и сдвинулось с места , уперся в строку DHT .begin(); напечатал маленькими буквами dht.begin(); и тут прошло. дальше голову ломаю.
нашел другую библиотеку DHT и сдвинулось с места , уперся в строку DHT .begin(); напечатал маленькими буквами dht.begin(); и тут прошло. дальше голову ломаю.
Программирование как головоломка, ничего не поделать...
Трудно на ощупь, когда образования не хватает, вот и парюсь. Буду дальше осваивать науку программирования. Чем больше понимаю, тем больше убеждаюсь , что ничего не понимаю!
Здравствуйте люди. Собираю светодиодный куб 4х4х4 на Arduino Nano. Файл программы написан на Си, скачан со страницы проекта куба. Пытаюсь компилировать его через WinAVR как в этой статье http://robocraft.ru/blog/arduino/116.html Пути прописал, но компиляция не проходит, видно на картинке. Может быть пути как то не так прописал..?
Скорей всего путь к файлу make.exe у Вас в переменной среды path отсутствует, потому при запуске make all, система сборки его не находит.
Помогите пожалуйста разобраться. Я не программист. Как было сказано выше собираю светодиодный куб.
Насчет прописывания путей к файлу make.exe: изначально у меня нету папки c:\utils\. Я прописал пути так
D:\Program Files\Arduino\hardware\tools\avr\utils\bin;
D:\Program Files\Arduino\hardware\tools\avr\bin;
D:\Program Files\Arduino\hardware\tools\avr\avr\bin
Компиляция прошла с множеством ошибок. Картинка.

В проекте WinAvr, а пути к ардуино компилятору. Нужно использовать winavr компилятор.
плохая идея от Microsoft
D:\Program Files\Arduino\hardware\tools\avr\utils\bin;
D:\Program Files\Arduino\hardware\tools\avr\bin;
D:\Program Files\Arduino\hardware\tools\avr\avr\bin
сколько копий об этот пробел в строке поломали
все грамотные разработчики мира правильно распологают с путями где нет запрещенных символов пробелы дебило знаки восклицания и остальная спец хрень управления, а только латиница и цифры
кроме того Java программисты не разрешают 1-ым символом писать цифры что очень логично
просто тупо скопируйте весь каталог arduino в корень
правильный путь такой
C:\Arduino\
и у вас 90% косяков с путями изчезнет
достаточно просто скопировать и работать от правильного корня
это не ваша и не ардуиноводов косяк это косяк от Microsoft
попрограммируете не только на Windows сразу будуте видеть
насколько я вижу вызов должен будет получиться у вас такой
d:\одна команда !!! передает результат Files\Arduino\...avr-gcc с ключами
дибилизм
ну и с явами надеюсь у вас от корня типа c:\jdk170
хотя вы мало дали информации
какая операционка
то что мелкомягкие компилятор arduino загнали в дурко путь это я вижу
с WinAVR-ом я тоже не помню проблем ставишь относительно корня и все
рабочие папки тоже не дебильные типа c:\document пробел and пробел
короче смотри правильный корень
плохая идея от Microsoft
D:\Program Files\Arduino\hardware\tools\avr\utils\bin;
думал, что это проблема времён windows 98 - с какого будуна у меня путь D:\Program Files mini\arduino-1.0.5 работает?
поделись, как добиться плохиг идей майкрософт?
плохая идея от Microsoft
D:\Program Files\Arduino\hardware\tools\avr\utils\bin;
думал, что это проблема времён windows 98 - с какого будуна у меня путь D:\Program Files mini\arduino-1.0.5 работает?
поделись, как добиться плохиг идей майкрософт?
попрограммируй на НЕ Windows поймешь почему у тебя работает
попрограммируй на НЕ Windows поймешь почему у тебя работает
на калькуляторе или на деревянных счётах?
о чём вообще речь?
на перфокартах
на перфокартах
на перфокартах
конечно когда диодные поля распаивали пробелов не было ведь
вот покажи где пробелы?
так и не понял, почему проблема винды проявляется на невинде.
так и не понял, почему проблема винды проявляется на невинде.
понятно
больше не наливаем
блин на Adruino Leonardo 3 ноги мертвые
греется как утуг
но компилируется
2 часа каждую ногу коротил и правил код
//art100 to write test pins int pinA0=A0; //int pinA1=A1;//bad //int pinA2=A2;//bad int pinA3=A3; int pinA4=A4; int pinA5=A5; int pin0=0; int pin1=1; //int pin2=2; //int pin3=3; //int pin4=4; //int pin5=5; //int pin6=6; //int pin7=7; //int pin8=8; //int pin9=9; //int pin10=10; //int pin11=11; //int pin12=12;//bad int led13=13; void setup() { pinMode(pinA0,INPUT_PULLUP); // pinMode(pinA1,INPUT_PULLUP);//bad // pinMode(pinA2,INPUT_PULLUP);//bad pinMode(pinA3,INPUT_PULLUP); pinMode(pinA4,INPUT_PULLUP); pinMode(pinA5,INPUT_PULLUP); pinMode(pin0, INPUT_PULLUP); pinMode(pin1, INPUT_PULLUP); // pinMode(pin2, INPUT_PULLUP); // pinMode(pin3, INPUT_PULLUP); // pinMode(pin4, INPUT_PULLUP); // pinMode(pin5, INPUT_PULLUP); // pinMode(pin6, INPUT_PULLUP); // pinMode(pin7, INPUT_PULLUP); // pinMode(pin8, INPUT_PULLUP); // pinMode(pin9, INPUT_PULLUP); // pinMode(pin10,INPUT_PULLUP); // pinMode(pin11,INPUT_PULLUP); // pinMode(pin12,INPUT_PULLUP); //bad pinMode(led13,OUTPUT); Serial.begin(9600); Mouse.begin();// initialize mouse control: Keyboard.begin(); } //====================================================================== void loop() { if (digitalRead(pinA0)==LOW){ digitalWrite(led13,HIGH); delay(100); digitalWrite(led13,LOW); } // if (digitalRead(pinA1)==LOW){ digitalWrite(led13,HIGH); delay(100); digitalWrite(led13,LOW); } // if (digitalRead(pinA2)==LOW){ digitalWrite(led13,HIGH); delay(100); digitalWrite(led13,LOW); } if (digitalRead(pinA3)==LOW){ digitalWrite(led13,HIGH); delay(100); digitalWrite(led13,LOW); } if (digitalRead(pinA4)==LOW){ digitalWrite(led13,HIGH); delay(100); digitalWrite(led13,LOW); } if (digitalRead(pinA5)==LOW){ digitalWrite(led13,HIGH); delay(100); digitalWrite(led13,LOW); } if (digitalRead(pin0 )==LOW){ digitalWrite(led13,HIGH); delay(100); digitalWrite(led13,LOW); } if (digitalRead(pin1 )==LOW){ digitalWrite(led13,HIGH); delay(100); digitalWrite(led13,LOW); } // if (digitalRead(pin2 )==LOW){ digitalWrite(led13,HIGH); delay(100); digitalWrite(led13 ,LOW); } // if (digitalRead(pin3 )==LOW){ digitalWrite(led13,HIGH); delay(100); digitalWrite(led13 ,LOW); } // if (digitalRead(pin4 )==LOW){ digitalWrite(led13,HIGH); delay(100); digitalWrite(led13,LOW); } // if (digitalRead(pin5 )==LOW){ digitalWrite(led13,HIGH); delay(100); digitalWrite(led13,LOW); } // if (digitalRead(pin6 )==LOW){ digitalWrite(led13,HIGH); delay(100); digitalWrite(led13,LOW); } // if (digitalRead(pin7 )==LOW){ digitalWrite(led13,HIGH); delay(100); digitalWrite(led13,LOW); } // if (digitalRead(pin8 )==LOW){ digitalWrite(led13,HIGH); delay(100); digitalWrite(led13,LOW); } // if (digitalRead(pin9 )==LOW){ digitalWrite(led13,HIGH); delay(100); digitalWrite(led13,LOW); } // if (digitalRead(pin10)==LOW){ digitalWrite(led13,HIGH); delay(100); digitalWrite(led13,LOW); } // if (digitalRead(pin11)==LOW){ digitalWrite(led13,HIGH); delay(100); digitalWrite(led13,LOW); } // if (digitalRead(pin12)==LOW){ digitalWrite(led13,HIGH); delay(100); digitalWrite(led13,LOW); } //if (Serial.available() > 0) {// use serial input to control the mouse: // char inChar = Serial.read(); // switch (inChar) { // case 'u': Mouse.move(0, -40);break; // move mouse up // case 'd': Mouse.move(0, 40); break;// move mouse down // case 'l': Mouse.move(-40, 0); break;// move mouse left // case 'r': Mouse.move(40, 0); break;// move mouse right // case 'm': Mouse.click(MOUSE_LEFT); break; }// perform mouse left click //} //if (digitalRead(upButton) == LOW) { digitalWrite(led13,HIGH); delay(100); digitalWrite(led13,LOW); }//Keyboard.write('u'); } //if (digitalRead(downButton) == LOW) { digitalWrite(led13,HIGH); delay(100); digitalWrite(led13,LOW); }//Keyboard.write('d'); } //if (digitalRead(leftButton) == LOW) { digitalWrite(led13,HIGH); delay(100); digitalWrite(led13,LOW); }//Keyboard.write('l'); } //if (digitalRead(rightButton) == LOW) { digitalWrite(led13,HIGH); delay(100); digitalWrite(led13,LOW); }//Keyboard.write('r'); } //if (digitalRead(mouseButton) == LOW) { digitalWrite(led13,HIGH); delay(100); digitalWrite(led13,LOW); }//Keyboard.write('m'); } delay(100); }но все компилируется
что я делаю не так?
но все компилируется
что я делаю не так?
странно это всё - если у автомобиля снять три колеса, то двигатель не заводится
Цитата: В проекте WinAvr, а пути к ардуино компилятору. Нужно использовать winavr компилятор.
Если можно, поподробнее опишите. Пытаюсь компилировать уже по-всякому. Не получается :(
Если можно, поподробнее опишите. Пытаюсь компилировать уже по-всякому. Не получается :(
WinAvr у меня отсутствует, ради этого ставить его никакого желания, потому как мне он не нужен.
Пропишите пути к компилятору WinAvr, а не к Ардуино. Это то Вы сможете. Смогли же к Ардуино прописать.
Благодарю, что подсказываете. Я попробовал прокомпилировать пробный файл (avrblink.c), как в статье. Всё удачно прошло, даже потом смог его залить в мк. Но вот с моим файлом беда. Компилятор ругается что нет файла Arduino.h, который включен в главном файле. Картинка.
Дайте ссылку на скетч для куба, иначе мы тут через полгода не закончим.
О да тут весело
рубка на паяльниках в самом разгаре
Дайте ссылку на скетч для куба, иначе мы тут через полгода не закончим.
http://www.masterkit.ru/main/set.php?code_id=1298517
Зачем Вам нужен WinAvr, всё прекрасно компилируется в ArduinoIDE. Далее в моих примерах, ArduinoIDE установлено в каталог D:\Programs\Arduino-1.0.5, у Вас это явно другой каталог, потому пути сообразите какие у Вас.
1. Я скачал библиотеку и разархивировал её каталог D:\Programs\Arduino-1.0.5\libraries\MP1051
2. Скачал примеры, разархивировал их в каталог D:\Programs\Arduino-1.0.5\libraries\MP1051\examples
3. Содержимое каталога D:\Programs\Arduino-1.0.5\libraries\MP1051
4. Содержимое каталога D:\Programs\Arduino-1.0.5\libraries\MP1051\examples
5. Запустил ArduinoIDE v1.0.5, выбрал в примерах STEP_1. Выбрал плату "Nano w/ 328"
6. Скомпилировал.
Хотите использовать WinAvr? Сначала на ArduinoIDE потренируйтесь, а потом перебирайтесь на WinAvr
Повторил на другом компе, у меня снова всё корректно компилируется. Выполнял точно так, как написал в сообщении #32
Повторил на другом компе, у меня снова всё корректно компилируется. Выполнял точно так, как написал в сообщении #32
Заработало!)) Смог таки наконец запрограммировать. Но наверное я как то не так это делаю, потому что сейчас работает только один эффект, на пульт не реагирует. Как правильно залить примеры?
Как правильно залить пример? Как обычный скетч.
Каждый пример - делает какое-то определенное действие, смотрите комментарии в скетчах.
Например, STEP_1:
Ну что за нафиг?? на step2 не хочет загружаться, при том что остальные примеры по отдельности нормально загружаются.
Вроде бы ясно написано, что setup и loop уже определены в step_1, Вы, не знаю как (копировали в один каталог что ли?) открыли два скетча одновременно, конечно будет дублирование