51

Re: Большие часы на семисегментных индикаторах BJ18101AH

Доброго времени суток. Собрал часы с датчиками на atmega328p. С ВМР-280 температуру и давление показывают. А с DHT11 только нули. Датчик исправный, проверял на мониторе порта. Подключение к процессору тоже правильное. Не знаю где искать.

52

Re: Большие часы на семисегментных индикаторах BJ18101AH

liman324, так-таки не смог я запустить DHT11. Может найдете время и поможете  с выведением показаний этого датчика?

53

Re: Большие часы на семисегментных индикаторах BJ18101AH

Вот тестовый скетч:

#include "DHT.h"
#define DHTPIN 2 // Подключение D2
DHT dht(DHTPIN, DHT11);

void setup() {
  Serial.begin(9600);
  dht.begin();
}
void loop() {
  delay(2000);
  float h = dht.readHumidity(); //Измеряем влажность
  float t = dht.readTemperature(); //Измеряем температуру
  if (isnan(h) || isnan(t)) {  // Проверка. Если не удается считать показания, выводится «Ошибка считывания», и программа завершает работу
    Serial.println("Ошибка считывания");
    return;
  }
  Serial.print("Влажность: ");
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Температура: ");
  Serial.print(t);
  Serial.println(" *C "); //Вывод показателей на экран
}

54

Re: Большие часы на семисегментных индикаторах BJ18101AH

У меня компиляция происходит без ошибок. проверьте установлена ли у Вас библиотека DHT

55 (2021-01-25 22:49:43 отредактировано hvoma4)

Re: Большие часы на семисегментных индикаторах BJ18101AH

Виноват, пропустил #include "DHT.h". Компилируется и показывает влажность и температуру. Это я датчик проверяю отдельно на ардуино уно. А часы у меня собраны на атмега328, поэтому проверить на часах этот скетч не могу. Поскольку заливаю через программатор.

56

Re: Большие часы на семисегментных индикаторах BJ18101AH

liman324, может посмотрите свежими глазами, где ошибка? Датчик влажности показывает нули. Даже датчик поменял ,рабочий на рабочий. Так же менял DHT.h. Все едино.  Данный контент доступен только зарегистрированным пользователям.

57

Re: Большие часы на семисегментных индикаторах BJ18101AH

По коду не вижу ошибок, попробуйте добавить delay после запроса влажности

times = dht.readHumidity(); // вывод влажности

times = dht.readHumidity(); // вывод влажности
delay(500);

58

Re: Большие часы на семисегментных индикаторах BJ18101AH

По прежнему влажность не отображается.

59

Re: Большие часы на семисегментных индикаторах BJ18101AH

Может вход А1 неисправен, можно переместить на А2, проверить.

60 (2021-02-01 18:49:32 отредактировано hvoma4)

Re: Большие часы на семисегментных индикаторах BJ18101AH

Проверял, то же самое. Смотрел на входе датчика осциллографом.  Напряжение +5В на долю секунды падает до 0В. Как бы происходит считывание, но ничего не отображается .
  Как сейчас заметил, считывание происходит тогда, когда еще  не закончилось отображение показания давления. Потом только, спустя через некоторый короткий промежуток времени, переходит на отображение влажности.

61

Re: Большие часы на семисегментных индикаторах BJ18101AH

Все должно работать, пока не пойму почему у Вас не работает.

Загрузите hex сделанный моим Arduino IDE

Данный контент доступен только зарегистрированным пользователям.

62

Re: Большие часы на семисегментных индикаторах BJ18101AH

Нет, не отображает влажность мое "Чудо".

63

Re: Большие часы на семисегментных индикаторах BJ18101AH

Загрузите этот скетч, я его поправил под Ваше подключение, он у меня точно работал, скетч без корректировки времени кнопками

