Kezdőoldal » Elektronikus eszközök » Egyéb kérdések » Van egy Arduino Nano projektem...

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?

Figyelt kérdé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?



#programozás #hőmérséklet #elektronika #DHT11 #shift register #74HC595 #7 szegmenses kijelző #kingbright
2018. febr. 24. 11:44
 1/1 Galekun válasza:
Szia, nekem csak 16x2-es lcd a sikeres, a szegmenses kijelzō nekem se jött be ehez a szenzorhoz
2020. júl. 20. 20:39
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!