Демо програма
Щоб протестувати всі можливості Дрона і заодно перевірити чи все функціонує як слід, завантажте Демо-програму на Дрон. Як попередньо налаштувати комп’ютер для роботи з Дроном можна подивитись в розділі Початок
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-ий урок) і завантажте Демо-програму на Дрон. Можете покрутити регулятор, понатискати кнопки на Дроні чи на пульті і поспостерігати за реакцією.