#include <MsTimer2.h>  // http://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip
#include <Wire.h> 
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>
#include <DS3231.h>
#include <DHT.h> 
DHT dht(A1, DHT11); // выход DAT подключен к A1
DS3231 clock;RTCDateTime DateTime;
Adafruit_BMP280 bmp; // I2C
  int an, segm,times,i,pd,pd_p,sek;
  byte a[4];
 
void setup(){  Wire.begin();clock.begin();bmp.begin();dht.begin(); 
MsTimer2::set(2, to_Timer);MsTimer2::start();
  // clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча
   pinMode(9,OUTPUT);  // D9  === A0
   pinMode(10,OUTPUT); // D10 === A1
   pinMode(11,OUTPUT); // D11 === A2
   pinMode(12,OUTPUT); // D12 === A3
   pinMode(13,OUTPUT); // D13 === PD
   pinMode(2,OUTPUT);  // D2  === a
   pinMode(3,OUTPUT);  // D3  === b
   pinMode(4,OUTPUT);  // D4  === c
   pinMode(5,OUTPUT);  // D5  === d
   pinMode(6,OUTPUT);  // D6  === e
   pinMode(1,OUTPUT);  // D1  === f
   pinMode(0,OUTPUT);  // D0  === g
   clock.setOutput(DS3231_1HZ);
   pinMode(A0,INPUT); // SQW DS3231
}
 
void loop(){ 
  DateTime=clock.getDateTime();// опрос времени
  sek=DateTime.second;
  if((sek>=10&&sek<=15)||(sek>=30&&sek<=35)){
    times = bmp.readTemperature();
  a[0]=times/10;
  a[1]=times%10;
  a[2]=11;
  a[3]=12;
  pd_p=0;}
  else if((sek>=15&&sek<=20)||(sek>=35&&sek<=40)){
    times = bmp.readPressure()/133.3224;
  a[0]=13;
  a[1]=times/100;
  a[2]=times/10%10;
  a[3]=times%10;
  pd_p=0;}  
  else if((sek>=20&&sek<=25)||(sek>=40&&sek<=45)){
    times = dht.readHumidity();
  a[0]=14;
  a[1]=10;
  a[2]=times/10;
  a[3]=times%10;
  pd_p=0;}  
  else{
  times = DateTime.hour*100+DateTime.minute;
  a[0]=times/1000;
  a[1]=times/100%10;
  a[2]=times/10%10;
  a[3]=times%10%10;
  if(analogRead(A0)>900){pd_p=1;}else{pd_p=0;}
  }
 }// loop
 
void to_Timer(){ 
  switch(i){
    case 0: cl(); segm=a[0]; pd=0; an=0; anod(); segment();break;
    case 1: cl(); segm=a[1]; pd=pd_p; an=1; anod(); segment();break;
    case 2: cl(); segm=a[2]; pd=0; an=2; anod(); segment();break;
    case 3: cl(); segm=a[3]; pd=0; an=3; anod(); segment();break;}i++;
    if(i>3){i=0;}}
 
