Вникнуть пока некогда. Первое впечатление - как то сумбурно..... неупорядочно написано. А не удаляйте ..... Поправте всё что нужно и выложите снова (если не пропадёт интерес).
Алексей Вы наверное не поняли здесь разговор шел о другой версии проекта на дисплее 128х64 монохромном размером 3,2"
Я предложил вариант с тремя страницами и двумя видами графика , а Андрей сказал хватит баловатся усовершенствованию предела нет.
Да и еще Алексей я смотрю у вас собранно на АТмеге и стоит кварц . Если кварц на 8 Мгц то можно изменить FUSE биты и сделать на внутреннем генераторе ( я так думаю).
Да у меня питание 3,3 , кварц на 8М соответственно. Я не очень на внутренний генератор надеюсь. На фото макетка, а так платка своего изготовления, потому и подключение дисплея своё. Попытаюсь С° вставить.
А я все "мусолю" скеч автора темы (Sergey_Ch), восновном упрощая его но и немного модернизируя... "Все гениальное - ПРОСТО!!!", правило, которым я руководствуюсь часто. В барометре, обычном бытовом барометре (не альтиметре), даже нет особой нужды созерцать показания в абсолютной величине. Ибо давление, не воспринимается человеком например так, как температура. Основная цель- иметь график его изменения за последние сутки - двое, из чего делается заключение о тенденции вероятного изменения погоды и самочувствия... Конечно, не будет лишним показать и текущее, особенно имея на "борту" такие возможности.
Основные изменения ПО на текущий момент - отсутствие кнопок, показаний напряжения АКБ (так как борометр домашний, стационарный), диапазон измерения выбран оптимальным (740-780mm Hg), базовая (нулевая) линия графика проходит по значению 760mm Hg, что соотв. нормальному АД, исходя из этого, на мой взгляд, шкала справа оказалась не эффективной (не нужной), за счет чего диапазон полезного для графика места был немного расширен, восприятие на мой взгляд, более удобное.
В планах - текущие показания должны менять сное положение, если закрываются графиком, переход на OLED который еще не пришел из КНДР..
Слева: предыдущий вариант (интервал сутки), справа: новый вариант (полтора суток, время еще не прошло)
/*********************************
Проект "Барограф"
диапазон 740-780mm Hg базовая линия по центру (760mm Hg.)
без шкалы (с расширенным интервалос времени)
mmHg Pa
720 95992
740 98658
760 101325
780 103991
800 106658
Pmin Pmax
РЕЖИМ ИЗМ:(740-780 ммHg = 98658 -103991 Pa)
************* Подключение дисплея Nokia 5110 к Arduino ProMini **************
// 1 - VCC------------------------------ +3.3v от Vcc Arduino ProMicro
// 2 - GND------------------------------ GND Arduino ProMicro
// 3 - SCE (LCD chip select (CS)-------- pin 7 Arduino ProMicro
// 4 - RST------------------------------ pin 8 Arduino ProMicro
// 5 - D/C (Data/Command select)-------- pin 6 Arduino ProMicro
// 6 - DN<MOSI> (Serial data out (DIN)-- pin 5 Arduino ProMicro
// 7 - SCLK (Serial clock out (SCLK)---- pin 4 Arduino ProMicro
// 8 - LED-------------------------------GND Arduino ProMicro
************** Подключение датчика BMP085 к Arduino ProMicro *****************
// 1 - VCC----- VCC +3.3v Arduino ProMicro
// 2 - SDA--- SDA pin 2 Arduino ProMicro
// 3 - SCL--- SCL pin 3 Arduino ProMicro
// 4 - XCLR------------- не используется
// 5 - EDC-------------- не используется
// 6 - GND----------------- к общему GND
*****************************************************************************/
#include <Wire.h> // библиотека шины получения и передачи данных
#include <BMP085.h> // библиотека для работы с датчиком давления BMP085
#include <Adafruit_GFX.h> // библиотека для работы дисплея Nokia5110
#include <Adafruit_PCD8544.h>
#include <TimeHelpers.h> // библиотека для работы с периодами времени
//Инициализируем дисплей на указанных пинах ArduinoUNO
Adafruit_PCD8544 display = Adafruit_PCD8544(4, 5, 6, 7, 8);
BMP085 dps = BMP085(); // Модель Digital Pressure Sensor - BMP085
long Pressure = 0; // переменная для получения данных с датчика давления
long Pmax = 0; // переменная для установки максимального значения давления
long Pmin = 0; // переменная для установки минимального значения давления
int cycle = 0; // Значение переменной - шаг изменения при выполнении цикла for
int y = 0; // Значение переменной Y – y координата дисплея
int z = 24; // координата z – строка дисплея по оси y для
// привязки линии от значения давления к нулевому уровню (760mm Hg)
/*-------------- Настройка времени работы циклов измерения давления --------------------------*/
#define Diagram_interval _SEC_(1542) // переодичность вывода данных на дисплей (86400сек/84=1028 (24часа) ) !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// объявляем переменные у0 - у83
int y0, y1, y2, y3, y4, y5, y6, y7, y8, y9, y10, y11, y12, y13, y14, y15,
y16, y17, y18, y19, y20, y21, y22, y23, y24, y25, y26, y27, y28, y29, y30, y31,
y32, y33, y34, y35, y36, y37, y38, y39, y40, y41, y42, y43, y44, y45, y46, y47,
y48, y49, y50, y51, y52, y53, y54, y55, y56, y57, y58, y59, y60, y61, y62, y63,
y64, y65, y66, y67, y68, y69, y70, y71, y72, y73, y74, y75, y76, y77, y78, y79,
y80, y81, y82, y83;
long v0=101400, v1=101400, v2=101400, v3=101400, v4=101400, v5=101400, v6=101400,v7=101400,
v8=101400, v9=101400, v10=101400, v11=101400, v12=101400, v13=101400, v14=101400, v15=101400,
v16=101400, v17=101400, v18=101400, v19=101400, v20=101400, v21=101400, v22=101400, v23=101400,
v24=101400, v25=101400, v26=101400, v27=101400, v28=101400, v29=101400, v30=101400, v31=101400,
v32=101400, v33=101400, v34=101400, v35=101400, v36=101400, v37=101400, v38=101400, v39=101400,
v40=101400, v41=101400, v42=101400, v43=101400, v44=101400, v45=101400, v46=101400, v47=101400,
v48=101400, v49=101400, v50=101400, v51=101400, v52=101400, v53=101400, v54=101400, v55=101400,
v56=101400, v57=101400, v58=101400, v59=101400, v60=101400, v61=101400, v62=101400, v63=101400,
v64=101400, v65=101400, v66=101400, v67=101400, v68=101400, v69=101400, v70=101400, v71=101400,
v72=101400, v73=101400, v74=101400, v75=101400, v76=101400, v77=101400, v78=101400, v79=101400,
v80=101400, v81=101400, v82=101400, v83=101400;
void setup ()
{
Wire.begin(); // старт шины данных
display.begin(); // старт дисплея
delay(500); // время на инициализацию датчика и дисплея
dps.init(MODE_ULTRA_HIGHRES, 500, true);
/*
значение 2700 см = 27 метров - истинная высота Энергодара над уровнем моря, !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
давление будет рассчитываться на основе этой величины.
Примечание: используйте функцию zeroCal после инициализации датчика.
dps.zeroCal (101800, 0); // Установить нулевую точку
*/
display.setContrast(60); // регулировка контраста изображения
display.clearDisplay(); // Очистка экрана и буфера дисплея
}
void loop()
{
Diagram(); // Выполняем подпрограмму построения графика давления
// выполняем подпрограмму периодичного измерения давления Meterage()
// с переодичностью, установленной в коде для переменной Diagram_interval (сек).
DO_EVERY(Diagram_interval,
{
Meterage();
}
);
} // завершаем цикл void loop
//==============================================================//
//------- ПОДПРОГРАММА ПЕРИОДИЧНОСТИ ИЗМЕРЕНИЙ ДАВЛЕНИЯ --------//
//==============================================================//
void Meterage ()
{
dps.getPressure(&Pressure); // получаем данные о давлении
delay (50);
// последовательно изменяем значение давления « v » на предыдущее при каждом цикле замера
v83 = v82; v82 = v81; v81 = v80;
v80 = v79; v79 = v78; v78 = v77; v77 = v76; v76 = v75; v75 = v74; v74 = v73; v73 = v72; v72 = v71; v71 = v70;
v70 = v69; v69 = v68; v68 = v67; v67 = v66; v66 = v65; v65 = v64; v64 = v63; v63 = v62; v62 = v61; v61 = v60;
v60 = v59; v59 = v58; v58 = v57; v57 = v56; v56 = v55; v55 = v54; v54 = v53; v53 = v52; v52 = v51; v51 = v50;
v50 = v49; v49 = v48; v48 = v47; v47 = v46; v46 = v45; v45 = v44; v44 = v43; v43 = v42; v42 = v41; v41 = v40;
v40 = v39; v39 = v38; v38 = v37; v37 = v36; v36 = v35; v35 = v34; v34 = v33; v33 = v32; v32 = v31; v31 = v30;
v30 = v29; v29 = v28; v28 = v27; v27 = v26; v26 = v25; v25 = v24; v24 = v23; v23 = v22; v22 = v21; v21 = v20;
v20 = v19; v19= v18; v18 = v17; v17 = v16; v16 = v15; v15 = v14; v14 = v13; v13 = v12; v12 = v11; v11 = v10;
v10 = v9; v9 = v8; v8 = v7; v7 = v6; v6 = v5; v5 = v4; v4 = v3; v3 = v2; v2 = v1; v1 = v0; v0 = Pressure;
} // закрываем void meterage ()
//==============================================================//
//-------- ПОДПРОГРАММА ОТОБРАЖЕНИЯ ГРАНИЦ ИЗМЕРЕНИЙ -----------//
//==============================================================//
void Draw_Bord_val ()
{
// В зависимости от выбранных пределлов границ измерений рисуем отметки значений давления
int Bord_val_min = (Pmin/133.3)-700;
int Bord_val_max= (Pmax/133.3)-700;
} // закрываем void Draw_Bord_val ()
//==============================================================//
//--------------- ПОДПРОГРАММА ПОСТРОЕНИЯ ГРАФИКА --------------//
//==============================================================//
void Diagram()
{
dps.getPressure(&Pressure); // получаем данные о давлении
delay (50);
/********* Оформляем экран ***********/
display.setTextSize(1); //размер шрифта (минимальный - 1)
display.setTextColor(BLACK);
// устанавливаем значение мин и мах давление отображаемое на графике !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
{
Pmin = 98658; Pmax = 103991;
}
Draw_Bord_val (); //рисуем отметки значений давления
/*************** Рисуем значение текущего давления ********************/
display.setCursor(0,0);
display.print (Pressure/133.3); // выводим текущее атм. давление переведя его в мм Рт.Ст.
display.print ("Hg");
/**************** Готовим данные для вывода на график ********************/
//Значение Y (высоту линий графика 0-48) приводим пропорционально к параметрам измеряемого давления
// формируем массив из 84-х значений данных, которые будут выводиться на дисплей
int arrayDraw [84] =
{
y0 = map(v0, Pmin, Pmax, 48, 1),
y1 = map(v1, Pmin, Pmax, 48, 1),
y2 = map(v2, Pmin, Pmax, 48, 1),
y3 = map(v3, Pmin, Pmax, 48, 1),
y4 = map(v4, Pmin, Pmax, 48, 1),
y5 = map(v5, Pmin, Pmax, 48, 1),
y6 = map(v6, Pmin, Pmax, 48, 1),
y7 = map(v7, Pmin, Pmax, 48, 1),
y8 = map(v8, Pmin, Pmax, 48, 1),
y9 = map(v9, Pmin, Pmax, 48, 1),
y10 = map(v10, Pmin, Pmax, 48, 1),
y11 = map(v11, Pmin, Pmax, 48, 1),
y12 = map(v12, Pmin, Pmax, 48, 1),
y13 = map(v13, Pmin, Pmax, 48, 1),
y14 = map(v14, Pmin, Pmax, 48, 1),
y15 = map(v15, Pmin, Pmax, 48, 1),
y16 = map(v16, Pmin, Pmax, 48, 1),
y17 = map(v17, Pmin, Pmax, 48, 1),
y18 = map(v18, Pmin, Pmax, 48, 1),
y19 = map(v19, Pmin, Pmax, 48, 1),
y20 = map(v20, Pmin, Pmax, 48, 1),
y21 = map(v21, Pmin, Pmax, 48, 1),
y22 = map(v22, Pmin, Pmax, 48, 1),
y23 = map(v23, Pmin, Pmax, 48, 1),
y24 = map(v24, Pmin, Pmax, 48, 1),
y25 = map(v25, Pmin, Pmax, 48, 1),
y26 = map(v26, Pmin, Pmax, 48, 1),
y27 = map(v27, Pmin, Pmax, 48, 1),
y28 = map(v28, Pmin, Pmax, 48, 1),
y29 = map(v29, Pmin, Pmax, 48, 1),
y30 = map(v30, Pmin, Pmax, 48, 1),
y31 = map(v31, Pmin, Pmax, 48, 1),
y32 = map(v32, Pmin, Pmax, 48, 1),
y33 = map(v33, Pmin, Pmax, 48, 1),
y34 = map(v34, Pmin, Pmax, 48, 1),
y35 = map(v35, Pmin, Pmax, 48, 1),
y36 = map(v36, Pmin, Pmax, 48, 1),
y37 = map(v37, Pmin, Pmax, 48, 1),
y38 = map(v38, Pmin, Pmax, 48, 1),
y39 = map(v39, Pmin, Pmax, 48, 1),
y40 = map(v40, Pmin, Pmax, 48, 1),
y41 = map(v41, Pmin, Pmax, 48, 1),
y42 = map(v42, Pmin, Pmax, 48, 1),
y43 = map(v43, Pmin, Pmax, 48, 1),
y44 = map(v44, Pmin, Pmax, 48, 1),
y45 = map(v45, Pmin, Pmax, 48, 1),
y46 = map(v46, Pmin, Pmax, 48, 1),
y47 = map(v47, Pmin, Pmax, 48, 1),
y48 = map(v48, Pmin, Pmax, 48, 1),
y49 = map(v49, Pmin, Pmax, 48, 1),
y50 = map(v50, Pmin, Pmax, 48, 1),
y51 = map(v51, Pmin, Pmax, 48, 1),
y52 = map(v52, Pmin, Pmax, 48, 1),
y53 = map(v53, Pmin, Pmax, 48, 1),
y54 = map(v54, Pmin, Pmax, 48, 1),
y55 = map(v55, Pmin, Pmax, 48, 1),
y56 = map(v56, Pmin, Pmax, 48, 1),
y57 = map(v57, Pmin, Pmax, 48, 1),
y58 = map(v58, Pmin, Pmax, 48, 1),
y59 = map(v59, Pmin, Pmax, 48, 1),
y60 = map(v60, Pmin, Pmax, 48, 1),
y61 = map(v61, Pmin, Pmax, 48, 1),
y62 = map(v62, Pmin, Pmax, 48, 1),
y63 = map(v63, Pmin, Pmax, 48, 1),
y64 = map(v64, Pmin, Pmax, 48, 1),
y65 = map(v65, Pmin, Pmax, 48, 1),
y66 = map(v66, Pmin, Pmax, 48, 1),
y67 = map(v67, Pmin, Pmax, 48, 1),
y68 = map(v68, Pmin, Pmax, 48, 1),
y69 = map(v69, Pmin, Pmax, 48, 1),
y70 = map(v70, Pmin, Pmax, 48, 1),
y71 = map(v71, Pmin, Pmax, 48, 1),
y72 = map(v72, Pmin, Pmax, 48, 1),
y73 = map(v73, Pmin, Pmax, 48, 1),
y74 = map(v74, Pmin, Pmax, 48, 1),
y75 = map(v75, Pmin, Pmax, 48, 1),
y76 = map(v76, Pmin, Pmax, 48, 1),
y77 = map(v77, Pmin, Pmax, 48, 1),
y78 = map(v78, Pmin, Pmax, 48, 1),
y79 = map(v79, Pmin, Pmax, 48, 1),
y80 = map(v80, Pmin, Pmax, 48, 1),
y81 = map(v81, Pmin, Pmax, 48, 1),
y82 = map(v82, Pmin, Pmax, 48, 1),
y83 = map(v83, Pmin, Pmax, 48, 1),};
/**************** Рисуем график ********************/
for (cycle = 0; cycle <84; cycle ++) // 84 цикл вывода 84-ой линии на дисплей
{
// рисуем линии на позициях от х=83 до х=0 справа налево с значениями, полученными из массива
// с номерами согласно циклу от 0 до 83, значениями, равными от=у0 до у=83)
display.drawLine (83-cycle, arrayDraw [cycle], 83-cycle, z, BLACK);
}
display.display(); // все нарисованное выводим на экран дисплея
if (cycle >83) // Если значение циклов cycle достигло значения больше 83 (экран дисплея заполнен)
{
cycle = 0;
/* номер цикла приобретает значение = 0, начинаем убирать значение с позиции по х=0
на его месте размещаем значение с поз.1, на его - с поз.2 и так далее.
Самое свежее значение выводится на позиции 83, остальные сдвигаются на 1 влево. Самое старое
значение, полученное 84 цикл назад, удаляется безвозвратно. */
}
display.clearDisplay(); // очищаем дисплей
} // завершаем подпрограмму void Diagram()
/*********************************************************/
Сделал барометр с таким кодом перед рождеством за пару дней, забыл сфотать - отдал отцу (у него давление просто ужас как скачет от чего не попадя), код использовал с первых постов, но добавил авторегуляцию шкалы(самое простое решение избавляющее от перебора диапазонов - тем более изначально оно не правильно работало при смене диапазона, дальше не следил). Комментировал сам себе чтоб не забыть потом. С платой мини влезло все в коробку от кнопок, еще и выключатель подсветки сделал сбоку тумблером.
/* Вариант не окончательный(DS1302 переодически глючит)
Главное отличие от предыдущих введена автоматическая установка на графике "min" и "max" и середина(ибо в первом варианте при смене диапазона графика писал брехню)
Время цикла и колличество циклов установлены для настройки (CNT 24, 1s)
Для работы(Цикл - 8сек. Кол-во - 360 (изменения - 1раз в 48 минут)).
(360 циклов - 60столбцов - 48 часа - на дисплее пределы отображения графика)
Почистить .... Убрать всё лишнее.... Перестать читать форум и тырить чужие коды....
*/
#include "DHT.h"
#define DHTPIN 10 // what pin we're connected to
// I assume you know how to connect the DS1302.
// DS1302: CE pin -> Arduino Digital 2
// I/O pin -> Arduino Digital 8
// SCLK pin -> Arduino Digital 9
#include <DS1302.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
#include <Adafruit_BMP085.h>
#include <Wire.h>
#include <avr/sleep.h>
#include <avr/wdt.h>
#include <EEPROM.h>
#define CNT 360 // количество циклов по 8 секунд от работы до работы
#define DHTTYPE DHT21 // DHT 21 (AM2301)
static unsigned char PROGMEM logo8_Che_bmp[] =
{ B110001,
B010001,
B010001,
B011111,
B000001,
B000001,
B000001};//Буква Че! Где найти русскую библиотеку под Adafruit_PCD8544.h???Писать самому влом, проще экран покупать с русскими шрифтами
//Хотел вывести картинку - чего то зависала ардуино при засыпании, хотя в принципе работает
// static unsigned char PROGMEM lcd_image_mas[]=
//{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe, 0xf
int count1 = 0 ; // переменная для счётчика циклов по 8 сек
volatile boolean wdt_tripped=1;
//////////// активизируем дисплей //////////////////
Adafruit_PCD8544 display = Adafruit_PCD8544(3, 4, 5, 6, 7);
/////////// активизируем датчик давления ////////////
Adafruit_BMP085 bmp;
float Press = 0 ; // переменная давление
float temp1=0,h=0,tempH = 0 ;
byte PressEP,PressEPformat,Pmin,Pmax ; // высота столбца в памяти давления
byte PressET,PressETformat,Tmin,Tmax ; // высота столбца в памяти температуры
byte PressEH,PressEHformat,Hmin,Hmax ; // высота столбца в памяти влажности
byte addressP = 0,addressT = 70,addressH = 140; // адрес записи высоты столбца
int adresP,adresT,adresH ; // адрес считывания высоты столбца
byte cycle = 0,cycle1 = 0 ,cycle2 = 0 ; // колличество столбцов в графике
int adrP = 59,adrT = 129,adrH = 199 ; // место столбца графика
int cons = 700 ; // константа высоты столбца
int consT = 1 ;
int consH = 1 ;
//long temp = 0; // переменная для получения данных с датчика давления
// const int analogInPin = A0; // Analog input pin
// float sensorValue = 0;
// float outputValue = 0;
DHT dht(DHTPIN, DHTTYPE);
// Init the DS1302
DS1302 rtc(2, 8, 9);//rst,dat,clk
Time t;
void setup()
{
wdt_disable(); // активация пробуждения
wdt_reset(); // по сторожевому таймеру
wdt_enable(WDTO_8S); // каждые 8 сек (меньше - для настройки)
Wire.begin();
bmp.begin(); //
display.begin(); // старт дисплея
delay(500);
display.setContrast(50);
display.clearDisplay();
Serial.begin(9600);
adresP = addressP ; // начальный адрес чтения - текущий адрес записи давления
PressEP=50; Pmin=50;Pmax=30;
dht.begin();
adresT = addressT ; // начальный адрес чтения - текущий адрес записи температуры
PressET=40; Tmin=40;Tmax=10;
adresH = addressH ; // начальный адрес чтения - текущий адрес записи влажности
PressEH=70; Hmin=70;Hmax=100;
}
void loop()
{
//sensorValue = analogRead(analogInPin);
//outputValue = float(analogRead(analogInPin))/204,6;
// просыпаемся смотрим сколько циклов по 8 сек. спали
wdt_interrupt_mode();
if (wdt_tripped ==1)
{
count1++;
wdt_tripped = 0;
if (count1 == CNT) // если уже "пора"
{
///////////// устанавливаем константу величины столбца в зависимости от текущего давления /////////////////
Press = bmp.readPressure()/133.3;
temp1=bmp.readTemperature();
h = dht.readHumidity();
tempH = dht.readTemperature();
delay(100);
///////////// пишем высоту столбца давления в EEPROM /////////////////////////////
EEPROM.write(addressP,(Press-cons)); // от текущего давления отнимаем константу, вписываем давления в величину столбца 48, 1мм давления-постоянно меняется
grafik(); // рисуем график
addressP = addressP + 1; // устанавливаем следующий адрес
if (addressP >= 60) // адреса 0 - 60
{addressP = 0;}
count1 = 0;
}
else if (count1 == CNT/12) { display.clearDisplay(); // очищаем дисплейи выводим текущее значение
tekuschee_znach();
}
else if (count1 == CNT/2) {
///////////// пишем высоту столбца температуры в EEPROM /////////////////////////////
temp1=bmp.readTemperature();
delay(100);
EEPROM.write(addressT,(temp1-consT)); //от текущей температуры отнимаем константу, вписываем давления в величину столбца 48, 1мм давления-постоянно меняется
grafik_temp(); // рисуем график
addressT = addressT + 1; // устанавливаем следующий адрес
if (addressT >= 130) // адреса 70 - 130
{addressT = 70;}
//count1 = 0;
}
else if (count1 == CNT/4) {
///////////// пишем высоту столбца влажности в EEPROM /////////////////////////////
h = dht.readHumidity();
delay(100);
EEPROM.write(addressH,(h-consH)); // от текущей влажности отнимаем константу, вписываем давления в величину столбца 48, 1мм давления-постоянно меняется
grafik_HUM(); // рисуем график
addressH = addressH + 1; // устанавливаем следующий адрес
if (addressH >= 200) // адреса 140 - 200
{addressH = 140;}
//count1 = 0;
}
else if (count1 == CNT/6) {
testdrawroundrect();//заставка))ну скорее место под нее
}
// else if (count1 == CNT/3) {
// display.clearDisplay();
// //display.setCursor(0,0);
// display.setTextColor(BLACK);
// // display.drawBitmap(0, 0, lcd_image_mas, 32, 32,1);// картинка не пошла
//
// display.display();
// }
// else if (count1 == CNT/3) { //если хотим выводить в конкретное время то так, тогда контроллер работает токо 5 раз из 360
// DHTdraw(); значения
// //VREMJA(); или время что то одно из 2 строк
// }
//либо выводим каждые 8 секунд в зависимости от четности CNT
//ну и в последний момент добавил таки графики изредка - все равно уже режима сна толком не получается
else if (count1%5==0) { //каждый 5-й счетчик еще добавил другое изображение того же самого, сюда можно прописать вывод например вольтажа как у кого то было
DHTdraw();
}
else if (count1%7==0) { //каждый 7-й счетчик еще добавил график давления
grafik();
}
else if (count1%8==0) { //каждый 8-й счетчик еще добавил график температуры
grafik_temp();
}
else if (count1%9==0) { //каждый 9-й счетчик еще добавил график влажности
grafik_HUM();
}
else if (count1%2==0) {
VREMJA();
//delay(2000);}
}
else if (count1%2!=0){
tekuschee_znach();
}
}
//Serial.println(10);проверял как цикл работает! А как в ардуино сделать точку останова для проверки констант и данных???Или какие другие компиляторы использовать?
//display.display();
//
//};
// и снова "баюшки" - доверяю первоисточнику(чо он там деает я не проверял)
//delay(2000);
sleepNow();
}
////// ФУНКЦИИ БЫдлокодера с повторениями ибо влом писать одну но с параметрами//////
//почти все осталось как прежде но добавилась автоподгонка шкалы графика под значения с датчиков
///////////////// рисуем график давления как было ////////////////////////
void grafik()
{
display.clearDisplay(); // очищаем дисплей
Pressing(); // рисуем текущее давление и все надписи
display.setTextColor(BLACK);
adresP = addressP ; // начальный адрес чтения - текущий адрес записи
for (cycle = 0; cycle <60; cycle ++) // 60 циклов вывода линий на дисплей
{
//////////////// прорисовка одного столбца ///////
PressEP = EEPROM.read(adresP); // читаем из памяти высоту столбца
if (PressEP>Pmax){Pmax=PressEP;};
if (PressEP-3<Pmin){Pmin=PressEP-3;};// -3 чтобы график не лежал на дне в неменяющуюся погоду или при тестах(опускал датчик давления в пакет, надувал воздуха и смотрел чо будет)
PressEPformat=map(PressEP, Pmin,Pmax,48,8);
display.drawLine (adrP, PressEPformat, adrP,48, BLACK); // рисуем столбец (PressEP вместо 48 - получим одну линию)
adrP = adrP - 1; // устанавливаем место следующего столбца
if (adrP < 0) // следим за местом
{adrP = 59 ; } // при переходе через начало ставим в конец
adresP = adresP - 1 ; // устанавливаем следующий адрес памяти
if (adresP < 0) // следим за адресом
{adresP = 59 ;}
}
display.display();
delay(100);
}
///////////////// рисуем график температуры немножко по другому////////////////////////
void grafik_temp()
{
display.clearDisplay(); // очищаем дисплей
//Pressing(); // рисуем текущее давление и все надписи
display.clearDisplay();
display.setTextSize(1); // покрупнее бы - но 2 уже много, а 1.5 увы нет
display.setTextColor(BLACK);
display.setCursor(0,0);
display.print("<-48 aca-> ");//ну или 72 часа если 540 циклов, мне показалось раз в час "маловато будет", новый год все таки))
display.setTextSize(1);
display.print(char(167));
display.println("C");
display.drawBitmap(21, 0, logo8_Che_bmp, 8, 8, 1);
display.setCursor(65,1);
display.println("_");
//////////// пределы отображения давления ////////////
//т.к. температура не бывает в нашем климате ваше 100 град то можно график еще увеличить на ширину 1 буквы, но тогда надо под память выделить больше(оставлял 10 про запас)
display.setCursor(71,8);
//display.print("0");
display.println(Tmax);
display.setCursor(65,21);
display.println("_");
//////////// пределы отображения середины давления ////////////
display.setCursor(71,27);
//display.print("0");
display.println((Tmin+Tmax)/2);
display.setCursor(65,41);
display.print("_"); display.println(Tmin);
display.setCursor(63,11);
display.println(".");
display.setCursor(63,31);
display.println(".");
display.setCursor(64,11);
display.println(".");
display.setCursor(64,31);
display.println(".");
display.display();
////////////////////////////////////////////////////////////////////////
display.setTextColor(BLACK);
adresT = addressT ; // начальный адрес чтения - текущий адрес записи
for (cycle1 = 70; cycle1 <130; cycle1 ++) // 60 циклов вывода линий на дисплей
{
//////////////// прорисовка одного столбца ///////
PressET = EEPROM.read(adresT); // читаем из памяти высоту столбца
if (PressET>Tmax){Tmax=PressET;};
if (PressET-1<Tmin){Tmin=PressET-1;};
PressETformat=map(PressET, Tmin,Tmax,48,8);
// на нокии ничерта толком не видно для пенсионеров если рисовать в 1 линию, на другом экране я бы сделал именно линией
//display.drawLine (adrT-70, PressETformat, adrT-70,48, BLACK); // рисуем столбец (PressEP вместо 48 - получим одну линию)
display.drawLine (adrT-70, PressETformat, adrT-70,48, BLACK);
//display.drawLine (adrT-70, 8, adrT-70,PressETformat+2, BLACK); // рисуем столбец (PressEP вместо 48 - получим одну линию)
//display.drawLine (adrP, PressEPformat, adrP,48, BLACK); // рисуем столбец (PressEP вместо 48 - получим одну линию)
adrT = adrT - 1; // устанавливаем место следующего столбца
if (adrT < 70) // следим за местом
{adrT = 129 ; } // при переходе через начало ставим в конец
adresT = adresT - 1 ; // устанавливаем следующий адрес памяти
if (adresT < 70) // следим за адресом
{adresT = 129 ;}
}
display.display();
delay(100);
// Serial.print(PressETformat); Serial.println("PressETformat");
}
void grafik_HUM()
{
display.clearDisplay(); // очищаем дисплей
//Pressing(); // рисуем текущее давление и все надписи
display.clearDisplay();
display.setTextSize(1); // покрупнее
display.setTextColor(BLACK);
display.setCursor(0,0);
display.print("<-48 aca->");
display.println("%Hum");
display.drawBitmap(21, 0, logo8_Che_bmp, 8, 8, 1);
display.setCursor(60,1);
display.println("_");
//////////// пределы отображения давления ////////////
display.setCursor(66,8);
//display.print("0");
display.println(Hmax);
display.setCursor(60,21);
display.println("_");
//////////// пределы отображения середины давления ////////////
display.setCursor(66,27);
//display.print("0");
display.println((Hmin+Hmax)/2);
display.setCursor(60,41);
display.print("_"); display.println(Hmin);
display.setCursor(58,11);
display.println(".");
display.setCursor(58,31);
display.println(".");
display.setCursor(59,11);
display.println(".");
display.setCursor(59,31);
display.println(".");
display.display();
////////////////////////////////////////////////////////////////////////
display.setTextColor(BLACK);
adresH = addressH ; // начальный адрес чтения - текущий адрес записи
for (cycle2 = 140; cycle2 <200; cycle2 ++) // 60 циклов вывода линий на дисплей
{
//////////////// прорисовка одного столбца ///////
PressEH = EEPROM.read(adresH); // читаем из памяти высоту столбца
// if (PressEH>Hmax){Hmax=PressEH;};
if (PressEH<Hmin){Hmin=PressEH;};
PressEHformat=map(PressEH, Hmin,Hmax,48,8);
//максимум влажности принял в 100% и рисовал отраженно чтоб различать графики
display.drawLine (adrH-140, 8, adrH-140,PressEHformat+2, BLACK); // рисуем столбец (PressEP вместо 48 - получим одну линию)
// display.drawLine (adrT-70, 8, adrT-70,PressETformat+2, BLACK); // рисуем столбец (PressEP вместо 48 - получим одну линию)
//display.drawLine (adrP, PressEPformat, adrP,48, BLACK); // рисуем столбец (PressEP вместо 48 - получим одну линию)
adrH = adrH - 1; // устанавливаем место следующего столбца
if (adrH < 140) // следим за местом
{adrH = 199 ; } // при переходе через начало ставим в конец
adresH = adresH - 1 ; // устанавливаем следующий адрес памяти
if (adresH < 140) // следим за адресом
{adresH = 199 ;}
}
display.display();
delay(100);
}
////////////// текущее давление и все надписи на дисплей //////////////
void Pressing()
{
display.clearDisplay();
display.setTextSize(1); // покрупнее
display.setTextColor(BLACK);
display.setCursor(0,0);
display.println("<-48 aca->mmHg");
display.drawBitmap(21, 0, logo8_Che_bmp, 8, 8, 1);
//display.print("bat=");
// display.print(outputValue,1);
// display.println("V");
display.setCursor(60,1);
display.println("_");
//////////// пределы отображения давления ////////////
display.setCursor(66,8);
display.print("7"); display.println(Pmax);
//
display.setCursor(60,21);
display.println("_");
//////////// пределы отображения середины давления ////////////
display.setCursor(66,27);
display.print("7");display.println((Pmin+Pmax)/2);
//display.setCursor(63,34);
//display.println("-");
display.setCursor(60,41);
display.print("_7"); display.println(Pmin);
display.setCursor(58,11);
display.println(".");
display.setCursor(58,31);
display.println(".");
display.setCursor(59,11);
display.println(".");
display.setCursor(59,31);
display.println(".");
display.display();
}
/////////////////////////////////////
void tekuschee_znach(void)
{ Press = bmp.readPressure()/133.3;
temp1=bmp.readTemperature();
h = dht.readHumidity();
tempH = dht.readTemperature();
delay(100);
display.clearDisplay();
display.setTextSize(2); // покрупнее
display.setTextColor(BLACK);
display.setCursor(0,0);
display.print(Press,1); // давление
display.setTextSize(1);
display.println("mmHg");
display.setTextSize(2);
display.setCursor(0,17);
display.print("t=");
display.print(temp1,1);
display.setTextSize(1);
display.print(char(167));
display.setTextSize(2);
display.print("C");
display.setCursor(0,34);
display.print("B=");
display.print(h,1);
display.setTextSize(1);
//display.print(char(175));
display.setTextSize(2);
display.print("%");
display.display();
};
/////////////////////////////////////
void testdrawroundrect(void) {display.clearDisplay();
for (int16_t i=0; i<display.height()/5-2; i+=2) {
display.drawRoundRect(i, i, display.width()-2*i, display.height()-2*i, display.height()/4, BLACK);
display.setTextSize(1);
display.setCursor(9,21);
display.println("METEOPRIBOR");//ну как прибор, игрушка-радоконструктор
display.display();
}
}
void DHTdraw(void)
{
Press = bmp.readPressure()/133.3;
temp1=bmp.readTemperature();
h = dht.readHumidity();
tempH = dht.readTemperature();
delay(100);
t = rtc.getTime();
display.clearDisplay();
display.setTextSize(1); // покрупнее
display.setTextColor(BLACK);
display.setCursor(0,0);
// Send Day-of-Week
display.print(rtc.getDOWStr());
//display.print(" ");
//display.print(rtc.getMonthStr(FORMAT_SHORT));Как FORMAT_SHORT в этой ф-ии влияет на ф-ию VREMJA???Я не понял - пришлось убрать тут
// display.print("--");
display.setCursor(54,0);
// Send date
// display.print(rtc.getTimeStr());
// display.print("///");
//display.print(t.hour, DEC);
display.print(t.hour/10);
display.print(t.hour%10);
display.print(":");
//display.print(t.min, DEC);
display.print(t.min/10);
display.print(t.min%10);
// Serial.print(" -- ");
// Send time
display.setCursor(10,10);
display.print(rtc.getDateStr());
display.setCursor(0,20);
display.print("T="); //задаем температуру
display.setCursor(13,20);
display.print(tempH,1); //Это температура с DHT22
//display.setCursor(45,20);
display.print("/");
//display.setCursor(53,20);
display.print(temp1,1); //Это температура с барометра
display.print(char(167));
display.println("C");
display.setCursor(0,30);
display.print("Hum="); // задаем влажность с DHT22
display.setCursor(28,30);
display.print(h);
display.setCursor(63,30);
display.print("%");
display.setCursor(0,40);
display.print("Pres="); // задаем атмосферное давление
display.setCursor(31,40);
display.print(Press); //рассчет атмосферного давления
display.setCursor(68,40);
display.print("mm");
// Serial.print(" Alt(m):"); кому надо, это текущая высота над уровнем моря
// Serial.print(Altitude / 100);
display.display(); // Вывод вместимого буфера на дисплей
}
/////////// здесь мы просто просыпаемся
void wdt_interrupt_mode()
{
wdt_reset();
WDTCSR |= _BV(WDIE); // Restore WDT interrupt mode
}
ISR(WDT_vect)
{
wdt_tripped=1; // set global volatile variable
}
///////////// а здесь засыпаем
void sleepNow()
{
_SFR_BYTE(ADCSRA) &= ~_BV(ADEN);
set_sleep_mode(SLEEP_MODE_PWR_DOWN); // Здесь устанавливается режим сна
sleep_enable(); // Включаем sleep-бит в регистре mcucr. Теперь возможен слип
_SFR_BYTE(ADCSRA) |= _BV(ADEN);
sleep_mode(); // Здесь устройство перейдет в режим сна!!!
}
void VREMJA()
{
t = rtc.getTime();
display.clearDisplay();
display.setTextSize(2); // покрупнее
display.setTextColor(BLACK);
display.setCursor(12,5);
//display.print(t.hour, DEC);
display.print(t.hour/10);
display.print(t.hour%10);//чтобы 0 еще выводить перед временем и значение не плыло, можно как ниже
// if(RTC.minute<10)lcd.print(0); // лидирующий ноль, если нужен
// lcd.print(RTC.minute);
display.print("-");
display.setCursor(49,5);
//display.print(t.min, DEC);
display.print(t.min/10);
display.print(t.min%10);
display.setTextSize(1);
display.setCursor(36,2);
//display.print(t.sec, DEC);
display.print(t.sec/10);
display.print(t.sec%10);
//display.printNumI(int(now.minute()), 50, 0);
display.setCursor(12,20);
display.print(rtc.getMonthStr());
display.setTextSize(1);
display.setTextColor(WHITE, BLACK);
display.setCursor(0,30);
display.print(" ");
display.print(rtc.getDOWStr());
display.print(" ");
display.setTextColor(BLACK);
display.setTextSize(1);
display.setCursor(10,40);
display.print(rtc.getDateStr());
//display.setTextColor(WHITE, BLACK); // 'inverted' text
// display.println(3.141592);
display.display();
}
////////// НО ЧИСТИТЬ ВСЁ РАВНО НАДО!!! /////////
// Кнопку хочется прикрутить меняющую экраны по нажатию! И надо бы реализовать подвод часов - с заспанием не совсем представляю как это сделать
Попробуйте какую-нить другую библиотеку - их штук 5 разных с одним названием; что то другое предположить сложно не зная что там за ошибка (я вообще все по очереди прикручивал после того как сразу не заработало, хотя в итоге и сделал почти так как и задумывал).
Господа, здравствуйте. Просьба-вопрос от новичка в Ардуино (но не в электронике).
В Ардуино я с неделю всего вникаю. Данный прибор ОЧЕНЬ мне интересен. Попытка залить код в ардуино нано провалилась. Понимаю, что надо подключать библиотеки (я в этом пока разбираюсь плохо). Надергал разных и попытался приаттачить. Результат - окно ардуино айде стало просто черным. После того, как он ругнулся на библеотеки. Перезапуск результата не изменил.
Но это фиг с ним. Разберусь и разорхивирую программу еще раз. Видимо где-то оказались двойными библиотеки.
Не могли кто-нибудь выложить комплектно скетч и библиотеки?
Матчасть - Ардуино нано либо про мини. ЛСД нокии 3310 датчик давления BMP180
Спасибо. Немного понятнее стало. Но засада есть и здесь. Некоторые библиотеки без проблем. Некоторые (Wire.h, avr/sleep.h, avr/wdt.h) только описания. Я понимаю это так, что эти библиотеки модифицируются под конкретные устройства? Если это так, то я приплыл.
Спасибо. Немного понятнее стало. Но засада есть и здесь. Некоторые библиотеки без проблем. Некоторые (Wire.h, avr/sleep.h, avr/wdt.h) только описания. Я понимаю это так, что эти библиотеки модифицируются под конкретные устройства? Если это так, то я приплыл.
avr/sleep.h, avr/wdt.h их не надо ставить, они уже в комплекте идут.
Только инклюд написать
Вот тут лежат: arduino-1.6.9\hardware\tools\avr\avr\include\avr
Это сообщение ардуино айде об ошибке при компиляции. Со скетчем из 38 поста - нечто похожее. Пробовал и другую версию программы ардуино. Результат схож. Сам нифига не понял, что это означает.
Делал так:
Новое окно. Удаляю содержимое. Копирую скетч из поста. Вставляю а ардуино айде. Заливаю.
Выскакивает это либо подобное сообщение об ошибках.
Возможно что-то делаю неправильно. Но с другими скетчами прокатывало. Например тестер аккумуляторов от Бодрого 2014.
Фигушки. При отсоединении линий данных от ардуино (А4, А5) дисплей показывает цветочек. При подключеном датчике не происходит ничего. Дисплей не реагирует.
Датчик у меня BMP180. Читал, что библиотека подходит от ВМП085. Возможно это не так?
Блин, я уже размечтался о компактном приборчике. На барометры поглядываю давно, но барографе даже и не мечтал. А тут такой приборчик замечательный. И облом сразу. И куда рыть ХЗ. Обидно.
Похоже придется сначала искать способ проверить датчик. Было бы жаль, если мертвый. До меня посылки едут от 2 до 3 месяцев.
И да, я подавал на датчик 5 вольт. Возможно этим и убил. Или не убил. А ведь читал, что у него свой стабилизатор и он 5 вольт не боится.
Подал 3,5 вольта от ардуино на питание - ничего не изменилось. Так же через несколько секунд начинает часто-часто (герц 10) моргать светодиод L на ардуино и все. Дисплей чистый. Дисплей рабочий 100%. Он у меня отдельным блочком с адаптером на 5 вольтовые устройства.
Для начала чтоб проверить датчик залейте скетч из примеров и посмотрите показания на мониторе ардуины.
А цветочик на дисплее в скетче с поста №49 будет гореть долго , чтоб ускорить начало вывода показаний (при настройке ) надо уменьшить значения в строках 21 и 44. еще раз желаю успехов и еще раз внимательней прочитайте всю ветку форума. Расписано всё очень подробно все изменения в программе. Я сам начинал почти-что отсюда.
Библиотеки #include <avr/sleep.h> и #include <avr/wdt.h> работают не со всеми версиями загрузчика (bootloader) ардуины.
Пост 185 (Лекс 59) Похоже у ВАС эта проблема с самого начала. Ссылку дать не могу(сам уже забыл где читал). По поисковику - "режим watchdog в ардуино" (режим сна в ардуино) ищем , пробуем работоспособность этого режима в своей дуине(методика проверки описана там же), не работает - перепрошиваем bootloader на раброчую (с этими библиотеками) версию.
Всё это для скетча из 38 поста . Там всё делалось на минимальное потребление энергии . Пост 55 - эта конструкция с отключенным светодиодом и подсветкой потребляла 362 микроампера. Батарейный вариант. Если вопрос экономии электроэнергии не стоит, лучше взять какой нибуть другой скеч(без режима сна).
В конце концов у меня остался вариант пост109 , 117 с питанием от адаптера квартирного безпроводного телефона (рядом база стоит). Работает со времени поста109 безотказно.
Ещё раз заострю - не пытайтесь сделать всё и сразу. В теме несколько моих конструкций и доработок чужих идей. Не всё получалось сразу.......
Для начала чтоб проверить датчик залейте скетч из примеров и посмотрите показания на мониторе ардуины.
Бубен в руки и танцуем.
Похоже датчик не пережил знакомство с 5 вольтами. Жаль. Теперь долго и упорно ждать нового. Китай от меня вот он, рядом, но нет сначала поедет посылка в Москву, и только потом ко мне.
Всё это для скетча из 38 поста . Там всё делалось на минимальное потребление энергии . Пост 55 - эта конструкция с отключенным светодиодом и подсветкой потребляла 362 микроампера. Батарейный вариант. Если вопрос экономии электроэнергии не стоит, лучше взять какой нибуть другой скеч(без режима сна).
В конце концов у меня остался вариант пост109 , 117 с питанием от адаптера квартирного безпроводного телефона (рядом база стоит). Работает со времени поста109 безотказно.
За эту информацию спасибо. Думаю пригодится не только мне. Ну а мне сейчас ждать нового датчика. Да еще пока сформирую заказ на то на се, чтобы десять раз не бегать. Этот датчик купил у знакомого, он их выписал два с запасом. Но увы, все по законам Мерфи: "Все что может быть понято неправильно, будет понято неправильно". Так и я не знал про два разных исполнения датчика, как и человек, пост которого я читал. Он говорил про другое исполнение. Что оно не боится и 6 вольт.
Но монитор порта говорит, что датчик признаков жизни не подает. Пробовал примеры из разных библиотек.
А использовать я буду вариант на сетевом питании. Мне бесперебойность не важна, а вот возиться с аккумами годами совсем неохота.
У меня все датчики заказаны от разных поставщиков и все со стабилизаторами. Его на платке отлично видно в корпусе sot-23. Этот стабилизатор с низким подением напряжения поэтому модуль работает от 3,3 и 5,0 вольт. А вот переполюсовки он боится и то не совсем сгорает а начинает сильно врать.
Этот стабилизатор с низким подением напряжения поэтому модуль работает от 3,3 и 5,0 вольт. А вот переполюсовки он боится и то не совсем сгорает а начинает сильно врать.
Там действительно есть стабилизатор. Я потому его так спокойно и подключал. И сейчас не понимаю почему в даташите указаны 3,3 вольта. Нафик он тогда нужен стабилизатор? Модуль с 4 выводами. Я только что пробовал его прогонять примерами из трех установленых у меня библиотек на такие датчики. Перепробовал все примеры из каждого. Монитор не откликнулся ни разу.
Часом ранее на этой же ардуино нано я проверил часы 1307. Порты она использует те же. Нормально. Монитор откликается кракозяблами.
Думаю датчик мертв. Возможно мне не повезло изначально. Обидно.
Немного инфы по дисплею 3110. Сегодня подключал его для освоения. Через адаптер. Все норм все работает. Потом смотрю, а первая нога дисплея (Vcc) воткнута в соседнюю дырку на макетной панели. Т.е. плюс 5 вольт не было подключено вобще. А дисплей работает.
Попробовал на втором дисплее - аналогично. Я ХЗ, опасно это для дисплея или нет. Но стоит иметь в виду подобное знание. Что дисплей может показывать, получая питание через порты. На адаптере у меня резистивные делители 1к и 2к и три диода гасят питание.
написал простенький барограф (домашнюю метеостанцию)
Класс! Особенно понравились объяснения. Как раз для начинающих вроде меня. Все предельно ясно.
Собрал. Увы - датчик мертв. Без него чего-то рисует. С ним ничего не происходит. Ладно, бывают в жизни огорчения.
Пожалуй вы правы и график температуры тоже не будет лишним. Особенно летом. Для себя буду выбирать длительность графика сутки. Практика покажет.
Но сейчас ждать придется.
Понравились комментарии в скетче. Кстати, а как делается хекс? Ну, если объяснение короткое. Если длинное - разыщу сам.
Так, чувствую, что барограф у меня точно будет. Либо один либо другой. Там решу.
Кстати, вы неправы относительно количества бароГРАФОВ в сети. Не замечал такого. Барометров, да, хватает. А толку? Какое давление было вчера? А час назад? В какую сторону оно ползет? Или на месте стоит? Голова трещит потому, что давление меняется, или есть другие причины?
Барограф на порядок интереснее барометра для меня. Да и для всех метеозависимых (я пока, тьфу-тьфу, к ним не отношусь).
При повторном просмотре видео заметил: После заполнения шкалы график обнуляется и по новой рисует. Это не есть здорово. График должен ползти, сдвигаться. Иначе не всегда будет понятна динамика.
Это можно поправить простыми средствми?
За объяснения по хексу спасибо. Предельно четко и понятно. Повесил себе текст в заметках, пока не набил руку.
При повторном просмотре видео заметил: После заполнения шкалы график обнуляется и по новой рисует. ............
В таком ключе не думал, так как этот написал просто для разминки с датчиком, но вы правы если за сутки или двое накопятся данные, потом обнулятся не понятно будет.
В общем раз этот девайс оказался кому-то еще и интересен сделаю чтоб график просто полз в лево!))
Доброго времени суток. Только 10.0 и всё отображается с десятыми.
Точка, с запятой не идёт.
Спасибо.
Вникнуть пока некогда. Первое впечатление - как то сумбурно..... неупорядочно написано. А не удаляйте ..... Поправте всё что нужно и выложите снова (если не пропадёт интерес).
Я своё уже не хочу переделывать
Код рабочий.
Доброго времени Андрей. Так код изначально Ваш. Пост #49, soznik мне помогал, спасибо ему за то.
Алексей Вы наверное не поняли здесь разговор шел о другой версии проекта на дисплее 128х64 монохромном размером 3,2"
Я предложил вариант с тремя страницами и двумя видами графика , а Андрей сказал хватит баловатся усовершенствованию предела нет.
Да и еще Алексей я смотрю у вас собранно на АТмеге и стоит кварц . Если кварц на 8 Мгц то можно изменить FUSE биты и сделать на внутреннем генераторе ( я так думаю).
Вот он добавил комменарии и датчик температуры DS18B20 получилось 101%
Пришлось поменять библиотеку на датчик давления сейчас занято 96% .
Помогите освободить немного памяти под анемометр. (непропадать же вертушке на крыше)
Простите я на nokia 5110 застрял.
Да у меня питание 3,3 , кварц на 8М соответственно. Я не очень на внутренний генератор надеюсь. На фото макетка, а так платка своего изготовления, потому и подключение дисплея своё. Попытаюсь С° вставить.
Алексей как вы написали значек градуса здесь на клавиатуре его нет.
А программе прийдется наверно рисовать пикселями или линиями в библиотеке его то-же нет.
display.drawPixel(80,8,BLACK) ;
display.drawPixel(81,9,BLACK) ; и.т.д
или drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color),
окружность типа display.drawCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color); у меня не идет.
Доброго времени суток. Не поделитесь скетчем на этот дисплей.
TFT 1,8
С уважением Алексей.
А я все "мусолю" скеч автора темы (Sergey_Ch), восновном упрощая его но и немного модернизируя... "Все гениальное - ПРОСТО!!!", правило, которым я руководствуюсь часто. В барометре, обычном бытовом барометре (не альтиметре), даже нет особой нужды созерцать показания в абсолютной величине. Ибо давление, не воспринимается человеком например так, как температура. Основная цель- иметь график его изменения за последние сутки - двое, из чего делается заключение о тенденции вероятного изменения погоды и самочувствия... Конечно, не будет лишним показать и текущее, особенно имея на "борту" такие возможности.
Основные изменения ПО на текущий момент - отсутствие кнопок, показаний напряжения АКБ (так как борометр домашний, стационарный), диапазон измерения выбран оптимальным (740-780mm Hg), базовая (нулевая) линия графика проходит по значению 760mm Hg, что соотв. нормальному АД, исходя из этого, на мой взгляд, шкала справа оказалась не эффективной (не нужной), за счет чего диапазон полезного для графика места был немного расширен, восприятие на мой взгляд, более удобное.
В планах - текущие показания должны менять сное положение, если закрываются графиком, переход на OLED который еще не пришел из КНДР..
Слева: предыдущий вариант (интервал сутки), справа: новый вариант (полтора суток, время еще не прошло)
Сделал барометр с таким кодом перед рождеством за пару дней, забыл сфотать - отдал отцу (у него давление просто ужас как скачет от чего не попадя), код использовал с первых постов, но добавил авторегуляцию шкалы(самое простое решение избавляющее от перебора диапазонов - тем более изначально оно не правильно работало при смене диапазона, дальше не следил). Комментировал сам себе чтоб не забыть потом. С платой мини влезло все в коробку от кнопок, еще и выключатель подсветки сделал сбоку тумблером.
"Все гениальное - ПРОСТО!!!"
а с какой целью 2 раза снимать давление с датчика?
aruinoVit
Что-то с часами вообще не то (не компилируется).
Попробуйте какую-нить другую библиотеку - их штук 5 разных с одним названием; что то другое предположить сложно не зная что там за ошибка (я вообще все по очереди прикручивал после того как сразу не заработало, хотя в итоге и сделал почти так как и задумывал).
........переход на OLED который еще не пришел из КНДР..
Круто!
Северные корейцы после термоядерных бомб уже начали OLED дисплеи делать! ;)
Господа, здравствуйте. Просьба-вопрос от новичка в Ардуино (но не в электронике).
В Ардуино я с неделю всего вникаю. Данный прибор ОЧЕНЬ мне интересен. Попытка залить код в ардуино нано провалилась. Понимаю, что надо подключать библиотеки (я в этом пока разбираюсь плохо). Надергал разных и попытался приаттачить. Результат - окно ардуино айде стало просто черным. После того, как он ругнулся на библеотеки. Перезапуск результата не изменил.
Но это фиг с ним. Разберусь и разорхивирую программу еще раз. Видимо где-то оказались двойными библиотеки.
Не могли кто-нибудь выложить комплектно скетч и библиотеки?
Матчасть - Ардуино нано либо про мини. ЛСД нокии 3310 датчик давления BMP180
Здесь файлы не приклепляются . Берете любой скетч из ветки .
К примеру мой с поста № 49 из него копируем по одной библиотеке и гуглим.
в этом примере 8 библиотек поштучно ищем.
лучше скачивать в ZIP архиве и в ардуине IDE добавлять
как добавлять тоже гугл в помощь .
Сам учился полгода назад методом проб и ошибок и был рад любой подсказке.
На ютубе много уроков.
Будут вопросы спрашивай ещё.
Спасибо. Немного понятнее стало. Но засада есть и здесь. Некоторые библиотеки без проблем. Некоторые (
Wire.h,
avr/sleep.h,
avr/wdt.h) только описания. Я понимаю это так, что эти библиотеки модифицируются под конкретные устройства? Если это так, то я приплыл.
Спасибо. Немного понятнее стало. Но засада есть и здесь. Некоторые библиотеки без проблем. Некоторые (
Wire.h,
avr/sleep.h,
avr/wdt.h) только описания. Я понимаю это так, что эти библиотеки модифицируются под конкретные устройства? Если это так, то я приплыл.
avr/sleep.h, avr/wdt.h их не надо ставить, они уже в комплекте идут.
Только инклюд написать
Вот тут лежат: arduino-1.6.9\hardware\tools\avr\avr\include\avr
Прикрутил библиотеку на бародатчик. Скопировал скетч из 49 поста. Результат:
Barograf_1:35: error: invalid digit "8" in octal constant
Barograf_1:37: error: invalid digit "9" in octal constant
Barograf_1:55: error: invalid digit "8" in octal constant
Barograf_1:57: error: invalid digit "9" in octal constant
Barograf_1:75: error: invalid digit "8" in octal constant
Barograf_1:77: error: invalid digit "9" in octal constant
Barograf_1:95: error: invalid digit "8" in octal constant
Barograf_1:97: error: invalid digit "9" in octal constant
Barograf_1:115: error: invalid digit "8" in octal constant
Barograf_1:117: error: invalid digit "9" in octal constant
Barograf_1:135: error: invalid digit "8" in octal constant
Barograf_1:137: error: invalid digit "9" in octal constant
Barograf_1:155: error: invalid digit "8" in octal constant
Barograf_1:157: error: invalid digit "9" in octal constant
Barograf_1:159: error: invalid digit "8" in octal constant
Barograf_1:161: error: invalid digit "8" in octal constant
Barograf_1:163: error: invalid digit "8" in octal constant
Barograf_1:165: error: invalid digit "8" in octal constant
Barograf_1:167: error: invalid digit "8" in octal constant
Barograf_1:169: error: invalid digit "8" in octal constant
Barograf_1:171: error: invalid digit "8" in octal constant
Barograf_1:173: error: invalid digit "8" in octal constant
Barograf_1:175: error: invalid digit "8" in octal constant
Barograf_1:177: error: invalid digit "9" in octal constant
Barograf_1:179: error: invalid digit "9" in octal constant
Barograf_1:181: error: invalid digit "9" in octal constant
Barograf_1:183: error: invalid digit "9" in octal constant
Barograf_1:185: error: invalid digit "9" in octal constant
Barograf_1:187: error: invalid digit "9" in octal constant
Barograf_1:189: error: invalid digit "9" in octal constant
Barograf_1:191: error: invalid digit "9" in octal constant
Barograf_1:193: error: invalid digit "9" in octal constant
Barograf_1:195: error: invalid digit "9" in octal constant
Barograf_1:197: error: invalid digit "9" in octal constant
Barograf_1:1: error: expected unqualified-id before numeric constant
exit status 1
invalid digit "8" in octal constant
Ардуино Нано.
не понял откуда такаой лог
Это сообщение ардуино айде об ошибке при компиляции. Со скетчем из 38 поста - нечто похожее. Пробовал и другую версию программы ардуино. Результат схож. Сам нифига не понял, что это означает.
Делал так:
Новое окно. Удаляю содержимое. Копирую скетч из поста. Вставляю а ардуино айде. Заливаю.
Выскакивает это либо подобное сообщение об ошибках.
Возможно что-то делаю неправильно. Но с другими скетчами прокатывало. Например тестер аккумуляторов от Бодрого 2014.
какя версия ардуины IDE стоит увас
Когда редактировал это скетч у
меня была версия 1,6,6 сейчас 1,6,8 попробовал не идет ругается на строку
47 dps.init(MODE_ULTRA_HIGHRES, 12000, true);
пока не пойму или библиотеку не ту поставил || ?
arduino-1.6.4 и arduino-1.6.8-windows. Обе компактные версии (без установки).
попробуйте установить полную версию 1.6.6
на ней у меня работало , а сейчас на версии 1.6.8 все скетчи с BMP-085 ругаются на "dps.init"
В облачном сервисе компелируется нормально.
https://codebender.cc/sketch:205188
https://codebender.cc/personallibrary/bmp085#BMP085.h
В кодебендере регистрироваться не буду. Я ретроград. Облачных сервисов избегаю.
Спасибо за информацию. Сейчас разорхивируется 1.6.6 и попробую.
успехов.
Оки. Вгрузилось. Благодарю вас. Пробовать буду уже завтра. Сегодня поздновато.
А версия оказалась тоже компактная без установки.
Фигушки. При отсоединении линий данных от ардуино (А4, А5) дисплей показывает цветочек. При подключеном датчике не происходит ничего. Дисплей не реагирует.
Датчик у меня BMP180. Читал, что библиотека подходит от ВМП085. Возможно это не так?
Блин, я уже размечтался о компактном приборчике. На барометры поглядываю давно, но барографе даже и не мечтал. А тут такой приборчик замечательный. И облом сразу. И куда рыть ХЗ. Обидно.
Похоже придется сначала искать способ проверить датчик. Было бы жаль, если мертвый. До меня посылки едут от 2 до 3 месяцев.
И да, я подавал на датчик 5 вольт. Возможно этим и убил. Или не убил. А ведь читал, что у него свой стабилизатор и он 5 вольт не боится.
Подал 3,5 вольта от ардуино на питание - ничего не изменилось. Так же через несколько секунд начинает часто-часто (герц 10) моргать светодиод L на ардуино и все. Дисплей чистый. Дисплей рабочий 100%. Он у меня отдельным блочком с адаптером на 5 вольтовые устройства.
Жесть. Попытался залить в ардуино другой скетч. С поста 38. Фиг. Ошибки.
Залил блинк, поморгал нормально.
Попытался залить тот же скетч, что получался. С поста 49 - фигушки, снова ошибки.
Перезапустил ардуино айде и переткнул ардуинку, снова попытался - результат прежний.
Что за хрень - какие то программы льются без проблем, какие то только с бубном и случайно. Непонятки.
Для начала чтоб проверить датчик залейте скетч из примеров и посмотрите показания на мониторе ардуины.
А цветочик на дисплее в скетче с поста №49 будет гореть долго , чтоб ускорить начало вывода показаний (при настройке ) надо уменьшить значения в строках 21 и 44. еще раз желаю успехов и еще раз внимательней прочитайте всю ветку форума. Расписано всё очень подробно все изменения в программе. Я сам начинал почти-что отсюда.
Бубен в руки и танцуем.
Пост 185 (Лекс 59) Похоже у ВАС эта проблема с самого начала. Ссылку дать не могу(сам уже забыл где читал). По поисковику - "режим watchdog в ардуино" (режим сна в ардуино) ищем , пробуем работоспособность этого режима в своей дуине(методика проверки описана там же), не работает - перепрошиваем bootloader на раброчую (с этими библиотеками) версию.
Всё это для скетча из 38 поста . Там всё делалось на минимальное потребление энергии . Пост 55 - эта конструкция с отключенным светодиодом и подсветкой потребляла 362 микроампера. Батарейный вариант. Если вопрос экономии электроэнергии не стоит, лучше взять какой нибуть другой скеч(без режима сна).
В конце концов у меня остался вариант пост109 , 117 с питанием от адаптера квартирного безпроводного телефона (рядом база стоит). Работает со времени поста109 безотказно.
Ещё раз заострю - не пытайтесь сделать всё и сразу. В теме несколько моих конструкций и доработок чужих идей. Не всё получалось сразу.......
Для начала чтоб проверить датчик залейте скетч из примеров и посмотрите показания на мониторе ардуины.
Бубен в руки и танцуем.
Похоже датчик не пережил знакомство с 5 вольтами. Жаль. Теперь долго и упорно ждать нового. Китай от меня вот он, рядом, но нет сначала поедет посылка в Москву, и только потом ко мне.
Таким образом, пока откланиваюсь...
Всё это для скетча из 38 поста . Там всё делалось на минимальное потребление энергии . Пост 55 - эта конструкция с отключенным светодиодом и подсветкой потребляла 362 микроампера. Батарейный вариант. Если вопрос экономии электроэнергии не стоит, лучше взять какой нибуть другой скеч(без режима сна).
В конце концов у меня остался вариант пост109 , 117 с питанием от адаптера квартирного безпроводного телефона (рядом база стоит). Работает со времени поста109 безотказно.
За эту информацию спасибо. Думаю пригодится не только мне. Ну а мне сейчас ждать нового датчика. Да еще пока сформирую заказ на то на се, чтобы десять раз не бегать. Этот датчик купил у знакомого, он их выписал два с запасом. Но увы, все по законам Мерфи: "Все что может быть понято неправильно, будет понято неправильно". Так и я не знал про два разных исполнения датчика, как и человек, пост которого я читал. Он говорил про другое исполнение. Что оно не боится и 6 вольт.
Но монитор порта говорит, что датчик признаков жизни не подает. Пробовал примеры из разных библиотек.
А использовать я буду вариант на сетевом питании. Мне бесперебойность не важна, а вот возиться с аккумами годами совсем неохота.
Лекс 59 попробуйте еще раз проверить датчик
У меня все датчики заказаны от разных поставщиков и все со стабилизаторами. Его на платке отлично видно в корпусе sot-23. Этот стабилизатор с низким подением напряжения поэтому модуль работает от 3,3 и 5,0 вольт. А вот переполюсовки он боится и то не совсем сгорает а начинает сильно врать.
Этот стабилизатор с низким подением напряжения поэтому модуль работает от 3,3 и 5,0 вольт. А вот переполюсовки он боится и то не совсем сгорает а начинает сильно врать.
Там действительно есть стабилизатор. Я потому его так спокойно и подключал. И сейчас не понимаю почему в даташите указаны 3,3 вольта. Нафик он тогда нужен стабилизатор? Модуль с 4 выводами. Я только что пробовал его прогонять примерами из трех установленых у меня библиотек на такие датчики. Перепробовал все примеры из каждого. Монитор не откликнулся ни разу.
Часом ранее на этой же ардуино нано я проверил часы 1307. Порты она использует те же. Нормально. Монитор откликается кракозяблами.
Думаю датчик мертв. Возможно мне не повезло изначально. Обидно.
Немного инфы по дисплею 3110. Сегодня подключал его для освоения. Через адаптер. Все норм все работает. Потом смотрю, а первая нога дисплея (Vcc) воткнута в соседнюю дырку на макетной панели. Т.е. плюс 5 вольт не было подключено вобще. А дисплей работает.
Попробовал на втором дисплее - аналогично. Я ХЗ, опасно это для дисплея или нет. Но стоит иметь в виду подобное знание. Что дисплей может показывать, получая питание через порты. На адаптере у меня резистивные делители 1к и 2к и три диода гасят питание.
Получил несколько датчиков BMP180-очень понравились.
Чтоб немного опробовать датчики в деле,
написал простенький барограф (домашнюю метеостанцию)
Кому интересно смотрим видео!
Все материалы выложил в открытый доступ!
написал простенький барограф (домашнюю метеостанцию)
Класс! Особенно понравились объяснения. Как раз для начинающих вроде меня. Все предельно ясно.
Собрал. Увы - датчик мертв. Без него чего-то рисует. С ним ничего не происходит. Ладно, бывают в жизни огорчения.
Пожалуй вы правы и график температуры тоже не будет лишним. Особенно летом. Для себя буду выбирать длительность графика сутки. Практика покажет.
Но сейчас ждать придется.
Понравились комментарии в скетче. Кстати, а как делается хекс? Ну, если объяснение короткое. Если длинное - разыщу сам.
Так, чувствую, что барограф у меня точно будет. Либо один либо другой. Там решу.
Кстати, вы неправы относительно количества бароГРАФОВ в сети. Не замечал такого. Барометров, да, хватает. А толку? Какое давление было вчера? А час назад? В какую сторону оно ползет? Или на месте стоит? Голова трещит потому, что давление меняется, или есть другие причины?
Барограф на порядок интереснее барометра для меня. Да и для всех метеозависимых (я пока, тьфу-тьфу, к ним не отношусь).
........... Кстати, а как делается хекс? Ну, если объяснение короткое. Если длинное - разыщу сам.
...................
Короткое.
В настройка IDE Ардуино поставьте галочку показывать подробности компиляции.
Потом просто компилируете и в логах снизу пишется временная папка где сохранился скетч,
пока не закрыли IDE идем туда и берем.
При повторном просмотре видео заметил: После заполнения шкалы график обнуляется и по новой рисует. Это не есть здорово. График должен ползти, сдвигаться. Иначе не всегда будет понятна динамика.
Это можно поправить простыми средствми?
За объяснения по хексу спасибо. Предельно четко и понятно. Повесил себе текст в заметках, пока не набил руку.
При повторном просмотре видео заметил: После заполнения шкалы график обнуляется и по новой рисует. ............
В таком ключе не думал, так как этот написал просто для разминки с датчиком, но вы правы если за сутки или двое накопятся данные, потом обнулятся не понятно будет.
В общем раз этот девайс оказался кому-то еще и интересен сделаю чтоб график просто полз в лево!))
Доработал скетч.
--построение графиков
--управление подсветкой
вот видео
bodriy2014
Всё это хорошо но датчик температуры надо применить отдельный на пример DS18b20
т.к. в ВМР-180 происходт саморазогрев и показания сильно завышаются
в этой ветке форума об этом уже писалось.