TSoC I2C Full Keyboard Sample (CardKb)

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
lock attach
Attachments are accessible only for community members.
MotooTanaka
Level 9
Level 9
Distributor - Marubun (Japan)
First comment on blog Beta tester First comment on KBA

IMG_4145.JPG

Although I posted a sample for CY8CKIT-059 a few days ago, to make it easier to find this for TSoC user I'm posting this.

数日前に CY8CKIT-059 用のサンプルをポストしましたが、TSoC 用に見つけやすいように別にポストさせていただきます。

In another topic, I encountered the following I2C keyboard while discussing a keyboard for PSoC.

別のスレで PSoC に繋ぐことのできるキーボードという話をしていたところ下記の I2C キーボードに遭遇しました。

The CardKb

M5Stack Official CardKB Mini Keyboard Unit MEGA328P GROVE I2C USB ISP Programmer for ESP32 Arduino D...

I ordered mine from Switch Science

私は自分用にスイッチサイエンスさんからポチらせていただきました。

https://www.switch-science.com/catalog/5689/

This keyboard is surely not for a long text typing, but having full keyboard input capability for a MCU is nice.

長文を打つのに向いているとは言えませんが、MCU 用に手軽なフルキーボードがあるのは便利です。

schematic

010-TSoC-schematic.JPG

Pins

011-TSoC-Pins.JPG

Tera Term log

012-TeraTerm-log.JPG

main.c

=============

#include "project.h"

#include "stdio.h"

#define CARDKB_I2C_SLAVE_ADDR   0x5F

#define I2C_TIMEOUT_MS          500

#define STR_LEN 64

char str[STR_LEN+1] ;

void print(char *str)

{

    UART_UartPutString(str) ;

}

void printc(char c)

{

    UART_UartPutChar(c) ;

}

void cls(void)

{

    print("\033c") ; /* reset */

    CyDelay(20) ;

    print("\033[2J") ; /* clear screen */

    CyDelay(20) ;

}

void splash(void)

{

    cls() ;

    print("TSoC CardKb Test") ;

    snprintf(str, STR_LEN, "(%s %s)\n", __DATE__, __TIME__) ;

    print(str) ;

}

void init_hardware(void)

{

    CyGlobalIntEnable; /* Enable global interrupts. */

    UART_Start() ;

    splash() ;

    I2C_Start() ;

}

uint8_t myI2C_ReadByte(uint8_t reg_addr)

{

    uint8_t status ;

    uint8_t value = 0 ;

    I2C_ClearPendingInt();

    status = I2C_I2CMasterSendStart(CARDKB_I2C_SLAVE_ADDR, I2C_I2C_WRITE_XFER_MODE, I2C_TIMEOUT_MS) ;

    if (I2C_I2C_MSTR_NO_ERROR == status) {

        I2C_I2CMasterWriteByte(reg_addr, I2C_TIMEOUT_MS);

        status = I2C_I2CMasterSendRestart(CARDKB_I2C_SLAVE_ADDR, I2C_I2C_READ_XFER_MODE, I2C_TIMEOUT_MS);

    }

    if (I2C_I2C_MSTR_NO_ERROR == status) { 

        status = I2C_I2CMasterReadByte(I2C_I2C_ACK_DATA, &value, I2C_TIMEOUT_MS);

    }

    I2C_I2CMasterSendStop(I2C_TIMEOUT_MS);

    return(value) ;

}

uint8_t read_cardkb(void)

{

    uint8_t key = 0 ;

    key = myI2C_ReadByte(1) ;

    return( key ) ;

}

int main(void)

{

    uint8_t key ;

    init_hardware() ;

   

    for(;;)

    {

        key = read_cardkb() ;

        if (key) {

//            snprintf(str, STR_LEN, "%02X ", key) ;

//            print(str) ;

            printc(key) ;

        }

        CyDelay(10) ;

    }

}

=============

moto

0 Likes
0 Replies