void segment(){
  switch(segm){                                                                 
             //  A       B       C       D       E       F       G        PD
    case 0: ch(2,1);ch(3,1);ch(4,1);ch(5,1);ch(6,1);ch(7,1);ch(8,0);ch(13,pd);break;// 0 
    case 1: ch(2,0);ch(3,1);ch(4,1);ch(5,0);ch(6,0);ch(7,0);ch(8,0);ch(13,pd);break;// 1
    case 2: ch(2,1);ch(3,1);ch(4,0);ch(5,1);ch(6,1);ch(7,0);ch(8,1);ch(13,pd);break;// 2
    case 3: ch(2,1);ch(3,1);ch(4,1);ch(5,1);ch(6,0);ch(7,0);ch(8,1);ch(13,pd);break;// 3   
    case 4: ch(2,0);ch(3,1);ch(4,1);ch(5,0);ch(6,0);ch(7,1);ch(8,1);ch(13,pd);break;// 4 
    case 5: ch(2,1);ch(3,0);ch(4,1);ch(5,1);ch(6,0);ch(7,1);ch(8,1);ch(13,pd);break;// 5 
    case 6: ch(2,1);ch(3,0);ch(4,1);ch(5,1);ch(6,1);ch(7,1);ch(8,1);ch(13,pd);break;// 6 
    case 7: ch(2,1);ch(3,1);ch(4,1);ch(5,0);ch(6,0);ch(7,0);ch(8,0);ch(13,pd);break;// 7 
    case 8: ch(2,1);ch(3,1);ch(4,1);ch(5,1);ch(6,1);ch(7,1);ch(8,1);ch(13,pd);break;// 8
    case 9: ch(2,1);ch(3,1);ch(4,1);ch(5,1);ch(6,0);ch(7,1);ch(8,1);ch(13,pd);break;// 9  
   case 10: ch(2,0);ch(3,0);ch(4,0);ch(5,0);ch(6,0);ch(7,0);ch(8,0);ch(13,pd);break;// пусто
   case 11: ch(2,1);ch(3,1);ch(4,0);ch(5,0);ch(6,0);ch(7,1);ch(8,1);ch(13,pd);break;// градус
   case 12: ch(2,1);ch(3,0);ch(4,0);ch(5,1);ch(6,1);ch(7,1);ch(8,0);ch(13,pd);break;// C
   case 13: ch(2,1);ch(3,1);ch(4,0);ch(5,0);ch(6,1);ch(7,1);ch(8,1);ch(13,pd);break;// P
   case 14: ch(2,0);ch(3,1);ch(4,1);ch(5,0);ch(6,1);ch(7,1);ch(8,1);ch(13,pd);break;// H
  }}
void anod(){
  switch(an){                                                             
    case 0:ch(9,1);ch(10,0);ch(11,0);ch(12,0);break;  
    case 1:ch(9,0);ch(10,1);ch(11,0);ch(12,0);break; 
    case 2:ch(9,0);ch(10,0);ch(11,1);ch(12,0);break;
    case 3:ch(9,0);ch(10,0);ch(11,0);ch(12,1);break;
  }}

void cl(){
     segm=10; pd=0; an=0; segment(); anod(); an=1; segment(); anod();  an=2; segment(); anod();  an=3; segment();anod(); 
  }  
 
  void ch(int pin, int logic){digitalWrite(pin,logic);}

64

Re: Большие часы на семисегментных индикаторах BJ18101AH

pinMode(A3,INPUT);  // кнопка вкл-откл датчиков-нажатие === замыкание на +5В

Эту кнопку на А3 - Вы используете с резистором?

Удалите временно эти строки в Вашем скетче

     if(analogRead(A3)>900&&ppp==0){ppp=1;delay(200);}
     if(analogRead(A3)>900&&ppp==1){ppp=0;delay(200);}
Вместо этого кода впишите:
     ppp = 1;

65

Re: Большие часы на семисегментных индикаторах BJ18101AH

Скетч загрузил, показания - нули.
Да, на А3 стоит резистор 10К на минус.
Поменял строки на ррр-1 -нули.  Чудеса...

66

Re: Большие часы на семисегментных индикаторах BJ18101AH

Скетч который без кнопок я опубликовал у меня работает, показывает влажность.

67

Re: Большие часы на семисегментных индикаторах BJ18101AH

Поигрался с фюзами атмеги. Заработало! Вот уж не думал, что с одними фюзами работают часы, ВМР-280, а DHT11 - нет. Но это так. Так что прошу прощения за напрасно отнятое у Вас время. Спасибо за помощь и творческих Вам успехов!

68

Re: Большие часы на семисегментных индикаторах BJ18101AH

При отключении питания время сбрасывается, хотя батарейка на ds3231 стоит или так и должно быть?

69

Re: Большие часы на семисегментных индикаторах BJ18101AH

Нет, так не должно быть.
Попробуйте установить время по времени компиляции

clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча

