2#ifdef USE_TR_ARDUINO_EMULATION
8#include "TinyRobotics/utils/Config.h"
10#include "TinyRobotics/utils/LoggerClass.h"
13namespace tinyrobotics_arduino {
14enum PinMode { INPUT = 0, OUTPUT = 1 };
15enum DigitalValue { LOW = 0, HIGH = 1 };
19inline unsigned long millis() {
20 static auto start = std::chrono::steady_clock::now();
21 auto now = std::chrono::steady_clock::now();
22 return std::chrono::duration_cast<std::chrono::milliseconds>(now - start)
25inline void delay(
unsigned long ms) {
26 std::this_thread::sleep_for(std::chrono::milliseconds(ms));
29unsigned long millis();
30delay(
unsigned long ms);
34#if USE_DUMMY_PIN_FUNCTIONS
35inline void pinMode(
int pin,
int mode) {
36 tinyrobotics::TRLogger.debug(
"Emulator: pinMode(%d,%d)", pin, mode);
38inline void digitalWrite(
int pin,
int value) {
39 tinyrobotics::TRLogger.debug(
"Emulator: digitalWrite(%d,%d)", pin, value);
41inline void analogWrite(
int pin,
int value) {
42 tinyrobotics::TRLogger.debug(
"Emulator: analogWrite(%d,%d)", pin, value);
45void pinMode(
int,
int);
46void digitalWrite(
int,
int);
47void analogWrite(
int,
int);
52template <
typename T,
typename L,
typename H>
53constexpr T constrain(T amt, L low, H high) {
54 return std::min(std::max(amt,
static_cast<T>(low)),
static_cast<T>(high));
60template <
typename T,
typename U>
61constexpr auto map(T x, U in_min, U in_max, U out_min, U out_max) {
62 return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
68bool print_char(uint8_t ch) {
69 std::cout <<
static_cast<
char>(ch);
73bool print_char(uint8_t);
78struct HardwareSerial1 :
public Stream {
79 void begin(
unsigned long) {}
80 int read() override {
return -1; }
81 int peek() override {
return -1; }
82 int available() override {
return 0; }
83 size_t write(uint8_t ch) override {
84 return print_char(ch) ? 1 : 0;
88static HardwareSerial1 Serial;