Демо програма

Щоб протестувати всі можливості Дрона і заодно перевірити чи все функціонує як слід, завантажте Демо-програму на Дрон. Як попередньо налаштувати комп’ютер для роботи з Дроном можна подивитись в розділі Початок

  1#define PIN_SERIAL_RX PA3
  2#define PIN_SERIAL_TX PA2
  3#define IRMP_INPUT_PIN PA1
  4#define TIM4 TIM1
  5#define IRMP_SUPPORT_NEC_PROTOCOL 1
  6#define IRMP_USE_COMPLETE_CALLBACK 1
  7
  8#include <irmp.hpp>
  9
 10IRMP_DATA data;
 11volatile bool dataReceived = false;
 12int leds[] = { PA5, PA7, PB0, PA12, PB3 };
 13
 14int ledsAmount = 0;
 15int pa11Value = 0;
 16int pa0Value = 0;
 17
 18
 19enum CurrentPheripheral {
 20  POTENTIOMETER,
 21  IR,
 22  PHOTORESISTOR,
 23  BUTTONS
 24};
 25
 26CurrentPheripheral currentPheripheral = POTENTIOMETER;
 27
 28void setup() {
 29  Serial.begin(115200);
 30  pinMode(PA6, OUTPUT);
 31  pinMode(PA11, INPUT);
 32  pinMode(PC15, INPUT);
 33  pinMode(PA4, INPUT);
 34  pinMode(PA0, INPUT);
 35
 36  pinMode(PA5, OUTPUT);
 37  pinMode(PA7, OUTPUT);
 38  pinMode(PB0, OUTPUT);
 39  pinMode(PA12, OUTPUT);
 40  pinMode(PB3, OUTPUT);
 41
 42  irmp_init();
 43  irmp_register_complete_callback_function(&processSignal);
 44  attachInterrupt(PA4, reactionA, FALLING);
 45  attachInterrupt(PC15, reactionB, FALLING);
 46}
 47
 48void loop() {
 49  readAndProcessPotentiometer();
 50  processIr();
 51  readAndProcessPhotoresistor();
 52  turnOffAllLeds();
 53  turnOnFirstLeds(ledsAmount);
 54  Serial.println(ledsAmount);
 55  delay(100);
 56}
 57
 58void turnOffAllLeds() {
 59  for (int i = 0; i < 5; i++) {
 60    digitalWrite(leds[i], 0);
 61  }
 62  // noTone(PA6);
 63}
 64
 65void turnOnFirstLeds(int ledsAmount) {
 66  for (int i = 0; i < ledsAmount; i++) {
 67    digitalWrite(leds[i], 1);
 68  }
 69  if (ledsAmount > 4) {
 70    tone(PA6, 1500, 100);
 71    digitalWrite(PA6, 1);
 72
 73  } else {
 74    digitalWrite(PA6, 0);
 75  }
 76}
 77
 78void readAndProcessPotentiometer() {
 79  int newValue = analogRead(PA11);
 80  if (abs(pa11Value - newValue) > 50) {
 81    currentPheripheral = POTENTIOMETER;
 82    pa11Value = newValue;
 83    ledsAmount = map(pa11Value, 2, 960, 0, 5);
 84    Serial.println(newValue);
 85  }
 86}
 87
 88void readAndProcessPhotoresistor() {
 89  int newValue = analogRead(PA0);
 90  if (pa0Value != newValue) {
 91    if (abs(pa0Value - newValue) > 60) {
 92      currentPheripheral = PHOTORESISTOR;
 93    }
 94  }
 95
 96  if (currentPheripheral == PHOTORESISTOR) {
 97    pa0Value = newValue;
 98    ledsAmount = map(newValue, 50, 950, 0, 5);
 99    Serial.println(newValue);  }
100}
101
102void processIr() {
103  if (dataReceived) {
104    dataReceived = false;
105    currentPheripheral = IR;
106    if (data.flags == 0) {
107      Serial.println(data.command);
108      int buttonNumber = data.command;
109      if (buttonNumber == 0 && ledsAmount < 5) {
110        ledsAmount++;
111      }
112      if (buttonNumber == 1 && ledsAmount > 0) {
113        ledsAmount--;
114      }
115    }
116  }
117}
118
119void processSignal() {
120  irmp_get_data(&data);
121  dataReceived = true;
122}
123
124void reactionA() {
125  if (ledsAmount > 0) {
126    currentPheripheral = BUTTONS;
127    Serial.println("A");
128    ledsAmount--;
129  }
130}
131
132void reactionB() {
133  if (ledsAmount < 5) {
134    currentPheripheral = BUTTONS;
135    Serial.println("B");
136    ledsAmount++;
137  }
138}

Щоб програма успішно зібралась, потрібно встановити бібліотеку IRMP:

Зберіть модулі як на картинці нижче, підключіть Дрон до комп’ютера, переведіть Дрон в режим програмування (див. 1-ий урок) і завантажте Демо-програму на Дрон. Можете покрутити регулятор, понатискати кнопки на Дроні чи на пульті і поспостерігати за реакцією.