Уличный измеритель влажности и температуры.

pixel28
Offline
Зарегистрирован: 23.11.2015

Всем привет. Заказали мне сделать измеритель влажности и теремпературы на улицу. Тоесть это будут большие семисегментные индикаторы (или собрать на светодиодах) , датчик влажности и теремпературы ( скорее всего DHT22 ) . В arduino я не сказать, что полный нуб, но что-то уже умею. Есть несколько вопросов по комплектующим и по програмной части.

Первый вопрос это какой индикатор взять? Нужен достаточно большой, что-бы было видно на улице. Хочу взять семисегментный, но не могу найти большие. Есть вариант собрать самому, на светодиодах. 

Потом программа. Хотелось бы взять из интернета, но таких проектов я не встретил. Самому написать будет очень сложно. Наверное прийдется использовать сдвиговый регистр, с ними я еще не работал. Т.к у нано будет маловато выводов. 

 

Извиняюсь, может быть сказал что-то неправильно)

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015
DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Там и больше есть ;)

pixel28
Offline
Зарегистрирован: 23.11.2015

:)  Какие большие)) Я лучше из светодиодов соберу ибо дорого очень)  У меня сейчас больше вопрос по программной части.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

А какие проблемы с программной частью? Как зажигать тот или иной диод в зависимости от того, какаю цифру вывести на сегмент надо?

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015
typedef struct
{
byte A : 1;
byte B: 1;
byte C: 1;
byte D: 1;
byte E: 1;
byte F: 1;
byte G: 1;
} Segment; // описатель одного сегмента

// описываем циферки
// 1
Segment dig1; dig1.B=1; dig1.C = 1;

// 2
Segment dig2; dig2.A=1; dig2.B=1; dig2.G = 1; dig2.D=1; dig2.E=1;

// и т.д.

Segment* segments[] = {&dig0,&dig1,&dig2, &dig3,&dig4,&dig5,&dig6,&dig7,&dig8,&dig9};

void showNum(byte num, bool showDot)
{
// зажигаем нужный номер на индикаторе

 if(num >=0 && num < 10)
{
  Segment* seg = segments[num];
  if(seg.A) // зажигаем сегмент А
 // и т.д.
  

}
}

Тупо и в лоб, неоптимально, некрасиво, но - особо не думал.

pixel28
Offline
Зарегистрирован: 23.11.2015

Я не понял как со сдвиговым регистром работать.  У меня их будет 3. Буду делать 3 индикатора семисегментных. На первом будет вывод букры T или H (температура или влажность) Второй и третий для их значения. Нашел библиотеку простую для работы с ними.  Вот кусок кода, будут зажигать все светодиоды. А если я 2 регистра подключу? Какие тогда пины в коде прописывать? 

 

#include <Shift595.h>

#define   dataPin          11      // pin 14 on the 74HC595
#define   latchPin          4      // pin 12 on the 74HC595
#define   clockPin          2      // pin 11 on the 74HC595

#define   numOfRegisters    1      // number of shift registers present

Shift595 Shifter(dataPin, latchPin, clockPin, numOfRegisters);

void setup(){}

void loop()
{
  Shifter.setRegisterPin(0, HIGH);
  Shifter.setRegisterPin(1, HIGH);
  Shifter.setRegisterPin(2, HIGH);
  Shifter.setRegisterPin(3, HIGH); 
  Shifter.setRegisterPin(4, HIGH);
  Shifter.setRegisterPin(5, HIGH);
  Shifter.setRegisterPin(6, HIGH);
  Shifter.setRegisterPin(7, HIGH);
 
}

Более сложный код я не осилю) Где биты и тд прописывать нужно. 

Я хочу как и вы прописать каждую цифру в массив. 

Раньше я в проектах делал примерно так: 

void snatie() 
{
   
    digitalWrite(greenLed, HIGH);
    delay (250);
    digitalWrite(greenLed, LOW);
    guardSound(4);
    
}

Но тут наверное по другому надо сделать.