- added const

- added static check function
- added getLastState
This commit is contained in:
2023-12-10 15:17:31 +01:00
parent f19b4c485a
commit d90a38eebb
2 changed files with 27 additions and 12 deletions
+5 -3
View File
@@ -24,9 +24,11 @@ class Gamepad{
Gamepad(uint8_t latch, uint8_t clock, uint8_t data);
bool isPressed(Button button);
bool isPressedLast(Button button);
uint16_t getState();
uint16_t getLastState();
bool isPressedLast(Button button) const;
uint16_t getState() const;
uint16_t getLastState() const { return this->lastState; }
static bool isPressed(uint16_t input, Button button);
private:
uint16_t readCon();
+22 -9
View File
@@ -1,6 +1,7 @@
#include "gamepad.h"
Gamepad::Gamepad(uint8_t latch, uint8_t clock, uint8_t data){
Gamepad::Gamepad(uint8_t latch, uint8_t clock, uint8_t data)
{
this->latch = latch;
this->clock = clock;
this->data = data;
@@ -16,11 +17,13 @@ Gamepad::Gamepad(uint8_t latch, uint8_t clock, uint8_t data){
pinMode(data, INPUT);
}
uint16_t Gamepad::getState(){
uint16_t Gamepad::getState() const
{
return this->readCon();
}
uint16_t Gamepad::readCon(){
uint16_t Gamepad::readCon()
{
uint16_t res = 0;
digitalWrite(this->latch, HIGH);
@@ -28,7 +31,8 @@ uint16_t Gamepad::readCon(){
digitalWrite(this->latch, LOW);
delayMicroseconds(6);
for (uint8_t i = 0; i < NUM_KEYS; i++){
for (uint8_t i = 0; i < NUM_KEYS; i++)
{
digitalWrite(this->clock, LOW);
delayMicroseconds(6);
res |= (!digitalRead(this->data) << i);
@@ -36,18 +40,27 @@ uint16_t Gamepad::readCon(){
delayMicroseconds(6);
}
lastState = res;
this->lastState = res;
return res;
}
bool Gamepad::isPressed(Button button) {
if ((uint16_t) button & this->readCon())
bool Gamepad::isPressed(Button button)
{
if ((uint16_t)button & this->readCon())
return true;
return false;
}
bool Gamepad::isPressedLast(Button button) {
if ((uint16_t) button & this->lastState)
bool Gamepad::isPressedLast(Button button) const
{
if ((uint16_t)button & this->lastState)
return true;
return false;
}
bool Gamepad::isPressed(uint16_t input, Button button)
{
if ((uint16_t)button & input)
return true;
return false;
}