#include <Keypad.h>
const uint8_t ROWS = 4;
const uint8_t COLS = 4;
char keys[ROWS][COLS] = {
{ '1', '2', '3', 'A' },
{ '4', '5', '6', 'B' },
{ '7', '8', '9', 'C' },
{ '*', '0', '#', 'D' }
};
uint8_t colPins[COLS] = { 5, 4, 3, 2 }; // Pins connected to C1, C2, C3, C4
uint8_t rowPins[ROWS] = { 9, 8, 7, 6 }; // Pins connected to R1, R2, R3, R4
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
int indexes[9] = {0,0,0,0,0,0,0,0,0};
int16_t keypad_alpha[9][4] = {
{230, 248, 229}, // KP1 -> æ,ø,å
{97, 98, 99}, // KP2 -> a,b,c
{100, 101, 102}, // KP3 -> d,e,f
{103, 104, 105}, // KP4 -> g,h,i
{106, 107, 108}, // KP5 -> j,k,l
{109, 110, 111}, // KP6 -> m,n,o
{112, 113, 114, 115}, // KP7 -> p,q,r,s
{116, 117, 118}, // KP8 -> t,u,v
{119, 120, 121, 122}, // KP9 -> x,y,z
};
const char* hexChars = "B0,B1,B2,B3"; // 176, 177, 178, 179 in hex
int16_t parseHexChar(const char* hexStr) {
return (int16_t)strtol(hexStr, NULL, 16);
}
struct myStruct {
int16_t chars[3];
}
structo = {
{230, 248, 229}
};
char* hex2char(unsigned char x, char hex[]) {
hex[0] = (char)x;
hex[1] = '\0';
return hex;
}
void setup() {
Serial.begin(9600);
unsigned char extChar = 230;
char str[2]; // Space for char + null terminator
const char* n = hex2char(extChar, str);
Serial.println(str);
Serial.println(n);
Serial.println("--------------");
for(int i = 0; i < 3; i++) {
int16_t ch = structo.chars[i];
Serial.write(ch); Serial.print(" ("); Serial.print(ch); Serial.print(") ,");
Serial.write(ch-32); Serial.print(" ("); Serial.print(ch); Serial.print(") ");
}
/*
for(int i = 0; i < 3; i++) {
int16_t ch = structo.chars[i];
Serial.write(ch); Serial.println();
}
signed char x = (char)148U; Serial.print("X: "); Serial.write(x); Serial.println();
*/
/*
int16_t c = (int16_t)strtol("B2", NULL, 16);
Serial.print(c); Serial.print(" > "); Serial.write(c); Serial.println();
int16_t charCodes[] = {215, 216, 217, 218, 219};
char charArray[5]; // +1 for null terminator
for(int i = 0; i < 4; i++) {
charArray[i] = (char)charCodes[i]; // Direct cast
}
charArray[2] = '\0'; // Null terminate
Serial.println(charArray);
//Serial.println(parseHexChar("B2"));
for (;;);
*/
}
int mult = 0;
int16_t symbol;
void loop() {
char key = keypad.getKey();
int id = (int)(key - '0');
--id %= 9;
if (key != NO_KEY) {
if (isdigit(key)) {
symbol = keypad_alpha[id][ (indexes[id]) ];
++indexes[id] %= ((id == 6 || id == 8) ? 4 : 3);
char b = (char)symbol-mult;
Serial.print("key: "); Serial.println(key);
Serial.print("id: "); Serial.println(id);
Serial.print("index: "); Serial.println(indexes[id]);
Serial.print("symbol: "); Serial.println(symbol); //Serial.print(" - "); Serial.write(symbol); Serial.println();
Serial.print("result: "); Serial.println(symbol); //Serial.print(" - "); Serial.write(symbol-mult); Serial.println();
Serial.print("char: "); Serial.println(b);
Serial.println("\n");
}
else {
if (key == 'D') {
mult = (mult > 0) ? 0 : 32;
Serial.println(mult);
}
}
}
}