Да, понял свою ошибку. Сперва не разобрался, вроде работает, а начал режим переключать - странности какие-то.
Сейчас работает как надо.
#include <stdint.h>
#include <Wire.h>
#include "SPI.h"
#include "SparkFunBME280.h"
#include <DS3231.h>
#include <LiquidCrystal_I2C.h>
BME280 mySensor;
DS3231 rtc(SDA, SCL);
LiquidCrystal_I2C lcd(0x27,16,2);
//Кнопка на 4 пине, подсветка на 10 пине
void setup() {
pinMode(10,OUTPUT);
analogWrite(10,200);
pinMode(4,INPUT_PULLUP);
Wire.begin();
lcd.init();
rtc.begin();
lcd.backlight();
mySensor.settings.commInterface = I2C_MODE;
mySensor.settings.I2CAddress = 0x76;
mySensor.settings.runMode = 3;
mySensor.settings.tStandby = 5;
mySensor.settings.filter = 0;
mySensor.settings.tempOverSample = 1;
mySensor.settings.pressOverSample = 1;
mySensor.settings.humidOverSample = 1;
mySensor.begin();
lcd.setCursor(0,0);
lcd.print(" MeteoChasy");
lcd.setCursor(0,1);
lcd.print(" Evgeniy v.03");
// The following lines can be commented out to use the values already stored in the DS1307
// rtc.setDOW(TUESDAY); // Set Day-of-Week to SUNDAY
// rtc.setTime(14,31, 0); // Set the time to 12:00:00 (24hr format)
// rtc.setDate(27, 03, 2018); // Set the date to October 3th, 2010
delay(5000);
lcd.clear();
}
void loop() {
static byte regim=0; //переменная для режима яркости
static boolean flag=0; //флаг режима яикости
byte pwm_regim[5]={255,190,120,70,20};
if(digitalRead(4)==LOW&&flag==0) //опрос кнопки яркости
{
regim++;
flag=1;
if(regim>4)
{
regim=0;
}
}
if(digitalRead(4)==HIGH&&flag==1)
{
flag=0;
}
analogWrite(10,pwm_regim[regim]);
lcd.setCursor(0,0); //опрос и вывод на экран показаний часов
lcd.print(rtc.getTimeStr(FORMAT_SHORT ));
lcd.setCursor(8,0);
lcd.print(rtc.getDateStr(FORMAT_SHORT ));
static long previousMillis = 0; //переменная хранения времени, чтобы избавиться от делей
long interval = 1000; //переменная интервала опроса датчика
unsigned long currentMillis = millis(); //переменная пршедшего времени
if(currentMillis - previousMillis > interval) { //проверка интервала
previousMillis = currentMillis;
lcd.setCursor(0,1); //опрос и вывод на экран показаний датчика
float temp=mySensor.readTempC()-1.5; //поправка по температуре
lcd.print(temp,1);
lcd.print("'C");
lcd.setCursor(7,1);
lcd.print((uint8_t)mySensor.readFloatHumidity());
lcd.print("%");
lcd.setCursor(11,1);
int mmH=mySensor.readFloatPressure()/133;
lcd.print(mmH);
lcd.print("mm");
}
}
И ещё вопрос. Почему в ИДЕ1.0.6 компилируется, загружается и работает, а в 1.8.1 компилируется, загружается но не работает. То есть данные на экран вывод какую-то хрень?
Да, понял свою ошибку. Сперва не разобрался, вроде работает, а начал режим переключать - странности какие-то.
Сейчас работает как надо.
#include <stdint.h>
#include <Wire.h>
#include "SPI.h"
#include "SparkFunBME280.h"
#include <DS3231.h>
#include <LiquidCrystal_I2C.h>
BME280 mySensor;
DS3231 rtc(SDA, SCL);
LiquidCrystal_I2C lcd(0x27,16,2);
//Кнопка на 4 пине, подсветка на 10 пине
void setup() {
pinMode(10,OUTPUT);
analogWrite(10,200);
pinMode(4,INPUT_PULLUP);
Wire.begin();
lcd.init();
rtc.begin();
lcd.backlight();
mySensor.settings.commInterface = I2C_MODE;
mySensor.settings.I2CAddress = 0x76;
mySensor.settings.runMode = 3;
mySensor.settings.tStandby = 5;
mySensor.settings.filter = 0;
mySensor.settings.tempOverSample = 1;
mySensor.settings.pressOverSample = 1;
mySensor.settings.humidOverSample = 1;
mySensor.begin();
lcd.setCursor(0,0);
lcd.print(" MeteoChasy");
lcd.setCursor(0,1);
lcd.print(" Evgeniy v.03");
// The following lines can be commented out to use the values already stored in the DS1307
// rtc.setDOW(TUESDAY); // Set Day-of-Week to SUNDAY
// rtc.setTime(14,31, 0); // Set the time to 12:00:00 (24hr format)
// rtc.setDate(27, 03, 2018); // Set the date to October 3th, 2010
delay(5000);
lcd.clear();
}
void loop() {
static byte regim=0; //переменная для режима яркости
static boolean flag=0; //флаг режима яикости
byte pwm_regim[5]={255,190,120,70,20};
if(digitalRead(4)==LOW&&flag==0) //опрос кнопки яркости
{
regim++;
flag=1;
if(regim>4)
{
regim=0;
}
}
if(digitalRead(4)==HIGH&&flag==1)
{
flag=0;
}
analogWrite(10,pwm_regim[regim]);
lcd.setCursor(0,0); //опрос и вывод на экран показаний часов
lcd.print(rtc.getTimeStr(FORMAT_SHORT ));
lcd.setCursor(8,0);
lcd.print(rtc.getDateStr(FORMAT_SHORT ));
static long previousMillis = 0; //переменная хранения времени, чтобы избавиться от делей
long interval = 1000; //переменная интервала опроса датчика
unsigned long currentMillis = millis(); //переменная пршедшего времени
if(currentMillis - previousMillis > interval) { //проверка интервала
previousMillis = currentMillis;
lcd.setCursor(0,1); //опрос и вывод на экран показаний датчика
float temp=mySensor.readTempC()-1.5; //поправка по температуре
lcd.print(temp,1);
lcd.print("'C");
lcd.setCursor(7,1);
lcd.print((uint8_t)mySensor.readFloatHumidity());
lcd.print("%");
lcd.setCursor(11,1);
int mmH=mySensor.readFloatPressure()/133;
lcd.print(mmH);
lcd.print("mm");
}
}
И ещё вопрос. Почему в ИДЕ1.0.6 компилируется, загружается и работает, а в 1.8.1 компилируется, загружается но не работает. То есть данные на экран вывод какую-то хрень?
проблема может быть в библиотеке дисплея, скорее всего, могу прислать другую, под которой в 1.8.9 у меня работает, НИК на яндексе
ua6em Буду благодарен. А не может это быть из-за библиотеки Wire. Изначально код компилировался , под 1.0.6. А когда попробовал под 1.8.1 посыпалась чушь, а не данные. И эта чушь на тех местах, где должны быть нормальные данные.
ua6em Буду благодарен. А не может это быть из-за библиотеки Wire. Изначально код компилировался , под 1.0.6. А когда попробовал под 1.8.1 посыпалась чушь, а не данные. И эта чушь на тех местах, где должны быть нормальные данные.
ТС, ещё замечания по коду.
Показания часов не стоит выводить каждый цикл.
Точно так же и вызывать функцию задания ШИМ.
analogWrite(x,y); вызывай непосредственно сразу после смены режима.
И убери дребезг контактов.
Для этого достаточно в конце цикла вызываемого по нажатию кнопки , добавить delay(20); //30,40,50 по желанию
У каждого свои критерии. Кому то "концепция", кому то красота, кому то минимализм, кому то сроки, кому то подучиться...)
Покритикуйте код
Вспомнилась "критика бегуна" из из известного фильма - «Как то он не концептуально пробежал ... да пошёл ты в жопу!»
в сапогах 100 метровку за 14 секунд, да по молодости враз )))
Kakmyc. По Вашим советам переделал код. Всё работает, не тормозит.
Kakmyc. По Вашим советам переделал код. Всё работает, не тормозит.
ua6em.
Потихонечку.
Kakmyc. По Вашим советам переделал код. Всё работает, не тормозит.
if
(regim>5) {
regim=1;}byte pwm_regim[5]={255,190,120,70,10}; analogWrite(10,pwm_regim[regim]);
Точно всё работает?
Kakmyc. По Вашим советам переделал код. Всё работает, не тормозит.
if
(regim>5) {
regim=1;}byte pwm_regim[5]={255,190,120,70,10}; analogWrite(10,pwm_regim[regim]);
Точно всё работает?
это да, в массиве элементы с 0 начинаются
Неправильно переделал.
Курим массивы.
Нумерация начинается с 0.
Значит и regim должен принимать значения 0...4
100 метровку за 14 секунд
А вот граф как-то говорил, что он стометровку может только баксов за 300 и то по настроению.
SLKH, Kakmyc
Да, понял свою ошибку. Сперва не разобрался, вроде работает, а начал режим переключать - странности какие-то.
Сейчас работает как надо.
И ещё вопрос. Почему в ИДЕ1.0.6 компилируется, загружается и работает, а в 1.8.1 компилируется, загружается но не работает. То есть данные на экран вывод какую-то хрень?
SLKH, Kakmyc
Да, понял свою ошибку. Сперва не разобрался, вроде работает, а начал режим переключать - странности какие-то.
Сейчас работает как надо.
И ещё вопрос. Почему в ИДЕ1.0.6 компилируется, загружается и работает, а в 1.8.1 компилируется, загружается но не работает. То есть данные на экран вывод какую-то хрень?
проблема может быть в библиотеке дисплея, скорее всего, могу прислать другую, под которой в 1.8.9 у меня работает, НИК на яндексе
или индекс ссылаться на "[regim-1]"
ua6em Буду благодарен. А не может это быть из-за библиотеки Wire. Изначально код компилировался , под 1.0.6. А когда попробовал под 1.8.1 посыпалась чушь, а не данные. И эта чушь на тех местах, где должны быть нормальные данные.
ua6em Буду благодарен. А не может это быть из-за библиотеки Wire. Изначально код компилировался , под 1.0.6. А когда попробовал под 1.8.1 посыпалась чушь, а не данные. И эта чушь на тех местах, где должны быть нормальные данные.
напиши, вложу ответным
куда написать?
куда написать?
НИК на яндексе
Вы тут что, все радиогубители (судя по никам)?
sadman41
Есть маленько.
Вы тут что, все радиогубители (судя по никам)?
помнится как-то обмолвился, если форум нельзя переделать, его надо возглавить, стараемся )))
ЗЫ а наших всё прибывает и прибывает
ЗЫ а наших всё прибывает и прибывает
Ваших тут - как минимум трое, которых я заметил ;)
А сколько маскируется :)
ТС, ещё замечания по коду.
Показания часов не стоит выводить каждый цикл.
Точно так же и вызывать функцию задания ШИМ.
analogWrite(x,y); вызывай непосредственно сразу после смены режима.
И убери дребезг контактов.
Для этого достаточно в конце цикла вызываемого по нажатию кнопки , добавить delay(20); //30,40,50 по желанию
Kakmyc. Спасибо