You've already forked Applications-LidarBot
mirror of
https://github.com/m5stack/Applications-LidarBot.git
synced 2026-05-20 10:23:34 -07:00
229 lines
5.9 KiB
C++
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;
|
|
}
|
|
}
|