You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
#include "shiftRegButtonLib.h"
shiftRegButton::shiftRegButton() {
//init Pins
shiftDatPORT &= ~shiftDatPin; shiftClkPORT &= ~shiftClkPin;
//shiftInDDR &= ~shiftInPin;
shiftDatDDR |= shiftDatPin; shiftClkDDR |= shiftClkPin;
shiftInPORT |= shiftInPin;
//init all flags
shiftDatHi; for(uint8_t i = 0; i < numberOfButtons; i++, shiftClk()) { // buttonsPressed[i] = false;
// buttonsCycle[i] = false;
buttonsTime[i] = 0; // cycleFlag[i] = false;
//init shiftreg outputs to all 1's
} buttonsPressed = 0; buttonsCycle = 0; cycleFlag = 0; }
shiftRegButton::checkButtons(void) { //this procedure is needed by the 74HC595, other shift registers' behaviour may differ. See the datasheet of your part for more informations.
shiftDatLo; //
shiftClk(); //zero to shift stage 0
shiftDatHi; //
shiftClk(); //zero to parallel output 0
for(uint8_t i = 0; i < numberOfButtons; i++, shiftClk()) { //is button i actually pressed?
if(buttonsInput()) { buttonsPressed |= 1 << i; // buttonsPressed[i] = true;
// cycleFlag[i] = true;
cycleFlag |= 1 << i; buttonsTime[i]++; } else { // buttonsPressed[i] = false;
buttonsPressed &= ~(1 << i); buttonsTime[i] = 0; } checkButtonCycle(i); //increase the time button i is pressed, or clear if it is not pressed anymore
} }
bool shiftRegButton::checkButton(uint8_t n) { // return buttonsPressed[n];
return buttonsPressed & (1 << n); } shiftRegButton::checkButtonCycle(uint8_t n) { // if(!buttonsPressed[n] && cycleFlag[n]) {
if(!(buttonsPressed & (1 << n)) && (cycleFlag & (1 << n)) ) { // buttonsCycle[n] = true;
buttonsCycle |= 1 << n; // cycleFlag[n] = false;
cycleFlag &= ~(1 << n); } } shiftRegButton::clearButton(uint8_t buttonToBeCleared) { // buttonsCycle[buttonToBeCleared] = false;
buttonsCycle &= ~(1 << buttonToBeCleared); } shiftRegButton::clearAllButtons() { for(uint8_t i = 0; i < numberOfButtons; i++) { // buttonsCycle[i] = false;
buttonsCycle &= ~(1 << i); } }
bool shiftRegButton::getButtonCycle(uint8_t n) { // return buttonsCycle[n];
return buttonsCycle & (1 << n); } uint16_t shiftRegButton::getAnyPressed() { return buttonsPressed; }
|