C++:
#include "settings.h"
#include "settings_internal.h"
#include "settings_eeprom.h"
#include "channels.h"
#include "receiver.h"
#include "receiver_spi.h"
#include "buttons.h"
#include "state.h"
#include "ui.h"
static void globalMenuButtonHandler(
Button button,
Buttons::PressType pressType
);
void setup()
{
setupPins();
digitalWrite(PIN_LED, HIGH);
digitalWrite(PIN_BUZZER, LOW);
setupSettings();
StateMachine::setup();
Receiver::setup();
Ui::setup();
Receiver::setActiveReceiver(Receiver::ReceiverId::A);
#ifdef USE_IR_EMITTER
Serial.begin(9600);
#endif
#ifdef USE_SERIAL_OUT
Serial.begin(250000);
#endif
// Setup complete.
digitalWrite(PIN_LED, LOW);
digitalWrite(PIN_BUZZER, HIGH);
Buttons::registerChangeFunc(globalMenuButtonHandler);
// Switch to initial state.
StateMachine::switchState(StateMachine::State::SEARCH);
}
void setupPins() {
pinMode(PIN_LED, OUTPUT);
pinMode(PIN_BUZZER, OUTPUT);
pinMode(PIN_BUTTON_UP, INPUT_PULLUP);
pinMode(PIN_BUTTON_MODE, INPUT_PULLUP);
pinMode(PIN_BUTTON_DOWN, INPUT_PULLUP);
pinMode(PIN_BUTTON_SAVE, INPUT_PULLUP);
pinMode(PIN_LED_A,OUTPUT);
#ifdef USE_DIVERSITY
pinMode(PIN_LED_B,OUTPUT);
#endif
pinMode(PIN_RSSI_A, INPUT_PULLUP);
#ifdef USE_DIVERSITY
pinMode(PIN_RSSI_B, INPUT_PULLUP);
#endif
pinMode(PIN_SPI_SLAVE_SELECT, OUTPUT);
pinMode(PIN_SPI_DATA, OUTPUT);
pinMode(PIN_SPI_CLOCK, OUTPUT);
digitalWrite(PIN_SPI_SLAVE_SELECT, HIGH);
digitalWrite(PIN_SPI_CLOCK, LOW);
digitalWrite(PIN_SPI_DATA, LOW);
}
void setupSettings() {
EepromSettings.load();
Receiver::setChannel(EepromSettings.startChannel);
}
void loop() {
Receiver::update();
Buttons::update();
StateMachine::update();
Ui::update();
EepromSettings.update();
if (
StateMachine::currentState != StateMachine::State::SCREENSAVER
&& StateMachine::currentState != StateMachine::State::BANDSCAN
&& (millis() - Buttons::lastChangeTime) >
(SCREENSAVER_TIMEOUT * 1000)
) {
StateMachine::switchState(StateMachine::State::SCREENSAVER);
}
}
static void globalMenuButtonHandler(
Button button,
Buttons::PressType pressType
) {
if (
StateMachine::currentState != StateMachine::State::MENU &&
button == Button::MODE &&
pressType == Buttons::PressType::HOLDING
) {
StateMachine::switchState(StateMachine::State::MENU);
}
}
//Ниже приведена быстрая видео-демонстрация производительности дисплея I2C OLED.
//#исходный код Код Вам понадобятся следующие библиотеки Adafruit:
//Adafruit_SSD1306.h
//Adafruit_GFX.h
//TVout.h
//fontALL.h
//Wire.h
//SPI.h
//Примечание: одновременно
//можно использовать только один передатчик
//mso-bidi-font-family:"Times New Roman";color:#24292E'>Убедитесь, что вы выбрали
//правильный размер экрана в Adafruit_SSD1306.х
//####ВЕДОМОСТЬ МАТЕРИАЛОВ
- //3x 1K резистор
- //Резистор 1x 330 (опционный)
- //1X rx5808 приемник с spi mod
- //1x светодиоды (опционально)
- //3x мгновенный переключатель
- //1x тумблер
- //Зуммер 1x (опционный)
- //1x Arduino Nano 3.0 328
- //1X OLED-дисплей 128x64 I2C (5v tollerant)
- //####Схематический
Вложения
-
24.2 KB Просмотры: 13