Files
2023-02-03 16:02:30 +08:00

229 lines
5.9 KiB
C++

#include "keyboard.h"
uint8_t btn_value = 0;
KeyBoard::KeyBoard(){
}
void KeyBoard::Init(){
Wire.begin();
for (int i = 0; i < 256; i++)
{
Wire.beginTransmission(0x5e);
Wire.write(i % 4);
Wire.write(random(256) * (256 - i) / 256);
Wire.write(random(256) * (256 - i) / 256);
Wire.write(random(256) * (256 - i) / 256);
Wire.endTransmission();
delay(2);
}
Led(0, 0, 0, 0);
Led(1, 0, 0, 0);
Led(2, 0, 0, 0);
Led(3, 0, 0, 0);
}
void KeyBoard::Led(int i, int r, int g, int b){
Wire.beginTransmission(0x5e);
Wire.write(i);
Wire.write(r);
Wire.write(g);
Wire.write(b);
Wire.endTransmission();
}
void KeyBoard::GetValue(void){
//Serial.printf("dconsoleX:%d dconsoleY:%d\n", adconsoleX, adconsoleY);
Wire.requestFrom(0x5e, 5);
if(Wire.available()){
adYL = Wire.read();
adYH = Wire.read();
adXL = Wire.read();
adXH = Wire.read();
btn_value = Wire.read();
adX = adXH << 8 |adXL;
adY = adYH << 8 |adYL;
if ((oldAdX != adX) || (oldAdY != adY)) {
oldAdX = adX;
oldAdY = adY;
}else
{
if(oldKey != digitalRead(39)){
oldKey = digitalRead(39);
}
else return;
}
//Serial.printf("dconsoleX:%d dconsoleY:%d\n", adX, adY);
#if 1
//Serial.printf("dconsoleX:%d dconsoleY:%d\n", adX, adY);
switch ((adX - 162) / 40)
{
case -3: consoleX = -7; break;
case -2: consoleX = -7; break;
case -1: consoleX = -7; break;
case 0: consoleX = -6; break;
case 1: consoleX = -5; break;
case 2: consoleX = -4; break;
case 3: consoleX = -3; break;
case 4: consoleX = -2; break;
case 5: consoleX = -1; break;
case 6: consoleX = 0; break;
case 7: consoleX = 0; break;
case 8: consoleX = 0; break;
case 9: consoleX = 0; break;
case 10: consoleX = 0; break;
case 11: consoleX = 1; break;
case 12: consoleX = 2; break;
case 13: consoleX = 3; break;
case 14: consoleX = 4; break;
case 15: consoleX = 5; break;
case 16: consoleX = 6; break;
case 17: consoleX = 7; break;
case 18: consoleX = 7; break;
case 19: consoleX = 7; break;
}
//adconsoleY min = 199 maconsoleX = 872 admed = 509 - 522
switch ((adY - 155) / 40)
{
case -3: consoleY = -7; break;
case -2: consoleY = -7; break;
case -1: consoleY = -7; break;
case 0: consoleY = -6; break;
case 1: consoleY = -5; break;
case 2: consoleY = -4; break;
case 3: consoleY = -3; break;
case 4: consoleY = -2; break;
case 5: consoleY = -1; break;
case 6: consoleY = 0; break;
case 7: consoleY = 0; break;
case 8: consoleY = 0; break;
case 9: consoleY = 0; break;
case 10: consoleY = 0; break;
case 11: consoleY = 1; break;
case 12: consoleY = 2; break;
case 13: consoleY = 3; break;
case 14: consoleY = 4; break;
case 15: consoleY = 5; break;
case 16: consoleY = 6; break;
case 17: consoleY = 7; break;
case 18: consoleY = 7; break;
case 19: consoleY = 7; break;
}
#else
switch ((adX - 162) / 40)
{
case -3: consoleX = -5; break;
case -2: consoleX = -5; break;
case -1: consoleX = -5; break;
case 0: consoleX = -5; break;
case 1: consoleX = -5; break;
case 2: consoleX = -5; break;
case 3: consoleX = -4; break;
case 4: consoleX = -3; break;
case 5: consoleX = -2; break;
case 6: consoleX = -1; break;
case 7: consoleX = 0; break;
case 8: consoleX = 0; break;
case 9: consoleX = 0; break;
case 10: consoleX = 1; break;
case 11: consoleX = 2; break;
case 12: consoleX = 3; break;
case 13: consoleX = 4; break;
case 14: consoleX = 5; break;
case 15: consoleX = 5; break;
case 16: consoleX = 5; break;
case 17: consoleX = 5; break;
case 18: consoleX = 5; break;
case 19: consoleX = 5; break;
}
//adconsoleY min = 199 maconsoleX = 872 admed = 468 - 480
switch ((adY - 213) / 40)
{
case -3: consoleY = -5; break;
case -2: consoleY = -5; break;
case -1: consoleY = -5; break;
case 0: consoleY = -5; break;
case 1: consoleY = -5; break;
case 2: consoleY = -5; break;
case 3: consoleY = -4; break;
case 4: consoleY = -3; break;
case 5: consoleY = -2; break;
case 6: consoleY = -1; break;
case 7: consoleY = 0; break;
case 8: consoleY = 0; break;
case 9: consoleY = 0; break;
case 10: consoleY = 1; break;
case 11: consoleY = 2; break;
case 12: consoleY = 3; break;
case 13: consoleY = 4; break;
case 14: consoleY = 5; break;
case 15: consoleY = 5; break;
case 16: consoleY = 5; break;
case 17: consoleY = 5; break;
case 18: consoleY = 5; break;
case 19: consoleY = 5; break;
}
#endif
}else{
}
//Serial.printf("dconsoleX:%d dconsoleY:%d\n", consoleX, consoleY);
LedControl();
}
void KeyBoard::LedControl(void){
if (consoleX > 0)
{
if (digitalRead(39) == HIGH)
Led(2, consoleX * 8, 0, 0);
else
Led(2, 0, 0, consoleX * 8);
Led(0, 0, 0, 0);
}
else
{
if (digitalRead(39) == HIGH)
Led(0, -consoleX * 8, 0, 0);
else
Led(0, 0, 0, -consoleX * 8);
Led(2, 0, 0, 0);
}
if (consoleY > 0)
{
if (digitalRead(39) == HIGH)
Led(3, consoleY * 8, 0, 0);
else
Led(3, 0, 0, consoleY * 8);
Led(1, 0, 0, 0);
}
else
{
if (digitalRead(39) == HIGH)
Led(1, -consoleY * 8, 0, 0);
else
Led(1, 0, 0, -consoleY * 8);
Led(3, 0, 0, 0);
}
if (digitalRead(39) == LOW){
keyData[0] = consoleX;
keyData[1] = -consoleY;
keyData[2] = 1;
}
else
{
keyData[0] = consoleX;
keyData[1] = consoleY;
keyData[2] = 0;
}
}