Проект предназначен для отображения температуры на дисплее.
Схема содержит следующее:
- Arduino Nano (AtMega328p)
- 4-значный 7-сегментныйдисплей (Kingbright CA56-12SRWA)
- 74HC595N сдвиговый регистр
- 4x 220 Ом для дисплея
- DHT11 датчик температуры и влажности
- 1 кОм для резистораsensor
Программа:
#include "DHT.h"
#define DHTPIN 7
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
const int latchPin = 5;
const int dataPin = 6;
const int clockPin = 4;
const int digitPins[4] =
{
A0, A3, A2, A1
};
const byte digit[10] =
{
B01010000, //0
B11010111, //1
B01100100, //2
B01000110, //3
B11000011, //4
B01001010, //5
B01001000, //6
B11010110, //7
B01000000, //8
B01000010 //9
};
int digitBuffer[4] = {0};
int digitScan = 0;
void updateDisp(){
for(byte j = 0; j < 4; j++){
digitalWrite(digitPins[j], LOW);
}
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, B11111111);
digitalWrite(latchPin, HIGH);
delayMicroseconds(100);
digitalWrite(digitPins[digitScan], HIGH);
digitalWrite(latchPin, LOW);
if(digitScan==1){
shiftOut(dataPin, clockPin, MSBFIRST, ~(digit[digitBuffer[digitScan]] |
B01000000));
}
else
{
shiftOut(dataPin, clockPin, MSBFIRST, ~(digit[digitBuffer[digitScan]]));
}
digitalWrite(latchPin, HIGH);
digitScan++;
if(digitScan > 3){digitScan = 0;}
}
void setup() {
Serial.begin(9600);
pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
for(int i = 0; i < 4; i++){
pinMode(digitPins[i], OUTPUT);
}
dht.begin();
}
void loop() {
float h = dht.readHumidity();
float t = dht.readTemperature();
float hi = dht.computeHeatIndex(t, h, false);
digitBuffer[3] = int(t)/1000;
digitBuffer[2] = (int(t)%1000)/100;
digitBuffer[0] = (int(t)%100)/10;
digitBuffer[1] = (int(t)%100)%10;
updateDisp();
Serial.println(t);
delay(5);
}
Проблема в том, что светодиоды не показывают числа, но я тестировал двоичный файл, и в тестовой программе все цифры работали.Также почти каждые 2 секунды все светодиоды поворачиваются на f, а затем включаются снова.В теории не может быть проблем ни с компонентами, ни со связями.Пожалуйста, не сердитесь, если я где-то допустил огромную ошибку, я новичок.Меня больше интересует схема, чем кодирование, я не смог решить проблему.