Rework example code, fix bugs and get to compiling state. Also introduce missing logic for the Matrix code to keep track of what column is active.
This commit is contained in:
parent
8ebc1a5523
commit
690afdbce5
18 changed files with 194 additions and 26 deletions
39
Matrix.cpp
Normal file
39
Matrix.cpp
Normal file
|
@ -0,0 +1,39 @@
|
|||
#include "Matrix.h"
|
||||
|
||||
Matrix::Matrix(uint8_t* columns, bool inverted) {
|
||||
this->columns = columns;
|
||||
this->num_columns = sizeof(columns);
|
||||
this->active_pin = num_columns;
|
||||
this->inverted = inverted;
|
||||
|
||||
for (uint8_t i = 0; i < num_columns; i++) {
|
||||
pinMode(columns[i], OUTPUT);
|
||||
if (inverted) digitalWrite(columns[i], HIGH);
|
||||
else digitalWrite(columns[i], LOW);
|
||||
}
|
||||
}
|
||||
|
||||
void Matrix::Activate(uint8_t column) {
|
||||
if (column > num_columns) return; // TODO: throw an error here?
|
||||
|
||||
uint8_t pin = columns[column];
|
||||
if (pin == active_pin) return;
|
||||
|
||||
if (active_pin != num_columns) {
|
||||
_disable(active_pin);
|
||||
}
|
||||
|
||||
_enable(pin);
|
||||
active_pin = pin;
|
||||
delayMicroseconds(10); // allow ample time for signal to propagate
|
||||
}
|
||||
|
||||
void Matrix::_enable(uint8_t pin) {
|
||||
if (inverted) digitalWrite(pin, LOW);
|
||||
else digitalWrite(pin, HIGH);
|
||||
}
|
||||
|
||||
void Matrix::_disable(uint8_t pin) {
|
||||
if (inverted) digitalWrite(pin, HIGH);
|
||||
else digitalWrite(pin, LOW);
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue