標(biāo)題: 基于esp8266的輝光鐘 [打印本頁]

作者: A-MAX    時(shí)間: 2020-4-16 14:22
標(biāo)題: 基于esp8266的輝光鐘
這是我做輝光鐘總結(jié)的一點(diǎn)經(jīng)驗(yàn)
  1. #include <DS1302.h>

  2. //clock config
  3. const int kCePin   = 5;  // 對(duì)應(yīng)rst引腳,Chip Enable
  4. const int kIoPin   = 6;  // 對(duì)應(yīng)data引腳,Input/Output
  5. const int kSclkPin = 7;  // 對(duì)應(yīng)clck引腳,Serial Clock

  6. //建立一個(gè)ds1302 對(duì)象 rtc
  7. DS1302 rtc(kCePin, kIoPin, kSclkPin);

  8. //595 config
  9. int datapin = 2; //DS 14腳 用來串行輸入數(shù)據(jù)
  10. int latchpin = 3; //st_cp 12腳 注:latch 有門閂的意思,可以理解成閘門,控制并行輸出的時(shí)間
  11. int clockpin = 4; //sh_cp 11腳 //595會(huì)在clock的上升沿讀取 1bit data, 對(duì)它的操控封裝在 shiftOut()函數(shù)里了, 不需要大家自己操作。

  12. //clock data
  13. int data_sec = 0; //秒數(shù)數(shù)據(jù)
  14. int data_min = 0; //分鐘數(shù)據(jù)
  15. int data_hour = 0; //小時(shí)數(shù)據(jù)

  16. void setup() {
  17.   Serial.begin(9600);
  18.   nixie_tube_init();
  19. }

  20. void loop() {
  21.   //將當(dāng)前時(shí)間存儲(chǔ)到 t 這個(gè)對(duì)象中
  22.   Time t = rtc.time();
  23.   int hour_gewei = t.hr % 10; //取得個(gè)位數(shù)字 模10
  24.   int hour_shiwei = t.hr / 10;//取得十位數(shù)字 處以十
  25.   int min_gewei = t.min % 10;
  26.   int min_shiwei = t.min / 10;
  27.   int sec_gewei = t.sec % 10;
  28.   int sec_shiwei = t.sec / 10;

  29.   //晚上不顯示
  30.   if( t.hr>=0 and t.hr<=6 ) {
  31.     digitalWrite(latchpin, LOW);
  32.     shiftOut(datapin, clockpin, LSBFIRST, 255);
  33.     shiftOut(datapin, clockpin, LSBFIRST, 255);
  34.     digitalWrite(latchpin, HIGH);
  35.     delay(100000);
  36.     return;
  37.   }
  38.   //分鐘數(shù)變化時(shí)來個(gè)隨機(jī)顯示
  39.   if ((min_shiwei * POW(2,4) + min_gewei) != data_min) {
  40.     random_display(30);
  41.   }
  42.   
  43.   // (5 -> 0101  1-> 0001)   =>  0101 0001  = 0101 * 2^4 + 0001
  44.   // 10 01 => 1001 = 10 * 10^2 + 1
  45.   //  data_sec = sec_shiwei * POW(2,4) + sec_gewei;
  46.   data_min = min_shiwei * POW(2,4) + min_gewei;
  47.   data_hour = hour_shiwei * POW(2,4) + hour_gewei;
  48.   digitalWrite(latchpin, LOW);
  49.   shiftOut(datapin, clockpin, LSBFIRST, data_min);
  50.   shiftOut(datapin, clockpin, LSBFIRST, data_hour);
  51.   digitalWrite(latchpin, HIGH);
  52.   delay(100);
  53. }

  54. int POW(int i, int j) {
  55.   int result = 1;
  56.   if(j == 0) return result;
  57.   for(int k = 0; k < j; k++) {
  58.     result *= i;
  59.   }
  60.   return result;
  61. }

  62. void random_display(int times) {
  63.   for(int i=0; i<times; i++) {
  64.     digitalWrite(latchpin, LOW);
  65.     shiftOut(datapin, clockpin, LSBFIRST, random(1,10) * POW(2,4) + random(1,10));
  66.     shiftOut(datapin, clockpin, LSBFIRST, random(1,10) * POW(2,4) + random(1,10));
  67.     digitalWrite(latchpin, HIGH);
  68.     delay(20);
  69.   }
  70. }


  71. void nixie_tube_init() {
  72.   pinMode(clockpin, OUTPUT);
  73.   pinMode(datapin, OUTPUT);
  74.   pinMode(latchpin, OUTPUT);
  75.   //show something random
  76.   random_display(40);
  77. }
復(fù)制代碼



第三期資料.zip

1.18 MB, 下載次數(shù): 13, 下載積分: 黑幣 -5

輝光管第二期資料.7z

4.08 MB, 下載次數(shù): 12, 下載積分: 黑幣 -5

輝光管系列第一期內(nèi)容.zip

7.02 MB, 下載次數(shù): 13, 下載積分: 黑幣 -5


作者: mr7    時(shí)間: 2020-4-29 09:07
還沒玩過輝光鐘,硬件部分呢?




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1