Вопрос новичка по выводу данных на дисплей TFT от различных датчиков.
- Войдите на сайт для отправки комментариев
Три недели назад начал осваивать arduino. До этого с программированием и с пайкой электроники не сталкивался, от слова вообще. Если по аппаратной части, в плане что с чем и зачем соединять и паять или какой резистор и зачем куда ставить гугл пока справляется с моими вопросами, то на программировании сел в калошу, гугл предлагает варианты из разряда "как нарисовать сову", а мне логику понять важно. В связи с этим есть несколько вопросов к знатокам.
Сечас есть arduino uno, несколько датчиков таких как DHT 22(темература + влажность), bmp180 (температура + давление), mq135 (что то по газам в воздухе), BH1750 (освещенность), GZN-15E(датчик звука), HC-SR04 (датчик растояния), и TFT дисплей 1,14' 124*124.
По отдельности на примерах и через монитор порта все датчики проверены и работают, дисплей тоже работает. Все жутко интересно. Решил собрать все датчики в кучу и вывести их все на дисплей, с разными визуализациями, ни ради какой то высокой цели, а ради освоения всего этого конструктора в целом, думаю если пойму логику то дальше раз плюнуть собрирать всякие интересные мне штуки, благо идей в голове хватает и есть уже понимание что ардуино с этим справится.
И вот возникли вопросы буквально на первых шагах.
1. Библиотеки. Я правильно понимаю что всякие ключевые слова для скетча заложенны именно в библиотеках? К примеру readTemperature при применении одной библиотеки совсем может не сработать с другой библиотекой для такого же датчика?
2. Чем отличаются порты arduino аналоговые от цифровых, и чем отличаются порты со знаком "~" на плате от таких же цифровых без этого знака? Либо где про это почитать?
3. Порты приема данных можно задавать как в библиотех так и в самом скетче даже если они противаречат друг другу(приоритет за скетчем)?
4. Чем просматривать в удобоваримом варианте библиотеки? ибо в блокноте это: http://prntscr.com/eoaa1n а хотелось бы в более читабельном виде http://prntscr.com/eoaa8v компилятор не открывает файлы библиотеки.
5. Какой принцип перевода аналоговых данных в цифровые(пример датчик газов MQ1135)
// Считываем значение //и переводим результат в восьмибитное число int sensor = map(analogRead(A0),0,1023,0,255);
6. Есть скетч сделанный по принципу Ctrl+C Ctrl+V(добавлены библиотеки, куски других скетчей) но без понимания логики:
#include <TFT.h> #include <SPI.h> #include "DHT.h" #define DHTPIN 2 #define cs 10 #define dc 8 #define rst 9 #define DHTTYPE DHT22 // DHT 22 (AM2302) DHT dht(DHTPIN, DHTTYPE); TFT TFTscreen = TFT(cs, dc, rst); // Определяем массив символов, который будет использоваться //для вывода показаний char sensorPrintout[4]; //основной код программы void setup() { // Запускаем наш дисплей TFTscreen.begin(); dht.begin(); // очищаем дисплей TFTscreen.background(0, 0, 0); // Напишем статичный текст // Установим его цвет TFTscreen.stroke(153, 146, 10); // Установим шрифт текста TFTscreen.setTextSize(1); // Рисуем текст в верхнем левом углу TFTscreen.text(" Sensor Value :\n ", 5, 5); // устанавливаем размер текста,здесь //так как выполнение данной команды //занимает много процессорного времени TFTscreen.setTextSize(1); } //Основной код программы void loop() { // Считываем значение //и переводим результат в восьмибитное число int sensor = map(analogRead(A0),0,1023,0,255); //объявляем новую переменную типа string // и присваиваем ей значение с помощью функции String() String sensorVal = String (sensor); // преобразуем полученную строку в массив символов sensorVal.toCharArray(sensorPrintout, 4); // установим цвет шрифта TFTscreen.stroke(255, 255, 255); // отобразим полученное значение на экране TFTscreen.text(sensorPrintout, 4, 20); // сделаем небольшую задержку delay(250); float h = dht.readHumidity(); float t = dht.readTemperature(); TFTscreen.setCursor(10, 40); TFTscreen.print("Temp:"); TFTscreen.setCursor(40, 40); TFTscreen.print(t); TFTscreen.setCursor(10, 60); TFTscreen.print("Vlajn:"); TFTscreen.setCursor(40, 60); TFTscreen.print(h); delay(250); TFTscreen.stroke(0, 0, 0); TFTscreen.text(sensorPrintout, 4, 20); // сотрем написанный текст перед новой интерацией }
Не могу по этому скетчу сделать очистку показаний температуры и влажности перед записью новых(на экране накладываются записи одна на другую и все сливается в кучу), строки 74 и 75 делают стирание только для 56 строки. Как сделать очистку для остальных?
Настоятельно рекомендуется вам пройти сюда.
И почитать книжки по ссылкам из этой темы.
Большинство вопросов отсеется.
На вопрос 4 - скачайте PSPad или Notepad++, там всё корректно и с подсветкой синтаксиса.
Пока не поможет мне эта информация, слишком обширно. Эти книги(скачаны) и команды я изучаю но пока последовательно, с чем сталкиваюсь что могу найти то и изучаю. Мне бы конкретные ответы как для пункта 4 получить по остальным вопросам, что бы дальше логическую линию построить в голове.
Для меня это сейчас выглядит как если бы вы сейчас к врачу пришли мол что то болит в боку, а в ответ вам мол вот 2 тома биологии и медицинская энциклопедия на 1000 страниц, прочитаете и многие вопросы отпадут. Да отпадут через год но сейчас вообще не разбираясь в этом от них толку мало.
Вот и у меня так, на практике что то делая начинаю понимать логику и принципы, и срочно понадобились крупинки информации что бы двинуться дальше.
Мне бы конкретные ответы как для пункта 4 получить по остальным вопросам, что бы дальше логическую линию построить в голове.
если задал этот вопрос
4. Чем просматривать в удобоваримом варианте библиотеки? ибо в блокноте это: http://prntscr.com/eoaa1n а хотелось бы в более читабельном виде http://prntscr.com/eoaa8v компилятор не открывает файлы библиотеки.
то тебе не программирование нужно изучать, а азы работы с компьютером для человека, впервые увидевшего компьютер.
*чем ты занимался последние 20 лет, даже знать не желаю.
Решил собрать все датчики в кучу и вывести их все на дисплей, с разными визуализациями, ни ради какой то высокой цели, а ради освоения всего этого конструктора в целом, думаю если пойму логику то дальше раз плюнуть собрирать всякие интересные мне штуки, благо идей в голове хватает и есть уже понимание что ардуино с этим справится.
Боюсь, умение правильно размещать вещи в багажнике автомобиля никак не продвинет Вас к умению водить автомобиль.
И вот возникли вопросы буквально на первых шагах.
1. Библиотеки. Я правильно понимаю что всякие ключевые слова для скетча заложенны именно в библиотеках? К примеру readTemperature при применении одной библиотеки совсем может не сработать с другой библиотекой для такого же датчика?
Понимаете неправильно. Неправильно понимаете даже термин "ключевые слова". Чтобы понять, что находится в библиотеках, Вам нужно иметь представление о структуре программы.
2. Чем отличаются порты arduino аналоговые от цифровых, и чем отличаются порты со знаком "~" на плате от таких же цифровых без этого знака? Либо где про это почитать?
По большому счету ничем. Просто в качестве дополнительной функции могут использоваться для аналого-цифрового преобразования поданного на них напряжения. Порты со знаком "~" имеют дополнительную функцию в виде возможности получать на них ШИМ сигнал.
3. Порты приема данных можно задавать как в библиотех так и в самом скетче даже если они противаречат друг другу(приоритет за скетчем)?
На этот вопрос нет единого ответа. Разные порты Ардуино имеют различные дополнительные функции. Соответственно, в зависимости от того, какая функция портов нам нужно, мы можем выбирать только из тех, что поддерживают данную функцию. Т.е. где-то взаимозаменяемость полная, где-то частичная, а где-то ее совсем нет.
4. Чем просматривать в удобоваримом варианте библиотеки? ибо в блокноте это: http://prntscr.com/eoaa1n а хотелось бы в более читабельном виде http://prntscr.com/eoaa8v компилятор не открывает файлы библиотеки.
Если это исходноки библиотек - любым текстовым редактором. Если уже откомпилированный код - то практически никак.
5. Какой принцип перевода аналоговых данных в цифровые(пример датчик газов MQ1135)
Принцип перевода Вас волновать не должен - он заложен в конструкции АЦП.
6. Есть скетч сделанный по принципу Ctrl+C Ctrl+V(добавлены библиотеки, куски других скетчей) но без понимания логики:
Не могу по этому скетчу сделать...
Это вполне естественно.
Начните лучше с тех скетчей, которые Вы понимаете.
Боюсь, умение правильно размещать вещи в багажнике автомобиля никак не продвинет Вас к умению водить автомобиль.
Согласен. Но пока так))
6. Есть скетч сделанный по принципу Ctrl+C Ctrl+V(добавлены библиотеки, куски других скетчей) но без понимания логики:
Не могу по этому скетчу сделать...
Это вполне естественно.
Начните лучше с тех скетчей, которые Вы понимаете.
[/quote]
Да вроде наигрался с понятными скетчами, и вентилятор запускать при при определенной тмпературе, и увлажнитель включать при определенной влажности, и лампочку если кто то бродит в районе датчика. Решил вот еще и показания на экран выводить и застопорился((
Теперь попонятней где копать на счет пробелов в знаниях по некоторым вопросам.
Немного не укладывается пока в голове почему при использовании одной библиотеки для вывода на экран readTemperature работает а при другой библиотеке для этого же экрана readTemperature выдает ошибку? Ссылки на библиотеки не могу дать, качал какие то, какие то стояли значально, уже не помню. Можете дописать мой скетч чтобы показания на экране обновлялись, а я уже сам дойду куда дальше копать?
Теперь попонятней где копать на счет пробелов в знаниях по некоторым вопросам.
наша песня хороша - начинай сначала
Мне бы конкретные ответы как для пункта 4 получить по остальным вопросам, что бы дальше логическую линию построить в голове.
если задал этот вопрос
4. Чем просматривать в удобоваримом варианте библиотеки? ибо в блокноте это: http://prntscr.com/eoaa1n а хотелось бы в более читабельном виде http://prntscr.com/eoaa8v компилятор не открывает файлы библиотеки.
то тебе не программирование нужно изучать, а азы работы с компьютером для человека, впервые увидевшего компьютер.
*чем ты занимался последние 20 лет, даже знать не желаю.
При чем тут этот наезд не понял если честно. Последние 27 лет учился людей чинить, там другие языки программирования уж извините.
Теперь попонятней где копать на счет пробелов в знаниях по некоторым вопросам.
наша песня хороша - начинай сначала
Скетч можете дописать мне из 6-го вопроса? Или и дальше меня опускать продолжите?
Скетч можете дописать мне из 6-го вопроса? Или и дальше меня опускать продолжите?
Нельзя объять необъятное, познать непознаваемое и впихать невпихуемое. Ввиду отсутствия подобного дисплея и как следствие библиотеки для него, могу помочь только советом:
Выбрасываете, для начала, все свои датчики и оставляете только дисплей. Открываете примеры из библиотеки и начинаете в них разбираться (как вывести точку, линию, символ, значение переменной, как вывести это все в нужную вам позицию, как очистить экран целиком или только требуемое знакоместо). После постижения истины в работе с экраном, можете начинать подключать датчики, проводя с ними аналогичные опыты. Пройдя этот путь, у вас не будут уже возникать вопросы, как работать с экраном или датчиком. Освободившееся в голове ресурсы можно будет направить на составление алгоритма готовой хотелки и разрешение новых вопросов. ИМХО.
Скетч можете дописать мне из 6-го вопроса? Или и дальше меня опускать продолжите?
сабж же был об изучении С++ за полгода - когда концепция хотелок успела кардинально измениться?
До чего смог докапаться за сутки с помощью форумчан
1. Библиотеки все же задают "ключевые слова", они же для меня на данный момент равнялись функциям, хотя это и режет наверное слух рабирающимся людям, но все же для меня большой шаг вперед.
2. Вопрос 2 пока не до конца освоен, где копать понятно, пока снимается((
3. вопрос 3 пока тоже не до конца разобрался в библиотеках не нашел где порты задаются. Искал в *.h и в *.cpp, может не там ищу хотелось бы понять.
4. Вопрос №4 снялся сразу программулиной notepad++
5. Пока ступор но чую разгадка где то рядом.
6. Изучив библиотеку экрана( смог таки доделать скетч путем тупой заливки строки цветом фона и выводом показаний датчиков на новый фон). Вопрос снят.
Осталась на данный момент тайна по вопросу №5 вывел на экран показания но в формате "текста" через String, хочется как то преобразовать эти данные в цифровые что бы выполнять математические манипуляции с ними. Не могу понять логику, ведь в монитор порта выводятся цифры, данные получаются тоже в цифирях, хоть и представляются они текстом, может быть есть какоето уравнение по переводу текста в цифирь, или все таки искать по датчику данные по переводу вольтажа на выходе в цифры?
И почему тогда без вывода на экран работает структура:
Ведь если давать условия if и else датчик аналоговый делает вполне себе математичские вычисления. Попытка после вычисления задать значение типа int или float выдает на экран значения типа булево...
Для датчика BMP180 использую библиотеку http://iarduino.ru/file/227.html
String то я от него принять могу в цифру как это организовать?
Для экрана 1,44 TFT использую библиотеки https://github.com/adafruit/Adafruit-ST7735-Library
и https://github.com/adafruit/Adafruit-GFX-Library
Скетч можете дописать мне из 6-го вопроса? Или и дальше меня опускать продолжите?
сабж же был об изучении С++ за полгода - когда концепция хотелок успела кардинально измениться?
Сабж был задать мне направления где копать инфу по моим вопросам а не об изучении с++ за пол года. Понятно что направление вы мне задаете на три буквы довольно так иупорно, но уж очень профессиональным языком, а я его понять пока не могу, хотя и чувствую что куда то туда, поэтому пока аргументировано ответить не могу))
Смогли бы Вас за полгода научить чинить людей? Да еще и без книжек...
MegaUser, может конечно подтупливаю, но откуда в BMP-шных библиотеках стринги появились. В тех, что попадались, это обычные числовые переменные. Вы кажется не там аппендицит ищите (там гланды).))))
Немного не укладывается пока в голове почему при использовании одной библиотеки для вывода на экран readTemperature работает а при другой библиотеке для этого же экрана readTemperature выдает ошибку?
У контроллера весьма ограниченные ресурсы: постоянная и оперативная память, таймеры, порты ввода/вывода, etc.
Каждая библиотека или датчик претендуют на какие-то ресурсы. Если их претегзии не пересекаются, обычно скетч работает. А если пересекаются - возникают конфликры, которые, как правило, приводят к неработоспостбности.
Чтобы избегать таких ситуацию нужно:
- знать архитектуру контроллера, какими ресурсами он обладает,
- знать какие библиотеки используют какие ресурсы.
Ну и желательно уметь устранять конфликты между библиотеками.