Initial commit
This commit is contained in:
commit
0e6a5b0ac6
11 changed files with 221 additions and 0 deletions
10
.editorconfig
Normal file
10
.editorconfig
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
end_of_line = lf
|
||||||
|
insert_final_newline = true
|
||||||
|
|
||||||
|
[*.{cpp,hpp,c,h,ino}]
|
||||||
|
charset = utf-8
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 2
|
5
.vscode/arduino.json
vendored
Normal file
5
.vscode/arduino.json
vendored
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
"sketch": "nopeustesti.ino",
|
||||||
|
"board": "arduino:avr:micro",
|
||||||
|
"port": "/dev/cu.usbmodem14101"
|
||||||
|
}
|
37
.vscode/c_cpp_properties.json
vendored
Normal file
37
.vscode/c_cpp_properties.json
vendored
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
{
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"name": "Mac",
|
||||||
|
"includePath": [
|
||||||
|
"/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/cores/arduino",
|
||||||
|
"/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/variants/micro",
|
||||||
|
"/Applications/Arduino.app/Contents/Java/hardware/tools/avr/avr/include",
|
||||||
|
"/Applications/Arduino.app/Contents/Java/hardware/tools/avr/lib/gcc/avr/7.3.0/include"
|
||||||
|
],
|
||||||
|
"browse": {
|
||||||
|
"path": [
|
||||||
|
"/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/cores/arduino",
|
||||||
|
"/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/variants/micro",
|
||||||
|
"/Applications/Arduino.app/Contents/Java/hardware/tools/avr/avr/include",
|
||||||
|
"/Applications/Arduino.app/Contents/Java/hardware/tools/avr/lib/gcc/avr/7.3.0/include"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"forcedInclude": [],
|
||||||
|
"macFrameworkPath": [
|
||||||
|
"/System/Library/Frameworks",
|
||||||
|
"/Library/Frameworks"
|
||||||
|
],
|
||||||
|
"intelliSenseMode": "clang-x64",
|
||||||
|
"compilerPath": "/usr/bin/clang",
|
||||||
|
"cStandard": "c11",
|
||||||
|
"cppStandard": "c++17",
|
||||||
|
"compilerArgs": [
|
||||||
|
"-Werror -Wall -Wextra -pedantic"
|
||||||
|
],
|
||||||
|
"defines": [
|
||||||
|
"USBCON"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"version": 4
|
||||||
|
}
|
17
nopeustesti.ino
Normal file
17
nopeustesti.ino
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
#include "src/debugger.hpp"
|
||||||
|
#include "src/game.hpp"
|
||||||
|
#include "src/randomiser.hpp"
|
||||||
|
|
||||||
|
Debugger* debugger;
|
||||||
|
Randomiser* randomiser;
|
||||||
|
Game* game;
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
debugger = new Debugger(9600);
|
||||||
|
randomiser = new Randomiser(analogRead(0));
|
||||||
|
game = new Game(debugger, randomiser);
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
game->loop();
|
||||||
|
}
|
37
src/config.hpp
Normal file
37
src/config.hpp
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
/**
|
||||||
|
* Set to true to enable debug prints (via serial console) and false to disable.
|
||||||
|
*/
|
||||||
|
const bool DEBUG = true;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Amount of buttons in the game.
|
||||||
|
*/
|
||||||
|
const uint8_t BUTTONS = 4;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delay at start of game between beeps, in milliseconds.
|
||||||
|
*/
|
||||||
|
const uint16_t DELAY_START = 570;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function to decrement the given delay. Should return the new smaller delay.
|
||||||
|
*/
|
||||||
|
const auto DELAY_DECREMENT = [](uint16_t delay) -> uint16_t {
|
||||||
|
double newDelay;
|
||||||
|
if (delay > 399) {
|
||||||
|
newDelay = delay * 0.993;
|
||||||
|
} else if (delay > 326) {
|
||||||
|
newDelay = delay * 0.996;
|
||||||
|
} else if (delay > 192) {
|
||||||
|
newDelay = delay * 0.9985;
|
||||||
|
} else {
|
||||||
|
newDelay = delay - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return static_cast<uint16_t>(newDelay);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Maximum amount of beeps you can be "behind" before the game is stopped.
|
||||||
|
*/
|
||||||
|
const uint8_t MAX_WAITING = 10;
|
20
src/debugger.cpp
Normal file
20
src/debugger.cpp
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
#include "debugger.hpp"
|
||||||
|
|
||||||
|
#include <Arduino.h>
|
||||||
|
#include "config.hpp"
|
||||||
|
|
||||||
|
Debugger::Debugger(uint16_t port) : serialPort(port) {
|
||||||
|
Serial.begin(serialPort);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Debugger::print(String msg, bool newline) {
|
||||||
|
if (DEBUG) {
|
||||||
|
auto msgCopy = String(msg);
|
||||||
|
|
||||||
|
if (newline) {
|
||||||
|
msgCopy.concat("\r\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
Serial.write(msgCopy.c_str());
|
||||||
|
}
|
||||||
|
}
|
16
src/debugger.hpp
Normal file
16
src/debugger.hpp
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
#include <Arduino.h>
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Debugger class providing an interface to the serial port. To disable the debug calls entirely,
|
||||||
|
* use the DEBUG configuration variable.
|
||||||
|
*/
|
||||||
|
class Debugger {
|
||||||
|
uint16_t serialPort;
|
||||||
|
|
||||||
|
public:
|
||||||
|
Debugger(uint16_t port);
|
||||||
|
|
||||||
|
void print(String msg, bool newline = true);
|
||||||
|
};
|
34
src/game.cpp
Normal file
34
src/game.cpp
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
#include "game.hpp"
|
||||||
|
|
||||||
|
#include <Arduino.h>
|
||||||
|
#include "config.hpp"
|
||||||
|
#include "debugger.hpp"
|
||||||
|
#include "randomiser.hpp"
|
||||||
|
|
||||||
|
Game::Game(Debugger* debugger, Randomiser* randomiser) : debugger(debugger),
|
||||||
|
randomiser(randomiser),
|
||||||
|
state(State::MENU),
|
||||||
|
currentDelay(DELAY_START),
|
||||||
|
currentScore(0),
|
||||||
|
waitingBeeps({}),
|
||||||
|
waitingBeepsAmount(0) {
|
||||||
|
debugger->print("Initialising new game...");
|
||||||
|
}
|
||||||
|
|
||||||
|
void Game::loop() {
|
||||||
|
++currentScore;
|
||||||
|
|
||||||
|
auto msg = String("Delay: ");
|
||||||
|
msg.concat(currentDelay);
|
||||||
|
debugger->print(msg);
|
||||||
|
|
||||||
|
msg = String("Score: ");
|
||||||
|
msg.concat(currentScore);
|
||||||
|
debugger->print(msg);
|
||||||
|
|
||||||
|
msg = String(randomiser->get());
|
||||||
|
debugger->print(msg);
|
||||||
|
|
||||||
|
delay(currentDelay);
|
||||||
|
currentDelay = DELAY_DECREMENT(currentDelay);
|
||||||
|
}
|
24
src/game.hpp
Normal file
24
src/game.hpp
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
#include "config.hpp"
|
||||||
|
#include "debugger.hpp"
|
||||||
|
#include "randomiser.hpp"
|
||||||
|
|
||||||
|
enum State {
|
||||||
|
MENU,
|
||||||
|
GAME,
|
||||||
|
SCORE
|
||||||
|
};
|
||||||
|
|
||||||
|
class Game {
|
||||||
|
Debugger* debugger;
|
||||||
|
Randomiser* randomiser;
|
||||||
|
State state;
|
||||||
|
uint16_t currentDelay;
|
||||||
|
uint16_t currentScore;
|
||||||
|
uint8_t waitingBeeps[MAX_WAITING];
|
||||||
|
uint8_t waitingBeepsAmount;
|
||||||
|
|
||||||
|
public:
|
||||||
|
Game(Debugger* debugger, Randomiser* randomiser);
|
||||||
|
|
||||||
|
void loop();
|
||||||
|
};
|
12
src/randomiser.cpp
Normal file
12
src/randomiser.cpp
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
#include "randomiser.hpp"
|
||||||
|
|
||||||
|
#include <Arduino.h>
|
||||||
|
#include "config.hpp"
|
||||||
|
|
||||||
|
Randomiser::Randomiser(uint32_t seed) {
|
||||||
|
randomSeed(seed);
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t Randomiser::get() {
|
||||||
|
return random(0, BUTTONS);
|
||||||
|
}
|
9
src/randomiser.hpp
Normal file
9
src/randomiser.hpp
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
#include <Arduino.h>
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
class Randomiser {
|
||||||
|
public:
|
||||||
|
Randomiser(uint32_t seed);
|
||||||
|
int32_t get();
|
||||||
|
};
|
Reference in a new issue