3 Commits
Author SHA1 Message Date
kleiax 5a0c04a670 another fix 2023-12-10 17:49:56 +01:00
kleiax 7466bcacff remove wrong const 2023-12-10 17:47:41 +01:00
kleiax d90a38eebb - added const
- added static check function
- added getLastState
2023-12-10 15:17:31 +01:00
2 changed files with 26 additions and 11 deletions
+4 -2
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);
bool isPressedLast(Button button) const;
uint16_t getState();
uint16_t getLastState();
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()
{
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;
}