Van egy Arduino Nano projektem, ahol egy DHT 11-es hőmérő által mért hőmérsekletet szeretném egy 4 számjegyű 7 szegmenses kijelzőn megjeleníteni, egy 74HC595 segítségével, de nem működik. Technikai paraméterek lennt. Valaki valami megoldás?
Mikrovezérlő: Arduino Nano(AtMega328p)
Kijelző: Kingbright CA56-12SRWA (közös anód)
Szenzor: DHT11
Shift register: 74HC595
Program:
#include "DHT.h" // include library code
/********************************/
const int digitPins[4] = {A0,A2,A1,A3}; //4 common anode pins of the display
const int clockPin = 4; //74HC595 Pin 11 SHcp
const int latchPin = 5; //74HC595 Pin 12 STcp
const int dataPin = 6; //74HC595 Pin 14 DS
const int DHTPIN = 7; //DHT sensor connected to this pin
const byte digit[10] = //seven segment digits in bits
{
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;
// Uncomment whatever type you're using!
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
DHT dht(DHTPIN, DHTTYPE);// Initialize DHT sensor
//************************************************************************
void setup(){
for(int i=0;i<4;i++)
{
pinMode(digitPins[i],OUTPUT);
}
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
dht.begin();
}
//writes the temperature on display
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==2)
shiftOut(dataPin, clockPin, MSBFIRST, ~(digit[digitBuffer[digitScan]] | B01000000)); //print the decimal point on the 3rd digit
else
shiftOut(dataPin, clockPin, MSBFIRST, ~digit[digitBuffer[digitScan]]);
digitalWrite(latchPin, HIGH);
digitScan++;
if(digitScan>3) digitScan=0;
}
void loop(){
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
// Read temperature as Celsius
float t = dht.readTemperature();
digitBuffer[3] = (int(t)%100)/10;
digitBuffer[2] = (int(t)%100)%10;
digitBuffer[1] = (int(t)%1000)/100;
digitBuffer[0] = int(t)/1000;
updateDisp();
delay(2);
}
A digits tömb elemei jók, teszteltem egy másik programmal.
A probléma az, hogy nem számokat ír ki, hanem összevissza kapcsolgatja az egyes szegmenseket, pedig a mért adat jó(Serial.println() segítségével teszteltem), és kb. 2 másodpercenként csak egy szegmens világít.
Valaki valami megoldás?
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!