test module stuff
This commit is contained in:
62
modules/testmodule/lib/main.c
Normal file
62
modules/testmodule/lib/main.c
Normal file
@@ -0,0 +1,62 @@
|
||||
#include "stm32f1xx_hal.h"
|
||||
|
||||
#define NUM_COLS 2
|
||||
#define NUM_ROWS 2
|
||||
|
||||
//Stores the GPIO and the PIN location - would be useful for the matrix
|
||||
typedef struct {
|
||||
GPIO_TypeDef* GPIO;
|
||||
uint16_t PIN;
|
||||
} keyMatrix ;
|
||||
|
||||
keyMatrix matrix[NUM_COLS][NUM_ROWS] = {
|
||||
{{GPIOA, GPIO_PIN_0},{GPIOA, GPIO_PIN_1}}, //Column
|
||||
{{GPIOA, GPIO_PIN_2},{GPIOA, GPIO_PIN_3}} //Row
|
||||
};
|
||||
|
||||
int main(void){
|
||||
|
||||
HAL_Init(); //Initialize the HAL Abstraction Layer
|
||||
|
||||
//Initialize a 2x2 pins
|
||||
for(int col = 0; col<NUM_COLS; col++){
|
||||
GPIO_InitTypeDef GPIO_InitCols = {0};
|
||||
GPIO_InitCols.Pin = matrix[0][col].PIN;
|
||||
GPIO_InitCols.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
GPIO_InitCols.Pull = GPIO_NOPULL;
|
||||
GPIO_InitCols.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
HAL_GPIO_Init(matrix[0][col].GPIO, &GPIO_InitCols);
|
||||
}
|
||||
|
||||
for(int row = 0; row<NUM_ROWS; row++){
|
||||
GPIO_InitTypeDef GPIO_InitRows = {0};
|
||||
GPIO_InitRows.Pin = matrix[1][row].PIN;
|
||||
GPIO_InitRows.Mode = GPIO_MODE_INPUT;
|
||||
GPIO_InitRows.Pull = GPIO_PULLDOWN;
|
||||
HAL_GPIO_Init(matrix[0][row].GPIO, &GPIO_InitRows);
|
||||
}
|
||||
|
||||
|
||||
// TODO: Deboucing Code - I suggest not to use HAL_Delay() beacause it is blocking
|
||||
// and might affect performance and introduce input delay.
|
||||
for(int col=0; col<NUM_COLS; col++){
|
||||
//Set column to high
|
||||
HAL_GPIO_WritePin(matrix[0][col].GPIO, matrix[0][col].PIN, GPIO_PIN_SET);
|
||||
|
||||
//Read each row pin
|
||||
for(int row=0; row<NUM_ROWS; row++){
|
||||
if(HAL_GPIO_ReadPin(matrix[1][row].GPIO, matrix[0][col].PIN)){
|
||||
//Register Key Press here
|
||||
}
|
||||
}
|
||||
|
||||
//Set column to back to low
|
||||
HAL_GPIO_WritePin(matrix[0][col].GPIO, matrix[0][col].PIN, GPIO_PIN_RESET);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
Would be nice if someone can abstract all of keyboard checking and initialization
|
||||
into a separate include file so we can reuse it with other modules
|
||||
*/
|
||||
Reference in New Issue
Block a user