void TM1637::stop() { pinMode(m_pinDIO, OUTPUT); bitDelay(); pinMode(m_pinClk, INPUT); bitDelay(); pinMode(m_pinDIO, INPUT); bitDelay(); }
void SegmentDisplayProtocol::waitForAck(void) { _pinClock->setLow(); _pinData->setHigh(); bitDelay(); _pinClock->setHigh(); for (int cnt = 0; !_pinClock->get() && cnt < 20; cnt++) bitDelay(); _pinClock->setLow(); _pinData->setLow(); }
void SegmentDisplayProtocol::writeByte(uint8_t data) { for (int bit = 0; bit < 8; bit++) { _pinClock->setLow(); _pinData->set(data & 0x01); _pinClock->setHigh(); bitDelay(); for (int cnt = 0; !_pinClock->get() && cnt < 20; cnt++) bitDelay(); data >>= 1; } waitForAck(); }
int MyTM1637::writeByte(int8_t wr_data) { uint8_t i,count1; for(i=0;i<8;i++) //sent 8bit data { digitalWrite(Clkpin,LOW); if(wr_data & 0x01)digitalWrite(Datapin,HIGH);//LSB first else digitalWrite(Datapin,LOW); wr_data >>= 1; digitalWrite(Clkpin,HIGH); } digitalWrite(Clkpin,LOW); //wait for the ACK digitalWrite(Datapin,HIGH); digitalWrite(Clkpin,HIGH); pinMode(Datapin,INPUT); #if 0 while(digitalRead(Datapin)) { count1 +=1; if(count1 == 200)// { pinMode(Datapin,OUTPUT); digitalWrite(Datapin,LOW); count1 =0; } pinMode(Datapin,INPUT); } pinMode(Datapin,OUTPUT); #endif bitDelay(); uint8_t ack = digitalRead(Datapin); if (ack == 0) { pinMode(Datapin,OUTPUT); digitalWrite(Datapin,LOW); } bitDelay(); pinMode(Datapin,OUTPUT); bitDelay(); return ack; }
bool TM1637Display::writeByte(uint8_t b) { uint8_t data = b; // 8 Data Bits for(uint8_t i = 0; i < 8; i++) { // CLK low pinMode(m_pinClk, OUTPUT); bitDelay(); // Set data bit if (data & 0x01) pinMode(m_pinDIO, INPUT); else pinMode(m_pinDIO, OUTPUT); bitDelay(); // CLK high pinMode(m_pinClk, INPUT); bitDelay(); data = data >> 1; } // Wait for acknowledge // CLK to zero pinMode(m_pinClk, OUTPUT); pinMode(m_pinDIO, INPUT); bitDelay(); // CLK to high pinMode(m_pinClk, INPUT); bitDelay(); uint8_t ack = digitalRead(m_pinDIO); if (ack == 0) pinMode(m_pinDIO, OUTPUT); bitDelay(); pinMode(m_pinClk, OUTPUT); bitDelay(); return ack; }
/* * @fn writeByte * @brief write a byte to the GPIO pin used as DIO * @param[in] byte Data to write on the DIO pin */ bool writeByte(uint8_t byte){ uint8_t data = byte; uint8_t i; // 8 Data bits for(i = 0; i < 8; i++){ // CLK low palSetPadMode(GPIOC, CLK_PIN, PAL_MODE_OUTPUT_PUSHPULL); bitDelay (); // Set data bit if(data & 0x01) palSetPadMode(GPIOC, DIO_PIN, PAL_MODE_INPUT_PULLUP); else palSetPadMode(GPIOC, DIO_PIN, PAL_MODE_OUTPUT_PUSHPULL); bitDelay (); // CLK high palSetPadMode(GPIOC, CLK_PIN, PAL_MODE_INPUT_PULLUP); bitDelay (); data = data >> 1; } // Wait for Acknowlege // CLK to Zero palSetPadMode(GPIOC, CLK_PIN, PAL_MODE_OUTPUT_PUSHPULL); palSetPadMode(GPIOC, DIO_PIN, PAL_MODE_INPUT_PULLUP); bitDelay (); // CLK high palSetPadMode(GPIOC, CLK_PIN, PAL_MODE_INPUT_PULLUP); bitDelay (); uint8_t ack = palReadPad(GPIOC, DIO_PIN); if(ack == 0) palSetPadMode(GPIOC, DIO_PIN, PAL_MODE_OUTPUT_PUSHPULL); bitDelay (); palSetPadMode(GPIOC, CLK_PIN, PAL_MODE_OUTPUT_PUSHPULL); bitDelay(); return ack; }
void TM1637Display::start() { pinMode(m_pinDIO, OUTPUT); bitDelay(); }
void SegmentDisplayProtocol::stop(void) { _pinData->setLow(); bitDelay(); _pinClock->setHigh(); bitDelay(); _pinData->setHigh(); }
/* * @fn start * @brief Generation of the start condition on the DIO bus. */ void start (void){ palSetPadMode(GPIOC, DIO_PIN, PAL_MODE_OUTPUT_PUSHPULL); bitDelay(); }