платы для FPV приемника

high voltage-afk

✩✩✩✩✩✩✩
4 Мар 2020
7
0
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);
    }
}
//OLED скриншоты
//Ниже приведена быстрая видео-демонстрация производительности дисплея 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)
  • //####Схематический
 

Вложения