lib/keypad/Keypad.cpp

changeset 33
167010858b8d
parent 28
424d792fea4f
child 66
48f29a1d43d6
equal deleted inserted replaced
32:bc1d6ecbb0cc 33:167010858b8d
43 for (row=0; row<(_ncols*_nrows); row++) 43 for (row=0; row<(_ncols*_nrows); row++)
44 _keys[row] = 0; 44 _keys[row] = 0;
45 45
46 while(_started) 46 while(_started)
47 { 47 {
48 // activate column col
48 _columns[col].write(1); 49 _columns[col].write(1);
49 ThisThread::sleep_for(5); 50 ThisThread::sleep_for(5);
50 for(row=0; row<_nrows; row++) 51 for(row=0; row<_nrows; row++)
51 { 52 {
52 if (_rows[row].read()) 53 if (_rows[row].read())
53 { 54 {
54 if (_keys[row + _nrows*col] < 2) 55 if (_keys[row + _nrows*col] < 2) // ensure only one key is pressed in this column
55 { 56 {
56 _keys[row + _nrows*col]++; 57 _keys[row + _nrows*col]++;
57 if ((_keys[row + _nrows*col] == 2) && _kp_callback) 58 if ((_keys[row + _nrows*col] == 2) && _kp_callback)
58 _kp_callback.call(row, col); 59 _kp_callback.call(row, col);
59 } 60 }
81 _kr_callback = kr_callback; 82 _kr_callback = kr_callback;
82 } 83 }
83 84
84 void Keypad::start(void) 85 void Keypad::start(void)
85 { 86 {
86 if (_started) 87 if (_started)
87 return; 88 return;
88 _started = true; 89 _started = true;
89 _loop.start(callback(this, &Keypad::run)); 90 _loop.start(callback(this, &Keypad::run));
90 } 91 }
91 92
92 void Keypad::stop(void) 93 void Keypad::stop(void)
93 { 94 {
94 _started = false; 95 _started = false;

mercurial