У меня есть 4-значный 7-сегментный проект с Arduino Nano, но он не работает - PullRequest
0 голосов
/ 15 мая 2018

Проект предназначен для отображения температуры на дисплее.

Схема содержит следующее:

  • 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, а затем включаются снова.В теории не может быть проблем ни с компонентами, ни со связями.Пожалуйста, не сердитесь, если я где-то допустил огромную ошибку, я новичок.Меня больше интересует схема, чем кодирование, я не смог решить проблему.

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Вы также можете использовать чип MAX7219 ...

0 голосов
/ 15 мая 2018

Я думаю, что вы использовали код отсюда
https://github.com/adafruit/DHT-sensor-library/blob/master/examples/DHTtester/DHTtester.ino

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

Увеличьте задержку с 5 (что составляет 5 мс) до примерно 250 (до 250 мс), вы увидите цифры. Я бы предложил использовать 2000 мс, но я чувствую, что 250 должно работать.

...