void TmInit(void) { if (PinUsed(GPIO_TM1638CLK) && PinUsed(GPIO_TM1638DIO) && PinUsed(GPIO_TM1638STB)) { Tm1638.clock_pin = Pin(GPIO_TM1638CLK); Tm1638.data_pin = Pin(GPIO_TM1638DIO); Tm1638.strobe_pin = Pin(GPIO_TM1638STB); pinMode(Tm1638.data_pin, OUTPUT); pinMode(Tm1638.clock_pin, OUTPUT); pinMode(Tm1638.strobe_pin, OUTPUT); digitalWrite(Tm1638.strobe_pin, HIGH); digitalWrite(Tm1638.clock_pin, HIGH); // TM_WRITE_INC 0x40 - Incremental write Tm16XXSendCommand(0x40); // TM_BRIGHT_ADR 0x88 - Brightness address Tm16XXSendCommand(0x80 | TM1638_DISPLAY_ON << 3 | TM1638_BRIGHTNESS); // TM_SEG_ADR 0xC0 - leftmost segment Address C0 C2 C4 C6 C8 CA CC CE // TM_LEDS_ADR 0xC1 - Leftmost LED address C1 C3 C5 C7 C9 CB CD CF digitalWrite(Tm1638.strobe_pin, LOW); Tm16XXSend(0xC0); // TM_SEG_ADR left most for (uint32_t i = 0; i < TM1638_MAX_DISPLAYS * 2; i++) { Tm16XXSend(0x00); // Init displays and leds } digitalWrite(Tm1638.strobe_pin, HIGH); /* ------- Romik ------- Init Second TM1638 -------------- */ pinMode(5, OUTPUT); // ----------------- SW PIN D5 digitalWrite(5, HIGH); // TM_WRITE_INC 0x40 - Incremental write Tm16XXSendCommand(0x40); // TM_BRIGHT_ADR 0x88 - Brightness address Tm16XXSendCommand(0x80 | TM1638_DISPLAY_ON << 3 | TM1638_BRIGHTNESS); // TM_SEG_ADR 0xC0 - leftmost segment Address C0 C2 C4 C6 C8 CA CC CE // TM_LEDS_ADR 0xC1 - Leftmost LED address C1 C3 C5 C7 C9 CB CD CF digitalWrite(Tm1638.strobe_pin, LOW); Tm16XXSend(0xC0); // TM_SEG_ADR left most for (uint32_t i = 0; i < TM1638_MAX_DISPLAYS * 2; i++) { Tm16XXSend(0x00); // Init displays and leds } digitalWrite(Tm1638.strobe_pin, HIGH); digitalWrite(5,LOW); /* ------------------------------------------------------- */ Tm1638.led_offset = TasmotaGlobal.devices_present; UpdateDevicesPresent(TM1638_MAX_LEDS); Tm1638.key_offset = -1; Tm1638.detected = true; } }