parent
5bb0992bcc
commit
f4006a662b
@ -0,0 +1,105 @@
|
|||||||
|
#include <Arduino.h>
|
||||||
|
#include "vinka_key.h"
|
||||||
|
#include <Wire.h>
|
||||||
|
|
||||||
|
#ifndef _BV
|
||||||
|
#define _BV(bit) (1 << (bit))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define address 0x65
|
||||||
|
byte error;
|
||||||
|
int LONG_CLICK_DELAY = 500;
|
||||||
|
int DEBOUNCING_DELAY = 300;
|
||||||
|
int lastButtonId = -1;
|
||||||
|
unsigned long lastClick = 0;
|
||||||
|
unsigned long lastRawPressed = 0;
|
||||||
|
|
||||||
|
// Keeps track of the last pins touched
|
||||||
|
// so we know when buttons are 'released'
|
||||||
|
uint16_t lasttouched = 0;
|
||||||
|
uint16_t currtouched = 0;
|
||||||
|
|
||||||
|
void setupButtons()
|
||||||
|
{
|
||||||
|
//Wire.beginTransmission(address);
|
||||||
|
error = Wire.requestFrom(address, 2);
|
||||||
|
//error = Wire.endTransmission();
|
||||||
|
if (error != 0){
|
||||||
|
Serial.println("vinka_keyboard not found, check wiring?");
|
||||||
|
while (1);
|
||||||
|
}
|
||||||
|
Serial.println("vinka keyboard found!");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int getPressedButton() {
|
||||||
|
|
||||||
|
int b = -1;
|
||||||
|
unsigned char temp[2];
|
||||||
|
Wire.requestFrom(address, 2);
|
||||||
|
for(unsigned char i = 0; Wire.available() > 0; i++)
|
||||||
|
{
|
||||||
|
temp[i] = Wire.read();
|
||||||
|
}
|
||||||
|
/* if((temp[0]>0)|(temp[1]>0)){
|
||||||
|
if(temp[0]&0b00000001) Serial.print("1");
|
||||||
|
if(temp[0]&0b00000010) Serial.print("4");
|
||||||
|
if(temp[0]&0b00000100) Serial.print("7");
|
||||||
|
if(temp[0]&0b00001000) Serial.print("*");
|
||||||
|
if(temp[0]&0b00010000) Serial.print("2");
|
||||||
|
if(temp[0]&0b00100000) Serial.print("5");
|
||||||
|
if(temp[0]&0b01000000) Serial.print("8");
|
||||||
|
if(temp[0]&0b10000000) Serial.print("0");
|
||||||
|
if(temp[1]&0b00000001) Serial.print("3");
|
||||||
|
if(temp[1]&0b00000010) Serial.print("6");
|
||||||
|
if(temp[1]&0b00000100) Serial.print("9");
|
||||||
|
if(temp[1]&0b00001000) Serial.print("#");
|
||||||
|
if(temp[1]&0b00010000) Serial.print("A");
|
||||||
|
if(temp[1]&0b00100000) Serial.print("B");
|
||||||
|
if(temp[1]&0b01000000) Serial.print("C");
|
||||||
|
if(temp[1]&0b10000000) Serial.print("D");
|
||||||
|
Serial.println(" ");
|
||||||
|
}
|
||||||
|
*///// Get the currently touched pads
|
||||||
|
|
||||||
|
for (uint8_t i=0; i <2; i++){
|
||||||
|
for (int8_t j=0; j<8; j++){
|
||||||
|
if(temp[i] & _BV(j)){
|
||||||
|
b= 8*i + j;
|
||||||
|
lastRawPressed = millis();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (b>=0) break ;
|
||||||
|
}
|
||||||
|
if (b>=0) break;
|
||||||
|
}
|
||||||
|
if (b >= 0){
|
||||||
|
unsigned long currentClick = millis();
|
||||||
|
if (lastButtonId != b) {
|
||||||
|
if (currentClick > lastClick + DEBOUNCING_DELAY) {
|
||||||
|
Serial.println(" Sort");
|
||||||
|
lastClick = currentClick;
|
||||||
|
tone(BUZZ, 1000, 50);
|
||||||
|
lastButtonId = b;
|
||||||
|
} else {
|
||||||
|
b = -1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (currentClick > lastClick + LONG_CLICK_DELAY) {
|
||||||
|
Serial.println(" Long");
|
||||||
|
lastButtonId = b;
|
||||||
|
b = b + 16;
|
||||||
|
lastClick = currentClick;
|
||||||
|
} else {
|
||||||
|
b = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (millis() - lastRawPressed > 100) {
|
||||||
|
lastButtonId = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return b;
|
||||||
|
}
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
#ifndef VINKA_KEY
|
||||||
|
|
||||||
|
#define VINKA_KEY
|
||||||
|
#define BUZZ 2 // Buzzer
|
||||||
|
|
||||||
|
int getPressedButton();
|
||||||
|
void setupButtons();
|
||||||
|
#endif
|
||||||
Loading…
Reference in new issue