Nathan Yonkee / Mbed OS Seeed_Grove_4_Digit_Display_Clock

Dependencies:   Data_Clock_Pair Seeed_Chainable_LED Seeed_Four_Digit_Disp Seeed_IR_Temp_Sensor Seeed_Led_Bar

Fork of Seeed_Grove_4_Digit_Display_Clock by Seeed

Committer:
tulanthoar
Date:
Sun May 21 13:33:34 2017 -0600
Revision:
17:71c14845db51
Parent:
15:abda719ba6e6
use infinite for loop and embed the delay in the loop declaration

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tulanthoar 7:b16b9733d859 1 #ifndef SEEED_FOUR_DIGIT_DISP_H
tulanthoar 7:b16b9733d859 2 #define SEEED_FOUR_DIGIT_DISP_H
tulanthoar 7:b16b9733d859 3 #include "mbed.h"
tulanthoar 12:a16d86fac131 4 #include "DataClockPair.h"
tulanthoar 7:b16b9733d859 5
tulanthoar 7:b16b9733d859 6 class SeeedFourDigitDisp {
tulanthoar 7:b16b9733d859 7 private:
tulanthoar 15:abda719ba6e6 8 int digitTable_[17] = {0x3f, 0x06, 0x5b, 0x4f,
tulanthoar 15:abda719ba6e6 9 0x66, 0x6d, 0x7d, 0x07,
tulanthoar 15:abda719ba6e6 10 0x7f, 0x6f, 0x77, 0x7c,
tulanthoar 15:abda719ba6e6 11 0x39, 0x5e, 0x79, 0x71,
tulanthoar 15:abda719ba6e6 12 0x00
tulanthoar 15:abda719ba6e6 13 };
tulanthoar 7:b16b9733d859 14 static const int onByte_ = 0x88;
tulanthoar 7:b16b9733d859 15 static const int fixedAddrByte_ = 0x44;
tulanthoar 7:b16b9733d859 16 static const int positionBit_ = 0xc0;
tulanthoar 7:b16b9733d859 17 static const int nullDigit_ = 16;
tulanthoar 7:b16b9733d859 18 static const int colonBit_ = 0x80;
tulanthoar 7:b16b9733d859 19 void start_cmd();
tulanthoar 7:b16b9733d859 20 void stop_cmd();
tulanthoar 7:b16b9733d859 21 DigitalOut datPin_;
tulanthoar 7:b16b9733d859 22 DigitalOut clkPin_;
tulanthoar 7:b16b9733d859 23 void pin_delay(int delay_us = 1);
tulanthoar 7:b16b9733d859 24 void send_byte(int byte);
tulanthoar 7:b16b9733d859 25 public:
tulanthoar 15:abda719ba6e6 26 int brightness = 7;
tulanthoar 15:abda719ba6e6 27 bool colonFlag = false;
tulanthoar 7:b16b9733d859 28 void set_digit(int pos, int digit);
tulanthoar 7:b16b9733d859 29 void set_integer(int value);
tulanthoar 7:b16b9733d859 30 void clear_display();
tulanthoar 7:b16b9733d859 31 void turn_on();
tulanthoar 12:a16d86fac131 32 SeeedFourDigitDisp (DataClockPair pins);
tulanthoar 7:b16b9733d859 33 };
tulanthoar 7:b16b9733d859 34
tulanthoar 12:a16d86fac131 35 SeeedFourDigitDisp::SeeedFourDigitDisp(DataClockPair pins) : datPin_(pins.dataPin, 1), clkPin_(pins.clockPin, 1) {
tulanthoar 7:b16b9733d859 36 clear_display();
tulanthoar 7:b16b9733d859 37 }
tulanthoar 7:b16b9733d859 38
tulanthoar 12:a16d86fac131 39 void SeeedFourDigitDisp::pin_delay(int delay_us) {
tulanthoar 12:a16d86fac131 40 wait_us(delay_us);
tulanthoar 12:a16d86fac131 41 }
tulanthoar 12:a16d86fac131 42
tulanthoar 7:b16b9733d859 43 void SeeedFourDigitDisp::start_cmd() {
tulanthoar 12:a16d86fac131 44 datPin_ = !datPin_;
tulanthoar 7:b16b9733d859 45 }
tulanthoar 7:b16b9733d859 46
tulanthoar 7:b16b9733d859 47 void SeeedFourDigitDisp::stop_cmd() {
tulanthoar 7:b16b9733d859 48 datPin_ = 0;
tulanthoar 12:a16d86fac131 49 clkPin_ = !clkPin_;
tulanthoar 7:b16b9733d859 50 pin_delay();
tulanthoar 12:a16d86fac131 51 clkPin_ = !clkPin_;
tulanthoar 12:a16d86fac131 52 datPin_ = !datPin_;
tulanthoar 7:b16b9733d859 53 }
tulanthoar 7:b16b9733d859 54
tulanthoar 12:a16d86fac131 55 void SeeedFourDigitDisp::send_byte(int byte) {
tulanthoar 12:a16d86fac131 56 byte |= 0x100; // bring data high for ack after 8 bits
tulanthoar 12:a16d86fac131 57 for (int i = 0; i < 9; ++i) {
tulanthoar 12:a16d86fac131 58 pin_delay();
tulanthoar 12:a16d86fac131 59 clkPin_ = !clkPin_;
tulanthoar 12:a16d86fac131 60 pin_delay();
tulanthoar 12:a16d86fac131 61 datPin_ = byte & 1;
tulanthoar 12:a16d86fac131 62 byte >>= 1;
tulanthoar 12:a16d86fac131 63 pin_delay();
tulanthoar 12:a16d86fac131 64 clkPin_ = !clkPin_;
tulanthoar 12:a16d86fac131 65 }
tulanthoar 7:b16b9733d859 66 }
tulanthoar 7:b16b9733d859 67
tulanthoar 7:b16b9733d859 68 void SeeedFourDigitDisp::set_digit(int pos, int digit) {
tulanthoar 7:b16b9733d859 69 int flaggedDigit = digitTable_[digit] | (colonFlag ? colonBit_ : 0);
tulanthoar 7:b16b9733d859 70 start_cmd(); //start signal sent to TM1637 from MCU
tulanthoar 7:b16b9733d859 71 send_byte(fixedAddrByte_);
tulanthoar 7:b16b9733d859 72 stop_cmd();
tulanthoar 7:b16b9733d859 73 start_cmd();
tulanthoar 7:b16b9733d859 74 send_byte(pos|positionBit_);
tulanthoar 7:b16b9733d859 75 send_byte(flaggedDigit);
tulanthoar 7:b16b9733d859 76 stop_cmd();
tulanthoar 7:b16b9733d859 77 start_cmd();
tulanthoar 7:b16b9733d859 78 send_byte(onByte_ + brightness);
tulanthoar 7:b16b9733d859 79 stop_cmd();
tulanthoar 12:a16d86fac131 80 }
tulanthoar 7:b16b9733d859 81
tulanthoar 12:a16d86fac131 82 void SeeedFourDigitDisp::turn_on() {
tulanthoar 12:a16d86fac131 83 start_cmd();
tulanthoar 12:a16d86fac131 84 send_byte(onByte_+brightness);
tulanthoar 12:a16d86fac131 85 stop_cmd();
tulanthoar 7:b16b9733d859 86 }
tulanthoar 7:b16b9733d859 87
tulanthoar 12:a16d86fac131 88 void SeeedFourDigitDisp::clear_display() {
tulanthoar 12:a16d86fac131 89 set_digit(0,nullDigit_);
tulanthoar 12:a16d86fac131 90 set_digit(1,nullDigit_);
tulanthoar 12:a16d86fac131 91 set_digit(2,nullDigit_);
tulanthoar 12:a16d86fac131 92 set_digit(3,nullDigit_);
tulanthoar 12:a16d86fac131 93 }
tulanthoar 12:a16d86fac131 94
tulanthoar 12:a16d86fac131 95
tulanthoar 7:b16b9733d859 96 void SeeedFourDigitDisp::set_integer(int value) {
tulanthoar 7:b16b9733d859 97 clear_display();
tulanthoar 7:b16b9733d859 98 if( value < 0 ) {
tulanthoar 7:b16b9733d859 99 colonFlag = true;
tulanthoar 7:b16b9733d859 100 set_digit(0, 0);
tulanthoar 7:b16b9733d859 101 return;
tulanthoar 7:b16b9733d859 102 }
tulanthoar 7:b16b9733d859 103 if( value > 9999 ) {
tulanthoar 7:b16b9733d859 104 colonFlag = true;
tulanthoar 7:b16b9733d859 105 set_digit(0, 15);
tulanthoar 7:b16b9733d859 106 return;
tulanthoar 7:b16b9733d859 107 }
tulanthoar 7:b16b9733d859 108 for (int i = 3; i >= 0; --i) {
tulanthoar 7:b16b9733d859 109 int digit = value % 10;
tulanthoar 7:b16b9733d859 110 set_digit(i, digit);
tulanthoar 7:b16b9733d859 111 value -= digit;
tulanthoar 7:b16b9733d859 112 if(value < 10) return;
tulanthoar 7:b16b9733d859 113 value /= 10;
tulanthoar 7:b16b9733d859 114 }
tulanthoar 7:b16b9733d859 115 }
tulanthoar 7:b16b9733d859 116
tulanthoar 7:b16b9733d859 117
tulanthoar 7:b16b9733d859 118 #endif