Created base files for the typewriter driver
This commit is contained in:
parent
61d4458f23
commit
1126ae04b5
2 changed files with 113 additions and 0 deletions
13
typewriter-driver/CMakeLists.txt
Normal file
13
typewriter-driver/CMakeLists.txt
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
include(pico_sdk_import.cmake)
|
||||||
|
project(typewriter_project C CXX ASM)
|
||||||
|
set(CMAKE_C_STANDARD 11)
|
||||||
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
|
pico_sdk_init()
|
||||||
|
add_executable(main
|
||||||
|
main.c
|
||||||
|
)
|
||||||
|
pico_enable_stdio_usb(main 1)
|
||||||
|
pico_enable_stdio_uart(main 1)
|
||||||
|
pico_add_extra_outputs(main)
|
||||||
|
target_link_libraries(main pico_stdlib)
|
||||||
100
typewriter-driver/main.c
Normal file
100
typewriter-driver/main.c
Normal file
|
|
@ -0,0 +1,100 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include "pico/stdlib.h"
|
||||||
|
#include "hardware/gpio.h"
|
||||||
|
#include "pico/binary_info.h"
|
||||||
|
|
||||||
|
const uint LED_PIN = 0;
|
||||||
|
|
||||||
|
// Define hash table for letter matrix
|
||||||
|
|
||||||
|
#define TABLE_SIZE 256
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
char key;
|
||||||
|
int l_value;
|
||||||
|
int r_value;
|
||||||
|
} Entry;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
Entry entries[TABLE_SIZE];
|
||||||
|
int count;
|
||||||
|
} LetterMatrix;
|
||||||
|
|
||||||
|
void init_matrix(LetterMatrix* mt) {
|
||||||
|
mt->count = 0;
|
||||||
|
|
||||||
|
mt->entries[mt->count++] = (Entry){'a', 3, 16};
|
||||||
|
mt->entries[mt->count++] = (Entry){'b', 4, 15};
|
||||||
|
mt->entries[mt->count++] = (Entry){'c', 1, 9};
|
||||||
|
mt->entries[mt->count++] = (Entry){'d', 2, 13};
|
||||||
|
mt->entries[mt->count++] = (Entry){'e', 2, 14};
|
||||||
|
mt->entries[mt->count++] = (Entry){'f', 1, 13};
|
||||||
|
mt->entries[mt->count++] = (Entry){'g', 1, 16};
|
||||||
|
mt->entries[mt->count++] = (Entry){'h', 4, 16};
|
||||||
|
mt->entries[mt->count++] = (Entry){'i', 5, 13};
|
||||||
|
mt->entries[mt->count++] = (Entry){'j', 4, 13};
|
||||||
|
mt->entries[mt->count++] = (Entry){'k', 5, 14};
|
||||||
|
mt->entries[mt->count++] = (Entry){'l', 5, 16};
|
||||||
|
mt->entries[mt->count++] = (Entry){'m', 5, 10};
|
||||||
|
mt->entries[mt->count++] = (Entry){'n', 5, 9};
|
||||||
|
mt->entries[mt->count++] = (Entry){'o', 5, 18};
|
||||||
|
mt->entries[mt->count++] = (Entry){'p', 6, 17};
|
||||||
|
mt->entries[mt->count++] = (Entry){'q', 3, 18};
|
||||||
|
mt->entries[mt->count++] = (Entry){'r', 1, 14};
|
||||||
|
mt->entries[mt->count++] = (Entry){'s', 2, 18};
|
||||||
|
mt->entries[mt->count++] = (Entry){'t', 1, 18};
|
||||||
|
mt->entries[mt->count++] = (Entry){'u', 4, 14};
|
||||||
|
mt->entries[mt->count++] = (Entry){'v', 1, 15};
|
||||||
|
mt->entries[mt->count++] = (Entry){'w', 2, 16};
|
||||||
|
mt->entries[mt->count++] = (Entry){'x', 2, 9};
|
||||||
|
mt->entries[mt->count++] = (Entry){'y', 3, 15};
|
||||||
|
mt->entries[mt->count++] = (Entry){'z', 4, 18};
|
||||||
|
mt->entries[mt->count++] = (Entry){'1', 3, 13};
|
||||||
|
mt->entries[mt->count++] = (Entry){'2', 3, 14};
|
||||||
|
mt->entries[mt->count++] = (Entry){'3', 2, 15};
|
||||||
|
mt->entries[mt->count++] = (Entry){'4', 2, 10};
|
||||||
|
mt->entries[mt->count++] = (Entry){'5', 1, 10};
|
||||||
|
mt->entries[mt->count++] = (Entry){'6', 1, 17};
|
||||||
|
mt->entries[mt->count++] = (Entry){'7', 4, 17};
|
||||||
|
mt->entries[mt->count++] = (Entry){'8', 4, 10};
|
||||||
|
mt->entries[mt->count++] = (Entry){'9', 5, 17};
|
||||||
|
mt->entries[mt->count++] = (Entry){'0', 5, 15};
|
||||||
|
mt->entries[mt->count++] = (Entry){'ß', 6, 15};
|
||||||
|
mt->entries[mt->count++] = (Entry){'+', 7, 14};
|
||||||
|
mt->entries[mt->count++] = (Entry){'#', 7, 15};
|
||||||
|
mt->entries[mt->count++] = (Entry){''', 6, 16};
|
||||||
|
mt->entries[mt->count++] = (Entry){'.', 6, 9};
|
||||||
|
mt->entries[mt->count++] = (Entry){'-', 7, 18};
|
||||||
|
mt->entries[mt->count++] = (Entry){' ', 4, 9};
|
||||||
|
mt->entries[mt->count++] = (Entry){'´', 6, 10};
|
||||||
|
};
|
||||||
|
|
||||||
|
// Lookup function to get left and right pin values for the letter
|
||||||
|
Entry* lookup(LetterMatrix* mt, char key) {
|
||||||
|
for (int i = 0; i < ht->count; i++) {
|
||||||
|
if (ht->entries[i].key == key) {
|
||||||
|
return &ht->entries[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return NULL; // Not found
|
||||||
|
};
|
||||||
|
|
||||||
|
// TODO: Implement special keys
|
||||||
|
|
||||||
|
int main () {
|
||||||
|
bi_decl(bi_program_description("Blink"));
|
||||||
|
bi_decl(bi_1pin_with_name(LED_PIN, "Onboard LED"));
|
||||||
|
|
||||||
|
stdio_init_all();
|
||||||
|
gpio_init(LED_PIN);
|
||||||
|
gpio_set_dir(LED_PIN, GPIO_OUT);
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
gpio_put(LED_PIN, 1);
|
||||||
|
sleep_ms(1000);
|
||||||
|
gpio_put(LED_PIN, 0);
|
||||||
|
sleep_ms(1000);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue