У вас же там исполнитель какой-то есть... Сделает вашу задачу - посмотрите в чем ошибка была.
Есть. Но хочется же самому научиться, чтобы людей не дергать.
Мне прям реально хочется этому научиться. Вот такой метод изучения, как вы все мне сейчас помогаете, лучше мной усваивается. Вы говорите куда и что вставлять, я вставляю. Как все заработает, я уже детально начну изучать. Потом попробую тоже самое сделать с другим модулем.
Извините, но меня надо носом тыкать и разжевывать, пока я не решу поставленную задачу. После будет легче.
Да уже гаркни на нее что есть мочи "ТЕМПЕРАТУРУ! ЖИВО!!!"
Если не абосцыца, то выведет.
Так и сделал! =0)))
Счастью нет предела. Я допер как вывести данные! Но допер благодаря ВАМ ВСЕМ кто поддерживал меня в данном топике. Хоть наверное вам и хотелось дать мне леща, но ВЫ все упорно мне помогали.
Вот этим кодом вывожу данные температуры. Пока датчик подключается, градусы цельсия стоят 0.00С. Как только данные температуры цельсия обновляются, вся строка заполняется кракозяброй. Где ошибка? Подскажите пожалуйста.
Сам по себе кусочек вроде ничего плохого не делает. Показывайте весь актуальный скетч - где-то чего-то ещё навыводили.
// подключаем к скетчу две библиотеки, SFE_BMP180 и Wire; Wire –
// это стандартная библиотека, идущая в комплекте с IDE Arduino.
#include <SFE_BMP180.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 7
Adafruit_SSD1306 display(OLED_RESET);
// создаем экземпляр класса SFE_BMP180 и называем его «pressure»:
SFE_BMP180 pressure;
// это высота над уровнем моря в штаб-квартире SparkFun, в Боулдере;
// указана в метрах:
#define ALTITUDE 465.0
void setup()
{
Serial.begin(9600);
Serial.println("Перезагрузка"); // "ПЕРЕЗАГРУЗКА"
// инициализируем датчик (важно извлечь калибровочные данные,
// хранящиеся в устройстве):
if (pressure.begin())
Serial.println("Датчик опознан...");
// "Инициализация BMP180 прошла успешно"
else
{
// упс, что-то пошло не так!
// как правило, так происходит из-за проблем с подключением
// (о том, как подключить датчик правильно, читайте выше):
Serial.println("Датчик не опознан...");
// "Инициализация BMP180 не удалась"
while(1); // вечная пауза
}
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // инициализация дисплея код подсмотрл в интернете. Почему он именно такой, так и не понял.SSD1306 это судя по всему чип дисплэя.
display.clearDisplay(); // очистка дисплея. Не уверен, что эта строка нужна в этой части.
display.setTextSize(1); // Размер шрифта. Как я понял, размер заается исходя из библиотеки, но могу ошибаться.
display.setTextColor(WHITE); // установка цвета текста. Стоит белый, т.к. в данный момент использую белый дисплэй. При удалении этой строки, при компиляции, программа ругается.
display.setCursor(5, 0); // Начало строки координаты X = 5; Y = 0
//display.print (""); // Выводимый текст.
display.display(); // Как я понял, команда позволяет вывести текст на экран.
}
void loop()
{
char status;
double T,P,p0,a;
// блок loop() считывает давление каждые 10 секунд
// если вам нужно давление, приведенное к уровню моря
// (т.е. давление, используемое в прогнозах погоды),
// вам нужно знать, уровень моря в месте,
// где вы измеряете давление;
// в данном скетче мы используем константу ALTITUDE:
Serial.println();
Serial.print("Предоставленная высота: ");
// "заданная высота над уровнем моря"
Serial.print(ALTITUDE,0);
Serial.print(" Метров, "); // " метров, "
Serial.print(ALTITUDE*3.28084,0);
Serial.println(" Футов"); // " футов, "
//Выводим данные на дисплей.
//Выводим высоту над уровнем моря.
{
display.setCursor(0, 0);
display.setTextSize(1);
display.setTextColor(WHITE);
display.print("H: ");
display.print(ALTITUDE,0);
display.print(" M, ");
display.print(ALTITUDE*3.28084,0);
display.println(" Ft");
display.display();
}
//Выводим температуру
{
display.setCursor(0, 10);
display.setTextSize(1);
display.setTextColor(WHITE);
display.print("T: "); // "температура: "
display.print(T,2);
display.print(" C/"); // " градусов Цельсия, "
display.print((9.0/5.0)*T+32.0,2);
display.println("F");
display.display();
delay (1000);
}
// если вы хотите измерить высоту над уровнем моря, // то вам нужно знать информацию о давлении; расчет высоты
// над уровнем моря показан в конце скетча
// чтобы рассчитать давление, сначала нужно измерить температуру
// запускаем измерение температуры; если функция
// будет выполнена успешно, она вернет количество
// миллисекунд, потребовавшихся на измерение;
// а если неуспешно, то вернет «0»:
status = pressure.startTemperature();
if (status != 0)
{
// ждем, когда завершится измерение:
delay(status);
// извлекаем данные о температуре; обратите внимание,
// что измеренные данные хранятся в переменной «T»;
// если функция будет выполнена успешно, она вернет «1»,
// а если нет, то «0»
status = pressure.getTemperature(T);
if (status != 0)
{
// печатаем измеренную температуру:
Serial.print("Температура: "); // "температура: "
Serial.print(T,2);
Serial.print(" °С, "); // " градусов Цельсия, "
Serial.print((9.0/5.0)*T+32.0,2);
Serial.println(" °F"); // " градусов Фаренгейта"
// запускаем измерение давления; параметр отвечает
// за частоту дискретизации данных; допустимые значения
// для параметра – от «0» до «3», где «3» - это
// самое высокое разрешение, но и самая долгая задержка;
// если функция будет выполнена успешно, она вернет
// количество миллисекунд, потребовавшихся на ожидание,
// а если неуспешно, то «0»:
status = pressure.startPressure(3);
if (status != 0)
{
// ждем завершения измерения:
delay(status);
// извлекаем данные о давлении; обратите внимание,
// что измеренные данные хранятся в переменной «P»;
// также обратите внимание, что этой функции
// требуются данные о температуре (переменная «T»);
// если температура стабильна, то для многократного
// измерения давления вы можете измерить температуру
// всего один раз;
// если функция будет выполнена успешно, она вернет «1»,
// а если нет, то «0»:
status = pressure.getPressure(P,T);
if (status != 0)
{
// печатаем результат:
Serial.print("Обс. давление: ");
// "абсолютное давление: "
Serial.print(P,2);
Serial.print(" mb, "); // " мбар, "
Serial.print(P*0.0295333727,2);
Serial.println(" inHg"); // " дюймов рт. ст."
// датчик давления возвращает данные об абсолютном давлении,
// которые могут варьироваться в зависимости от высоты
// над уровнем моря; чтобы убрать эффект от высоты
// над уровнем моря, используйте функцию sealevel(),
// указав в ней высоту над уровнем моря для вашей локации
// показатель давления без учета высоты над уровнем моря
// используется, как правило, в прогнозах погоды;
// параметры: P = абсолютное давление в миллибарах,
// ALTITUDE = высота над уровнем моря в метрах;
// результат: p0 = давление без учета
// высоты над уровнем моря в миллибарах
p0 = pressure.sealevel(P,ALTITUDE);
// здесь, в Боулдере, 1655 метров над уровнем моря
Serial.print("От. давление: ");
// относительное давление (приведенное к уровню моря)
Serial.print(p0,2);
Serial.print(" mb, "); // " мбар, "
Serial.print(p0*0.0295333727,2);
Serial.println(" inHg"); // " дюймов рт. ст."
// кроме того, зная давление, вы можете определить
// высоту над уровнем моря;
// это выполняется при помощи функции altitude();
// параметры: P = абсолютное давление в миллибарах,
// p0 = базовое давление в миллибарах
// результат: a = высота над уровнем моря в метрах
a = pressure.altitude(P,p0);
Serial.print("Рас. высота: ");
// "расчитанная высота над уровнем моря: "
Serial.print(a,0);
Serial.print(" Метров, "); // " метров, "
Serial.print(a*3.28084,0);
Serial.println(" Футов"); // " футов"
}
else Serial.println("error retrieving pressure measurement\n");
// "ошибка при извлечении данных о давлении"
}
else Serial.println("error starting pressure measurement\n");
// "ошибка при запуске измерения давления"
}
else Serial.println("error retrieving temperature measurement\n");
// "ошибка при извлечении данных о температуре"
}
else Serial.println("error starting temperature measurement\n");
// "ошибка при запуске измерения температуры"
delay(5000); // 5-секундная пауза
}
Да вроде всё-так. Т.е в начале у Вас вся картинка полная и красивая? И высота в метрах и футах выведена и температура ноль градусов по цельсию и ноль по фаренгейту - всё показывается? А на следующем цикле всё портится?
А если перед 70-й строкой display.clearDisplay(); вставить?
Да вроде всё-так. Т.е в начале у Вас вся картинка полная и красивая? И высота в метрах и футах выведена и температура ноль градусов по цельсию и ноль по фаренгейту - всё показывается? А на следующем цикле всё портится?
А если перед 70-й строкой display.clearDisplay(); вставить?
Да, все так. И появилась еще одна проблемка. Почему-то выводит не верные данные. Показывает давление всегда одно и тоже 48, а температуру 8С. Хотя в доме почти 26С.
Да вроде всё-так. Т.е в начале у Вас вся картинка полная и красивая? И высота в метрах и футах выведена и температура ноль градусов по цельсию и ноль по фаренгейту - всё показывается? А на следующем цикле всё портится?
А если перед 70-й строкой display.clearDisplay(); вставить?
Сейчас у меня все выводится на одном экране в три строки. Вывожу высоту, температуру и давление.
Как сделать так, чтобы выводилась например высота, спустя 5 секунд экран меняется и выводит температуру, потом спустя 5 секунд давление?
И можно ли коротким кодом вывести дату и время?
У вас между измерениями как раз пять секунд задержка стоит (в конце loop), значит на каждом проходе и выводите что-то одно. А чтобы знать, что именно сейчас выводить заведите переменную, равную 0. Пишите в программе - если переменная равна 0 то вывести высоту, если 1 то вывести температуру, если 2 то давление. Увеличить переменную на 1. Если стала больше 2, то приравнять её снова к нулю. А уж как это на си запрограммировать в книжке глянете.
Про время. Вывести-то его конечно можно, только откуда-то его взять нужно! Обычно используется модуль часов реального времени (RTC). Покупайте, осваивайте. Это будет следующий шаг.
Там в "Ищу исполнителя" неадекватный пенсионер (уже сто десятый раз истину доносит) к вам стучиться. Умоляю, игнорируйте, он тогда сам успокоиться, а то опять бригаду вызывать придется.((((
Там в "Ищу исполнителя" неадекватный пенсионер (уже сто десятый раз истину доносит) к вам стучиться. Умоляю, игнорируйте, он тогда сам успокоиться, а то опять бригаду вызывать придется.((((
Сейчас у меня все выводится на одном экране в три строки. Вывожу высоту, температуру и давление.
Как сделать так, чтобы выводилась например высота, спустя 5 секунд экран меняется и выводит температуру, потом спустя 5 секунд давление?
И можно ли коротким кодом вывести дату и время?
У вас между измерениями как раз пять секунд задержка стоит (в конце loop), значит на каждом проходе и выводите что-то одно. А чтобы знать, что именно сейчас выводить заведите переменную, равную 0. Пишите в программе - если переменная равна 0 то вывести высоту, если 1 то вывести температуру, если 2 то давление. Увеличить переменную на 1. Если стала больше 2, то приравнять её снова к нулю. А уж как это на си запрограммировать в книжке глянете.
Про время. Вывести-то его конечно можно, только откуда-то его взять нужно! Обычно используется модуль часов реального времени (RTC). Покупайте, осваивайте. Это будет следующий шаг.
Спасибо!
Всем еще раз ОГРОМНОЕ СПАСИБО!
На сегодня задача выполнена и я пойду отдыхать.
Завтра буду работать над сменой экрана и буду подключать GPS модуль с выводом координат на тот же экран. =0)
Я бы залил для начала заведомо рабочий скетч, хоть этот к примеру, чтобы убедиться, что всё включено правильно:
А, ну точно. Читайте свои же комментарии:
display.display();
// Как я понял, команда позволяет вывести текст на экран.
Под дисплеями вставил строку display.display();
Появились изменения. =0) Теперь поверх текста Hello, V i k i !!! что-то напечатлось, но не понять что.
У вас же там исполнитель какой-то есть... Сделает вашу задачу - посмотрите в чем ошибка была.
Вместо какой-то фигни в строках 57-58 нужно печатать Ваши переменные. Всё завершать вызовом display.display().
Я не знаю что там писать. Могли бы Вы подскзать мне строки кода которые нужно туда вбить?
Я много разных примеров попробовал. Часть не работает, либо руки кривые. Но под вывод данных с БМП так и не нашел.
У вас же там исполнитель какой-то есть... Сделает вашу задачу - посмотрите в чем ошибка была.
Есть. Но хочется же самому научиться, чтобы людей не дергать.
Мне прям реально хочется этому научиться. Вот такой метод изучения, как вы все мне сейчас помогаете, лучше мной усваивается. Вы говорите куда и что вставлять, я вставляю. Как все заработает, я уже детально начну изучать. Потом попробую тоже самое сделать с другим модулем.
Извините, но меня надо носом тыкать и разжевывать, пока я не решу поставленную задачу. После будет легче.
Еще раз извините за мои ЧТО И КУДА!
Да. видимо, штото не так с руками.
ТС, ты монка скачал? Ну почитай ты его уже, наконец. Мошт, просветлеешь мыслями. Там и про OLED есть, памойму.
Я бы залил для начала заведомо рабочий скетч, хоть этот к примеру, чтобы убедиться, что всё включено правильно:
Выдает ошибки и ссылается на эту строку: * аппаратных интерфейсов I2C.
Хоть строка и за комментирована, он выделяет ее как ошибку.
ТС, ты монка скачал? Ну почитай ты его уже, наконец. Мошт, просветлеешь мыслями. Там и про OLED есть, памойму.
Скачал. Читать начну вечером. Но схожу завтра по книжным, может есть бумажная версия, не люблю в телефоне читать.
To ТС, поднимите глаза выше, на сообщение Деда, и идите предложенным им путем. Иначе так и будете каждую запятую выклянчивать.
Теперь поверх текста Hello, V i k i !!! что-то напечатлось, но не понять что.
Перед тем как выводить нужно или очищать предыдущий вывод или устанавливать курсор на другую строку
Есть маленький, но результат.
На экран выводится 0xDEADBEEF из 58 строки display.println(0xDEADBEEF, HEX);
Судя по всему не все потеряно. Экран значит работает и выводит информацию.
Как вместо 0xDEADBEEF вывести хотя бы Температуру?
Вот это как раз ответ на вопрос "за что деньги".
Вот это как раз ответ на вопрос "за что деньги".
Плюсую! Теперь все понимаю.
Да уже гаркни на нее что есть мочи "ТЕМПЕРАТУРУ! ЖИВО!!!"
Если не абосцыца, то выведет.
Да уже гаркни на нее что есть мочи "ТЕМПЕРАТУРУ! ЖИВО!!!"
Если не абосцыца, то выведет.
Так и сделал! =0)))
Счастью нет предела. Я допер как вывести данные! Но допер благодаря ВАМ ВСЕМ кто поддерживал меня в данном топике. Хоть наверное вам и хотелось дать мне леща, но ВЫ все упорно мне помогали.
Моей благодарности НЕТ ПРЕДЕЛА!!!
Спасибо ВАМ ОГРОМНОЕ ВСЕМ!!!
Ураааааа!!!!
Кирилицу пока не поддерживает, но удалось вывести высоту в Футах.
Спасибо ОГРОМНЕЙШЕЕ!!!
Кирилицу пока не поддерживает, но удалось вывести высоту в Футах.
Вверху страницы в поиске наберите "русификация Adafruit_SSD1306" - тут тема про это есть.
Но Вы сначала всё без кириллицы до конца реализуйте, чтобы как следует работу с экраном понять. А там уж и кириллицу приделаете.
BamBoo используй ASOLED, Luke!!!
http://arduino.ru/forum/proekty/asoled-kompaktnaya-biblioteka-dlya-oled-...
Графиков она тебе, канеш, не построит, но и памяти не сожрёть, и русский выведет
Пока тебе награда полагается как Новичку Месяца. Держи.
Пока тебе награда полагается как Новичку Месяца. Держи.
Спасибо! =0) Повешу на стену.
Проблемка!
Вот этим кодом вывожу данные температуры. Пока датчик подключается, градусы цельсия стоят 0.00С. Как только данные температуры цельсия обновляются, вся строка заполняется кракозяброй. Где ошибка? Подскажите пожалуйста.
Сам по себе кусочек вроде ничего плохого не делает. Показывайте весь актуальный скетч - где-то чего-то ещё навыводили.
Сам по себе кусочек вроде ничего плохого не делает. Показывайте весь актуальный скетч - где-то чего-то ещё навыводили.
Да вроде всё-так. Т.е в начале у Вас вся картинка полная и красивая? И высота в метрах и футах выведена и температура ноль градусов по цельсию и ноль по фаренгейту - всё показывается? А на следующем цикле всё портится?
А если перед 70-й строкой display.clearDisplay(); вставить?
Да вроде всё-так. Т.е в начале у Вас вся картинка полная и красивая? И высота в метрах и футах выведена и температура ноль градусов по цельсию и ноль по фаренгейту - всё показывается? А на следующем цикле всё портится?
А если перед 70-й строкой display.clearDisplay(); вставить?
Да, все так. И появилась еще одна проблемка. Почему-то выводит не верные данные. Показывает давление всегда одно и тоже 48, а температуру 8С. Хотя в доме почти 26С.
Хотя в Мониторе порта показывает верные данные:
Да вроде всё-так. Т.е в начале у Вас вся картинка полная и красивая? И высота в метрах и футах выведена и температура ноль градусов по цельсию и ноль по фаренгейту - всё показывается? А на следующем цикле всё портится?
А если перед 70-й строкой display.clearDisplay(); вставить?
Помогло! Спасибо огромное.
Такой еще вопрос:
Сейчас у меня все выводится на одном экране в три строки. Вывожу высоту, температуру и давление.
Вопрос:
Как сделать так, чтобы выводилась например высота, спустя 5 секунд экран меняется и выводит температуру, потом спустя 5 секунд давление?
И можно ли коротким кодом вывести дату и время?
Я бы залил для начала заведомо рабочий скетч, хоть этот к примеру, чтобы убедиться, что всё включено правильно:
Выдает ошибки и ссылается на эту строку: * аппаратных интерфейсов I2C.
Хоть строка и за комментирована, он выделяет ее как ошибку.
уже не надо, у вас вывод на экран идёт, значит с адресацией дисплея всё правильно, смотрите примеры, как, куда и что выводится
Сейчас у меня все выводится на одном экране в три строки. Вывожу высоту, температуру и давление.
Как сделать так, чтобы выводилась например высота, спустя 5 секунд экран меняется и выводит температуру, потом спустя 5 секунд давление?
И можно ли коротким кодом вывести дату и время?
У вас между измерениями как раз пять секунд задержка стоит (в конце loop), значит на каждом проходе и выводите что-то одно. А чтобы знать, что именно сейчас выводить заведите переменную, равную 0. Пишите в программе - если переменная равна 0 то вывести высоту, если 1 то вывести температуру, если 2 то давление. Увеличить переменную на 1. Если стала больше 2, то приравнять её снова к нулю. А уж как это на си запрограммировать в книжке глянете.
Про время. Вывести-то его конечно можно, только откуда-то его взять нужно! Обычно используется модуль часов реального времени (RTC). Покупайте, осваивайте. Это будет следующий шаг.
Там в "Ищу исполнителя" неадекватный пенсионер (уже сто десятый раз истину доносит) к вам стучиться. Умоляю, игнорируйте, он тогда сам успокоиться, а то опять бригаду вызывать придется.((((
Там в "Ищу исполнителя" неадекватный пенсионер (уже сто десятый раз истину доносит) к вам стучиться. Умоляю, игнорируйте, он тогда сам успокоиться, а то опять бригаду вызывать придется.((((
Понял, спасибо.
Сейчас у меня все выводится на одном экране в три строки. Вывожу высоту, температуру и давление.
Как сделать так, чтобы выводилась например высота, спустя 5 секунд экран меняется и выводит температуру, потом спустя 5 секунд давление?
И можно ли коротким кодом вывести дату и время?
У вас между измерениями как раз пять секунд задержка стоит (в конце loop), значит на каждом проходе и выводите что-то одно. А чтобы знать, что именно сейчас выводить заведите переменную, равную 0. Пишите в программе - если переменная равна 0 то вывести высоту, если 1 то вывести температуру, если 2 то давление. Увеличить переменную на 1. Если стала больше 2, то приравнять её снова к нулю. А уж как это на си запрограммировать в книжке глянете.
Про время. Вывести-то его конечно можно, только откуда-то его взять нужно! Обычно используется модуль часов реального времени (RTC). Покупайте, осваивайте. Это будет следующий шаг.
Спасибо!
Всем еще раз ОГРОМНОЕ СПАСИБО!
На сегодня задача выполнена и я пойду отдыхать.
Завтра буду работать над сменой экрана и буду подключать GPS модуль с выводом координат на тот же экран. =0)
Спасибо огромное мужики! Жму руку каждому.