#include "SevSeg.h"
class UltrasonicSensor {
private:
const int trigPin;
const int echoPin;
public:
UltrasonicSensor(int trig, int echo) : trigPin(trig), echoPin(echo) {
pinMode(echoPin, INPUT_PULLUP);
pinMode(trigPin, OUTPUT);
}
int getDistance() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
return duration * 0.034 / 2;
}
};
class ScoreDisplay {
private:
SevSeg sevseg;
public:
void begin() {
byte numDigits = 2;
byte digitPins[] = {4, 3};
byte segmentPins[] = {11, 10, 9, 8, 7, 6, 5};
bool resistorsOnSegments = false;
byte hardwareConfig = COMMON_ANODE;
bool updateWithDelays = false;
bool leadingZeros = false;
bool disableDecPoint = true;
sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments,
updateWithDelays, leadingZeros, disableDecPoint);
sevseg.setBrightness(90);
}
void displayScore(int score) {
sevseg.setNumber(score);
sevseg.refreshDisplay();
}
};
class Game {
private:
UltrasonicSensor sensor;
ScoreDisplay display;
int score;
public:
Game(int trigPin, int echoPin) : sensor(trigPin, echoPin), score(0) {}
void setup() {
display.begin();
}
void loop() {
display.displayScore(score);
int distance = sensor.getDistance();
if (distance <= 9) {
score += 1;
delay(500);
if (score == 100) {
score = 0;
}
}
}
};
Game game(13, 12); // TRIG_PIN = 13, ECHO_PIN = 12
void setup() {
game.setup();
}
void loop() {
game.loop();
}