после прошивки закомментировать и прошить снова

Если время сбросится то что-то с модулем, если нет, то что то со скетчем

70

Re: Большие часы на семисегментных индикаторах BJ18101AH

Вам этот метод проверки скорее всего не подойдет, Вы прошиваете программатором.
Если бы у Вас был модуль USB-TTL то можно прошивать через него используя Arduino IDE/

Re: Большие часы на семисегментных индикаторах BJ18101AH

http://forum.rcl-radio.ru/uploads/images/2021/03/1dc2a79a01e49e67dac8fc1822127faf.jpg
Вот что у меня получилось. Для гаража делал.

72

Re: Большие часы на семисегментных индикаторах BJ18101AH

Уважаемый liman324! Я правильно понял, что в сообщении №49 скетч под индикаторы с общим анодом и ВМЕ-280 с отображением температуры, давления и влажности?

73

Re: Большие часы на семисегментных индикаторах BJ18101AH

№46

74

Re: Большие часы на семисегментных индикаторах BJ18101AH

Для liman324. Большое спасибо, разобрался.

75

Re: Большие часы на семисегментных индикаторах BJ18101AH

Уважаемый liman324! Загрузил скетч из сообщения №46 - полный 0. Не идут даже часы. Когда убираю 12 строку скетча и в 42 строке меняю 100.0F на 133.3224 часы идут, символы Н, Р показывает, но давление, влажность, температура = 000, 00, 0. Датчик у меня BME-280, в библиотеке адрес исправлен на 0х76. Сейчас часы работают без влажности - скетч ниже.

                                                                                                                               
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>

#include <MsTimer2.h>  // http://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip
#include <Wire.h> 
//include <Adafruit_Sensor.h>  // http://rcl-radio.ru/wp-content/uploads/2018/08/Adafruit_Sensor.zip
//include <Adafruit_BMP280.h> // http://rcl-radio.ru/wp-content/uploads/2018/08/Adafruit_BMP280.zip
#include <DS3231.h>  // https://github.com/jarzebski/Arduino-DS3231/archive/master.zip

DS3231 clock;RTCDateTime DateTime;
Adafruit_BME280 bmp; // I2C
  int an, segm,times,i,pd,pd_p,sek;
  byte a[4];
 
void setup(){  Wire.begin();clock.begin();bmp.begin(); 
MsTimer2::set(2, to_Timer);MsTimer2::start();
  // clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча
 pinMode(9,OUTPUT);  // D9  === A0
 pinMode(10,OUTPUT); // D10 === A1
 pinMode(11,OUTPUT); // D11 === A2
 pinMode(12,OUTPUT); // D12 === A3
 pinMode(13,OUTPUT); // D13 === PD
 pinMode(2,OUTPUT);  // D2  === a
 pinMode(3,OUTPUT);  // D3  === b
 pinMode(4,OUTPUT);  // D4  === c
 pinMode(5,OUTPUT);  // D5  === d
 pinMode(6,OUTPUT);  // D6  === e
 pinMode(7,OUTPUT);  // D7  === f
 pinMode(8,OUTPUT);  // D8  === g
clock.setOutput(DS3231_1HZ);
 pinMode(A0,INPUT); // SQW DS3231 
}
 
void loop(){ 
  DateTime=clock.getDateTime();// опрос времени
  sek=DateTime.second;
  if((sek>=10&&sek<=15)||(sek>=30&&sek<=35)){
    times = bmp.readTemperature();
  a[0]=times/10;
  a[1]=times%10;
  a[2]=11;
  a[3]=12;
  pd_p=0;}
  else if((sek>=15&&sek<=20)||(sek>=35&&sek<=40)){
    times = bmp.readPressure()/133.3224;
  a[0]=13;
  a[1]=times/100;
  a[2]=times/10%10;
  a[3]=times%10;
  pd_p=0;}  
  
  else{
  times = DateTime.hour*100+DateTime.minute;
  a[0]=times/1000;
  a[1]=times/100%10;
  a[2]=times/10%10;
  a[3]=times%10%10;
  if(analogRead(A0)>900){pd_p=1;}else{pd_p=0;}
  }
 }// loop
 
