ThinknodeM3Board.h 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #pragma once
  2. #include <MeshCore.h>
  3. #include <Arduino.h>
  4. #define ADC_FACTOR ((1000.0*ADC_MULTIPLIER*AREF_VOLTAGE)/ADC_MAX)
  5. class ThinknodeM3Board : public mesh::MainBoard {
  6. protected:
  7. uint8_t startup_reason;
  8. uint8_t btn_prev_state;
  9. public:
  10. void begin();
  11. uint16_t getBattMilliVolts() override {
  12. int adcvalue = 0;
  13. analogReference(AR_INTERNAL_2_4);
  14. analogReadResolution(ADC_RESOLUTION);
  15. delay(10);
  16. // ADC range is 0..2400mV and resolution is 12-bit (0..4095)
  17. adcvalue = analogRead(PIN_VBAT_READ);
  18. // Convert the raw value to compensated mv, taking the resistor-
  19. // divider into account (providing the actual LIPO voltage)
  20. return (uint16_t)((float)adcvalue * ADC_FACTOR);
  21. }
  22. uint8_t getStartupReason() const override { return startup_reason; }
  23. #if defined(P_LORA_TX_LED)
  24. #if !defined(P_LORA_TX_LED_ON)
  25. #define P_LORA_TX_LED_ON HIGH
  26. #endif
  27. void onBeforeTransmit() override {
  28. digitalWrite(P_LORA_TX_LED, P_LORA_TX_LED_ON); // turn TX LED on
  29. }
  30. void onAfterTransmit() override {
  31. digitalWrite(P_LORA_TX_LED, !P_LORA_TX_LED_ON); // turn TX LED off
  32. }
  33. #endif
  34. const char* getManufacturerName() const override {
  35. return "Elecrow ThinkNode M3";
  36. }
  37. int buttonStateChanged() {
  38. #ifdef BUTTON_PIN
  39. uint8_t v = digitalRead(BUTTON_PIN);
  40. if (v != btn_prev_state) {
  41. btn_prev_state = v;
  42. return (v == LOW) ? 1 : -1;
  43. }
  44. #endif
  45. return 0;
  46. }
  47. void powerOff() override {
  48. sd_power_system_off();
  49. }
  50. void reboot() override {
  51. NVIC_SystemReset();
  52. }
  53. // bool startOTAUpdate(const char* id, char reply[]) override;
  54. };