#pragma once #include #ifndef MECOFFEE_ARDUINO_16MHZ #define MECOFFEE_ARDUINO_16MHZ 0 #endif namespace meCoffee::hardware::board { constexpr bool kUsesExternalClock = MECOFFEE_ARDUINO_16MHZ != 0; constexpr uint32_t kClockFrequency = kUsesExternalClock ? 16000000UL : 8000000UL; constexpr uint16_t kPulseTimerCompare = static_cast(129UL * (kClockFrequency / 8000000UL) - 1); constexpr uint8_t kAdcPrescaler = 128; constexpr uint8_t kGenerationParityPin = kUsesExternalClock ? 11 : 14; inline uint8_t physicalPin(uint8_t logicalPin) { if (!kUsesExternalClock) { return logicalPin; } switch (logicalPin) { case 3: return 3; case 10: return 4; case 9: return 5; case 4: return 6; case 5: return 7; case 8: return 8; case 15: return 9; case 19: return 10; case 16: return 12; default: return logicalPin; } } inline uint8_t analogChannel(uint8_t logicalChannel) { if (kUsesExternalClock) { if (logicalChannel == 3) { return 0; } if (logicalChannel == 4) { return 1; } } return logicalChannel; } } // namespace meCoffee::hardware::board