1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
#include <Keypad.h> // Needs to be the modified version
const byte ROWS = 19;
const byte COLS = 8;
// these constants describe the pins for the acellarometer . They won't change:
const int groundpin = 18; // analog input pin 4 -- ground
const int powerpin = 19; // analog input pin 5 -- voltage
const int xpin = A3; // x-axis of the accelerometer
const int ypin = A2; // y-axis
const int zpin = A1; // z-axis (only on 3-axis models)
const int selfTest = A0;
/* Each of the buttons can be refered to by a number
At the moment the byte overflow for the 127+ numbers is dealt with at the
getKey time, but if a unsigned byte could be used here it would remove the need
for the correction?
*/
char keys[COLS][ROWS] = {
{1, 9, 17, 25, 33, 41, 49, 57, 65, 73, 81, 89, 97, 105, 113, 121, 129, 137, 145},
{2, 10, 18, 26, 34, 42, 50, 58, 66, 74, 82, 90, 98, 106, 114, 122, 130, 138, 146},
{3, 11, 19, 27, 35, 43, 51, 59, 67, 75, 83, 91, 99, 107, 115, 123, 131, 139, 147},
{4, 12, 20, 28, 36, 44, 52, 60, 68, 76, 84, 92, 100, 108, 116, 124, 132, 140, 148},
{5, 13, 21, 29, 37, 45, 53, 61, 69, 77, 85, 93, 101, 109, 117, 125, 133, 141, 149},
{6, 14, 22, 30, 38, 46, 54, 62, 70, 78, 86, 94, 102, 110, 118, 126, 134, 142, 150},
{7, 15, 23, 31, 39, 47, 55, 63, 71, 79, 87, 95, 103, 111, 119, 127, 135, 143, 151},
{8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120, 128, 136, 144, 152}
};
byte colPins[COLS] = {9, 8, 7, 6, 5, 4, 3, 2};
byte rowPins[ROWS] = {14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42};
/*
Becuase of the diodes being fitted the WRONG WAY ROUND,
the columns are rows and the rows are columns, have fun!
*/
// ROW COL ROWS COLS
Keypad keypad = Keypad( makeKeymap(keys), colPins, rowPins, COLS, ROWS);
void setup(){
Serial.begin(9600);
Serial.println("Go");
// Provide ground and power by using the analog inputs as normal
// digital pins. This makes it possible to directly connect the
// breakout board to the Arduino. If you use the normal 5V and
// GND pins on the Arduino, you can remove these lines.
pinMode(groundpin, OUTPUT);
pinMode(powerpin, OUTPUT);
//pinMode(selfTest, OUTPUT);
digitalWrite(groundpin, LOW);
digitalWrite(powerpin, HIGH);
//digitalWrite(selfTest, HIGH);
}
/* Send numbers back and forth to test the integrity of the serial communication
Computer sends the first byte
*/
boolean runSerialTest() {
Serial.println("Begining Serial Test");
delay(10);
byte sByte, cByte;
for (int i=0; i<10000; i++) {
sByte = Serial.read();
if (sByte != cByte && i != 0) return false;
sByte = ((sByte * 10) % 127);
Serial.write(sByte);
cByte = ((sByte * 10) % 127); // The next expected byte
}
return true;
}
void loop(){
char customKey = keypad.getKey();
int customKeyInt = customKey;
if (customKeyInt < 0) customKeyInt += 256;
if (customKey != NO_KEY){
Serial.println(customKeyInt);
}
// print the sensor values:
Serial.print(analogRead(xpin));
// print a tab between values:
Serial.print("\t");
Serial.print(analogRead(ypin));
// print a tab between values:
Serial.print("\t");
Serial.print(analogRead(zpin));
Serial.println();
// delay before next reading:
delay(10);
}
|