void to_Timer(){ 
  switch(i){
    case 0: cl(); segm=a[0]; pd=0; an=0; anod(); segment();break;
    case 1: cl(); segm=a[1]; pd=pd_p; an=1; anod(); segment();break;
    case 2: cl(); segm=a[2]; pd=0; an=2; anod(); segment();break;
    case 3: cl(); segm=a[3]; pd=0; an=3; anod(); segment();break;}i++;
    if(i>3){i=0;}}
 
void segment(){
  switch(segm){                                                                 
             //  A       B       C       D       E       F       G        PD
    case 0: ch(2,1);ch(3,1);ch(4,1);ch(5,1);ch(6,1);ch(7,1);ch(8,0);ch(13,pd);break;// 0 
    case 1: ch(2,0);ch(3,1);ch(4,1);ch(5,0);ch(6,0);ch(7,0);ch(8,0);ch(13,pd);break;// 1
    case 2: ch(2,1);ch(3,1);ch(4,0);ch(5,1);ch(6,1);ch(7,0);ch(8,1);ch(13,pd);break;// 2
    case 3: ch(2,1);ch(3,1);ch(4,1);ch(5,1);ch(6,0);ch(7,0);ch(8,1);ch(13,pd);break;// 3   
    case 4: ch(2,0);ch(3,1);ch(4,1);ch(5,0);ch(6,0);ch(7,1);ch(8,1);ch(13,pd);break;// 4 
    case 5: ch(2,1);ch(3,0);ch(4,1);ch(5,1);ch(6,0);ch(7,1);ch(8,1);ch(13,pd);break;// 5 
    case 6: ch(2,1);ch(3,0);ch(4,1);ch(5,1);ch(6,1);ch(7,1);ch(8,1);ch(13,pd);break;// 6 
    case 7: ch(2,1);ch(3,1);ch(4,1);ch(5,0);ch(6,0);ch(7,0);ch(8,0);ch(13,pd);break;// 7 
    case 8: ch(2,1);ch(3,1);ch(4,1);ch(5,1);ch(6,1);ch(7,1);ch(8,1);ch(13,pd);break;// 8
    case 9: ch(2,1);ch(3,1);ch(4,1);ch(5,1);ch(6,0);ch(7,1);ch(8,1);ch(13,pd);break;// 9  
   case 10: ch(2,0);ch(3,0);ch(4,0);ch(5,0);ch(6,0);ch(7,0);ch(8,0);ch(13,pd);break;// пусто
   case 11: ch(2,1);ch(3,1);ch(4,0);ch(5,0);ch(6,0);ch(7,1);ch(8,1);ch(13,pd);break;// градус
   case 12: ch(2,1);ch(3,0);ch(4,0);ch(5,1);ch(6,1);ch(7,1);ch(8,0);ch(13,pd);break;// C
   case 13: ch(2,1);ch(3,1);ch(4,0);ch(5,0);ch(6,1);ch(7,1);ch(8,1);ch(13,pd);break;// P
   
  }}
void anod(){
  switch(an){                                                             
    case 0:ch(9,1);ch(10,0);ch(11,0);ch(12,0);break;  
    case 1:ch(9,0);ch(10,1);ch(11,0);ch(12,0);break; 
    case 2:ch(9,0);ch(10,0);ch(11,1);ch(12,0);break;
    case 3:ch(9,0);ch(10,0);ch(11,0);ch(12,1);break;
  }}
 
void cl(){
     segm=10; pd=0; an=0; segment(); anod(); an=1; segment(); anod();  an=2; segment(); anod();  an=3; segment();anod(); 
  }  
 
  void ch(int pin, int logic){digitalWrite(pin,logic);}