Новички просят помощи у профессуры
- Войдите на сайт для отправки комментариев
Пт, 21/11/2014 - 16:19
Подключаю BMP 085, LCD 1602 к MEGA 2560. Задал вопрос на этом форуме в теме: "Помогите составить скетчик" Мне указали на выход и я создал новую тему. На авторство этой темы не претендую. Все, кому это необходимо - пусть ей пользуются. Никто не может никого от сюда прогнать!
Ну а теперь по существу:
Просил помочь отредактировать код по подключению BMP 085. LCD 1602 к мега 2560, Но справился сам.
Мне помог код http://bashlaev.ru/?p=141 , я убрал все лишнее - в итоге получил рабочий код для
BMP 085+LCD1602. Мне помогло то, что на каждой строчке программы есть комментарий.
#include <LiquidCrystal.h> // Подключаем стандартную библиотеку LiquidCrystal
#include <Wire.h>
#include <BMP085.h> // Библиотека для работы с датчиком BMP085
// Инициализируем объект-экран, определяем пины для работы с экраном
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
BMP085 dps = BMP085();
long Temperature085 = 0, Pressure085 = 0, Altitude085 = 0;
void setup()
{
lcd.begin(16, 2);
// устанавливаем размер (количество столбцов и строк) экрана
Serial.begin(9600);
// старт работы серийного порта
lcd.clear();
// очищаем дисплей
Serial.println("start");
// пишем в серийном порту «start»
Wire.begin();
delay(1000);
// ожидание 1 секунда
dps.init();
}
void loop ()
{
dps.getTemperature(&Temperature085);
dps.getPressure (&Pressure085);
lcd.setCursor(0, 0);
// устанавливаем курсор в колонку 0 строка 0
lcd.print("mm=");
// пишем «mm=»
lcd.print(Pressure085/133);
// показания давления с датчика
lcd.setCursor(0, 1);
// устанавливаем курсор в колонку 0 строка 1
lcd.print("t=");
// пишем «t=»
lcd.print(Temperature085*0.1);
// показания температуры с датчика BMP085
delay(1000);
}
Всем удачи!
А зачем в порт ещё посылаешь, проверяешь работу?
Если тебе это не надо, то строку 17 и 22 можно убрать. Градусы можно выводить кратными 0,1, от это можно избавиться от четырёхбайтной long и остановиться на двухбайтной int. К томуж там же (в строке 10) ты обьявляешь третью переменную такого же типа. Зачем?
На самом деле я не работал с библиотекой BMP 085, но думаю там есть сэмплы. На будущее... Сначала подключаешь дисплей и пробуешь управлять только им, после того как освоил и понал что к чему, подключаешь к дуине датчики и посылаешь в порт данные... разобрался что и как, вот тогда и совмещай.
И ненадо ни на кого дуться, никто тебя не посылал.
Насчет строки 17 - пока не догнал , почему она не нужна. Строку 22 действительно оставил для контроля в плане ( если на дисплее ничего нет, а в порту - START. значит косяк в подключении дисплея.) Ну а строка 10 - да, там 3 переменная (высота над уровнем моря) эта величина мне не нужна. Хотя попробую вывести на дисплей (в качестве обучения) Разницу между long и ink пока не понял. Если не затруднит, то напиши альтернативный код.
Ну и насчет обид - поверь мне я ни на кого не дуюсь ( возраст не тот) А осваиваю Арддуино для изучения серьезного проекта
(проект создан не мной) я хочу его внедрить у себя, а точнее адаптировать для местности где я живу. Впереди много работы.
Спасибо за комментарий.
Ну тогда первое и, наверное, самое правельное это поднятся вверх этой страници, нажать ссылку Программирвание и подробно рассмотреть: Справочник языка Ардуино.
Согласен. Чем и занимаюсь в свободное время.
шото я не въехал - в чём вопрос заключался?
Как ты обычно говоришь!? "Здаётся мне, что это не конец, а только начало". Ну так вот и я так думаю.
https://github.com/adafruit/Adafruit-BMP085-Library это раз.
И по поводу кода.
Форматируй все числа перед выводом. Если сначала было например 10 градусов, а потом будет 9, то на экране будет 90.
Зачем 25-я строка?
Спасибо.
Я так понял эта тема для всех вопросов новичков, чтоб не было засилья новых веток.
Задание сделующее: есть 7 светодиодов. Надо сделать так, чтобы они включались в такой последовательности - 123,234,345,456,567,654,543,432,321 и так далее. Нашёл похожий код, но там просто светодиоды бесконечно включаются поочереди от первого до седьмого.
// the setup routine runs once when you press reset: void setup() { // initialize the digital pin as an output. pinMode(0, OUTPUT); pinMode(1, OUTPUT); pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); } int led =0; // the loop routine runs over and over again forever: void loop() { for(int i=0; i<7;i++) { if(i==led) { digitalWrite(i,HIGH); } else { digitalWrite(i,LOW); } } led++; if (led > 6) led = 0; delay(1000); // wait for a second }З.Ы. Программирование у меня на уровне новорождённого.
void setup() { DDRD = 127; PORTD = 7; } void loop() { delay(1000); PORTD = ((PORTD&64)/64)+(PORTD << 1); }з.ы. Для UNO. Светодиоды висят на портах 0 до 6.
З.Ы. Программирование у меня на уровне новорождённого.
без комментов не разберётся
Упс. Не внимательно прочел условие. Так будет ближе к истине:
boolean i = true; //направление движения void setup() { DDRD = B1111111; //Переключаем пины от 0 до 6 на выход PORTD = B0000111; //Устанавливаем пины от 0 до 2 в HIGH } void loop(){ delay(1000);//ждем секунду if(i) PORTD <<= 1; else PORTD >>= 1; //двигаем в зависимости от направления if((PORTD == B1110000) || (PORTD == B0000111)) i=!i; //если огоньки достигли края меняем направление на противоположное }Весьма интересный способ. Но я не смогу такое объяснить преподавателю. Можно это как-то реализовать через циклы и ифы?
Вспомнился фильм "Приключения Электроника" и решение задачи через "интрегал".
Ты пытаешься объяснить преподавателю таблицу уиножения, при том что не знаешь таблици сложения.
Была поставлена задача, тебе написали готовый и МАКСИМАЛЬНО ПРОСЬТОЙ код, раскоментировали его...
Давай так: показываешь мне своего профессора, я даю ему сто баксов, он ставит тебе пять за семестр и все про всё забывают. Ты про предмет и про форум, проффесор про тебя и про светодиоды, я про сто баксов.
Есть десятки способов воплотить твою идею, но разочарование в том, что это тебе и нафиг не надо.
Что именно ты не смог пояснить?
boolean i = true; //направление движения void setup() { DDRD = B1111111; //Переключаем пины от 0 до 6 на выход PORTD = B0000111; //Устанавливаем пины от 0 до 2 в HIGH } void loop(){ delay(1000);//ждем секунду if(i) PORTD «= 1; else PORTD »= 1; //двигаем в зависимости от направления if((PORTD == B1110000) || (PORTD == B0000111)) i=!i; //если огоньки достигли края меняем направление на противоположное }Что такое DDRD? Что такое PORTD? B1111111 - это такой стандартный синтактический оборот, или вместо B можно написать A и результат будет совсем другой? Никогда не встречал доселе "<<=", ">>=". Зачем в десятой строке между скобками стоит "||"?
Извините, если раздражаю своей глупостью, знаю как это неприятно. Я бы хотел уметь делать что-то подобное, но как только я начинаю пытаться что-то писать у меня происходит ступор. Не понимаю как правильно написать то, что у меня в голове. На младших курсах кое-как информатику сдал, а теперь вот это...
DDRD это регистр направления передачи данных порта D
PORTD это регистр значений порта D
Порт D это выводы от 0 до 7 ардуино UNO (по биту на каждый вывод)
B1111111 это число 127 записаное в двоичном виде
<< и >> это побитовый сдвиг x << = 1 эквивалентно x = x << 1 (синтаксис Си)
|| это оператор ИЛИ
Учиться не пробовали? Зачем Вам вообще контроллер программировать? Возьмите какой-нибудь бейсик или ещё лучше выучите Си.