/** * makecode iLED4 4 Digit 7 Segment with I2C Bus Package */ enum iLED4_CMD {TURN_OSCILLATOR_ON = 0x21, TURN_DISPLAY_ON = 0x81, SET_BRIGHTNESS = 0xE0 } /** * iLED4 block */ //% weight=100 color=#008000 icon="\uf2db" block="iLED4" namespace ht16k33 { let segment= [0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71]; let displaybuffer: Array = [0, 0, 0, 0, 0, 0, 0, 0]; function sendCommand(command: iLED4_CMD) { pins.i2cWriteNumber(0x70,0,NumberFormat.Int8LE,false) pins.i2cWriteNumber(0x70,command,NumberFormat.Int8LE,false) } function WriteDisplay() { let buffer = pins.createBuffer(17); buffer[0] = 0x00; for (let i = 0; i < 8; i++) { buffer[1 + (i * 2) + 0] = displaybuffer[i] & 0xFF; buffer[1 + (i * 2) + 1] = displaybuffer[i] >> 8; } pins.i2cWriteBuffer(0x70, buffer); } /** * set iLED4 intensity, range is [0-15], 0 is off. * @param val the brightness of the iLED4, eg: 15 */ //% blockId="iLED4_SET_BRIGHTNESS" block="iLED4 set Brightness %bright" //% weight=30 blockGap=8 //% bright.min=0 bright.max=15 export function setBrightness(bright: number) { sendCommand(iLED4_CMD.SET_BRIGHTNESS | bright ); } /** * set iLED4 Blink Rate, range is [0-3], 0 is Not Blink. * @param set Blink Rate for iLED4, eg: 0 */ //% blockId="iLED4_BLINK_RATE" block="iLED4 set Blink Rate %rate" //% weight=30 blockGap=8 //% rate.min=0 rate.max=3 export function BlinkRate(rate: number) { sendCommand(iLED4_CMD.TURN_DISPLAY_ON | (rate & 3) << 1); } //% blockId="iLED4_INIT" block="Init_iLED4" //% weight=98 blockGap=8 export function init_() { pins.P20.setPull(PinPullMode.PullNone) pins.P19.setPull(PinPullMode.PullNone) sendCommand(iLED4_CMD.TURN_OSCILLATOR_ON) sendCommand(iLED4_CMD.TURN_DISPLAY_ON) setBrightness(15); } //% blockId="iLED4_Clear" block="iLED4 Clear" //% weight=70 blockGap=8 export function clear(){ for (let i = 0; i < 8; i++) { displaybuffer[i]=0; } WriteDisplay(); } //% blockId="iLED4_Turn_ON" block="iLED4 Turn ON" //% weight=35 blockGap=8 export function Turn_ON() { sendCommand(0x81); } //% blockId="iLED4_Turn_OFF" block="iLED4 Turn OFF" //% weight=34 blockGap=8 export function Turn_OFF() { sendCommand(0x80); } /** * set iLED4 Colon : , True or False. * @param set Colon for iLED4, eg: false */ //% blockId="iLED4_Colon" block="iLED4 Colon %status" //% weight=70 blockGap=8 export function colon(status:boolean) { if (status) { displaybuffer[4] = 0x01; } else { displaybuffer[4] = 0x00; } WriteDisplay(); } //% blockId="iLED4_ShowDot" block="iLED4 Dotpoint at %digit show %status" //% weight=60 blockGap=8 //% digit.min=0 digit.max=4 export function ShowDot(digit:number,status: boolean) { if (digit==4){colon(status);} if (status) { displaybuffer[digit] = displaybuffer[digit] | 0x80; } else { displaybuffer[digit] = displaybuffer[digit] & 0x7F; } WriteDisplay(); } //% blockId="iLED4_Write_Digit_Dot" block="iLED4 Show Number %num at %digit dot %dot" //% weight=75 blockGap=8 //% digit.min=0 digit.max=3 //% num.min=0 num.max=15 export function WriteDigitNum(num:number,digit:number,dot:boolean){ if (dot) { displaybuffer[digit]=segment[num] | 0x80; } else{ displaybuffer[digit] = segment[num] ; } WriteDisplay(); } //% blockId="iLED4_Show_Number" block="iLED4 Show Number %num" //% weight=85 blockGap=8 export function ShowNumber(num: number) { if (num<0){ displaybuffer[0]=0x40; num=-num; } else{ displaybuffer[0]=segment[Math.idiv(num,1000)%10]; } displaybuffer[1]=segment[Math.idiv(num,100) % 10]; displaybuffer[2]=segment[Math.idiv(num,10) % 10]; displaybuffer[3]=segment[num % 10]; WriteDisplay(); } //% blockId="iLED4_Show_Hex_Number" block="iLED4 Show Hex Number %num" //% weight=80 blockGap=8 export function ShowHexNumber(num: number) { if (num < 0) { displaybuffer[0] = 0x40; num = -num; } else { displaybuffer[0] = segment[(num>>12) % 16]; } displaybuffer[1] = segment[(num>>8) % 16]; displaybuffer[2] = segment[(num>>4) % 16]; displaybuffer[3] = segment[num % 16]; WriteDisplay(); } }