Robotka
Knihovna pro obsluhu Robotky.
robotka.h
Zobrazit dokumentaci tohoto souboru.
1 
8 #ifndef _LIBRB_H
9 #define _LIBRB_H
10 
11 #include <memory>
12 
13 #include <fmt/core.h>
14 #include <fmt/printf.h>
15 
16 #include <Arduino.h>
17 
18 #include "SmartLeds.h"
19 
20 #include "RBCX.h"
21 #include "gridui.h"
22 #include "rbprotocol.h"
23 
24 using namespace gridui;
25 
39 struct rkPinsConfig {
40  rkPinsConfig()
41  : line_cs(5)
42  , line_mosi(23)
43  , line_miso(19)
44  , line_sck(18)
45  , smartled_sig(12)
46  , ir_adc_chan_left(ADC1_CHANNEL_0)
47  , ir_adc_chan_right(ADC1_CHANNEL_3) {
48  }
49 
50  uint8_t line_cs;
51  uint8_t line_mosi;
52  uint8_t line_miso;
53  uint8_t line_sck;
54 
55  uint8_t smartled_sig;
56 
57  adc1_channel_t ir_adc_chan_left;
58  adc1_channel_t ir_adc_chan_right;
59 };
60 
61 #define RK_DEFAULT_WIFI_AP_PASSWORD "flusflus"
62 
70 struct rkConfig {
71  rkConfig()
72  : rbcontroller_app_enable(false)
73  , owner("Nenastaven")
74  , name("Nenastaveno")
75  , wifi_name("")
76  , wifi_password("")
77  , wifi_default_ap(false)
78  , wifi_ap_password(RK_DEFAULT_WIFI_AP_PASSWORD)
79  , wifi_ap_channel(1)
80  , motor_id_left(1)
81  , motor_id_right(4)
82  , motor_max_power_pct(80)
83  , motor_polarity_switch_left(false)
84  , motor_polarity_switch_right(true)
85  , motor_enable_failsafe(false)
86  , motor_wheel_diameter(67)
87  , motor_max_ticks_per_second(2000)
88  , motor_max_acceleration(10000)
89  , stupid_servo_min(-1.65f)
90  , stupid_servo_max(1.65f)
91  , smart_leds_count(8) {
92  }
93 
95 
96  const char* owner;
97  const char* name;
98 
99  const char* wifi_name;
100  const char* wifi_password;
101 
103  const char* wifi_ap_password;
104  uint8_t wifi_ap_channel;
105 
106  uint8_t motor_id_left;
107  uint8_t motor_id_right;
113 
121 
130 
133 
134  uint16_t smart_leds_count;
135 
137 };
138 
145 void rkSetup(const rkConfig& cfg = rkConfig());
146 
161 void rkMotorsSetPower(int8_t left, int8_t right);
162 
168 void rkMotorsSetPowerLeft(int8_t power);
169 
175 void rkMotorsSetPowerRight(int8_t power);
176 
183 void rkMotorsSetPowerById(uint8_t id, int8_t power);
184 
191 void rkMotorsSetSpeed(int8_t left, int8_t right);
192 
198 void rkMotorsSetSpeedLeft(int8_t speed);
199 
205 void rkMotorsSetSpeedRight(int8_t speed);
206 
213 void rkMotorsSetSpeedById(uint8_t id, int8_t speed);
214 
224 void rkMotorsDrive(float mmLeft, float mmRight, uint8_t speed);
225 
234 void rkMotorsDriveLeft(float mm, uint8_t speed);
235 
244 void rkMotorsDriveRight(float mm, uint8_t speed);
245 
255 void rkMotorsDriveById(uint8_t id, float mm, uint8_t speed);
256 
274 void rkMotorsDriveAsync(float mmLeft, float mmRight, uint8_t speed, std::function<void()> callback = nullptr);
275 
292 void rkMotorsDriveLeftAsync(float mm, uint8_t speed, std::function<void()> callback = nullptr);
293 
310 void rkMotorsDriveRightAsync(float mm, uint8_t speed, std::function<void()> callback = nullptr);
311 
329 void rkMotorsDriveByIdAsync(uint8_t id, float mm, uint8_t speed, std::function<void()> callback = nullptr);
330 
337 
344 
351 float rkMotorsGetPositionById(uint8_t id);
352 
358 void rkMotorsSetPositionLeft(float positionMm = 0.f);
359 
365 void rkMotorsSetPositionRight(float positionMm = 0.f);
366 
373 void rkMotorsSetPositionById(uint8_t id, float positionMm = 0.f);
374 
385 void rkMotorsJoystick(int32_t x, int32_t y);
386 
400 uint32_t rkBatteryPercent();
401 
407 uint32_t rkBatteryVoltageMv();
408 
414 int16_t rkTemperature();
415 
435 void rkControllerSendLog(const char* format, ...);
436 void rkControllerSendLog(const std::string& text);
437 
438 void rkControllerSend(const char* cmd, rbjson::Object* data = nullptr);
439 void rkControllerSendMustArrive(const char* cmd, rbjson::Object* data = nullptr);
440 
453 void rkLedRed(bool on = true);
458 void rkLedYellow(bool on = true);
463 void rkLedGreen(bool on = true);
468 void rkLedBlue(bool on = true);
469 
474 void rkLedAll(bool on = true);
475 
480 void rkLedById(uint8_t id, bool on = true);
481 
494  BTN_DOWN = rb::ButtonId::Down,
495  BTN_UP = rb::ButtonId::Up,
496  BTN_LEFT = rb::ButtonId::Left,
497  BTN_RIGHT = rb::ButtonId::Right,
498  BTN_ON = rb::ButtonId::On,
499  BTN_OFF = rb::ButtonId::Off,
500 };
501 
502 #define EXTRA_BUTTON1 27
503 #define EXTRA_BUTTON2 14
504 
512 bool rkButtonIsPressed(rkButtonId id, bool waitForRelease = false);
513 
539 void rkButtonOnChangeAsync(std::function<bool(rkButtonId, bool)> callback = nullptr);
540 
547 inline bool rkButtonDown(bool waitForRelease = false) {
548  return rkButtonIsPressed(BTN_DOWN, waitForRelease);
549 }
550 
557 inline bool rkButtonUp(bool waitForRelease = false) {
558  return rkButtonIsPressed(BTN_UP, waitForRelease);
559 }
560 
567 inline bool rkButtonLeft(bool waitForRelease = false) {
568  return rkButtonIsPressed(BTN_LEFT, waitForRelease);
569 }
570 
577 inline bool rkButtonRight(bool waitForRelease = false) {
578  return rkButtonIsPressed(BTN_RIGHT, waitForRelease);
579 }
580 
587 inline bool rkButtonOn(bool waitForRelease = false) {
588  return rkButtonIsPressed(BTN_ON, waitForRelease);
589 }
590 
597 inline bool rkButtonOff(bool waitForRelease = false) {
598  return rkButtonIsPressed(BTN_OFF, waitForRelease);
599 }
600 
609 
636 void rkLineCalibrate(float motor_time_coef = 1.0);
637 
644 
651 uint16_t rkLineGetSensor(uint8_t sensorId);
652 
663 float rkLineGetPosition(bool white_line = false, uint8_t line_threshold_pct = 25);
664 
678 uint16_t rkIrLeft();
679 
684 uint16_t rkIrRight();
685 
703 uint32_t rkUltraMeasure(uint8_t id);
704 
729 void rkUltraMeasureAsync(uint8_t id, std::function<bool(uint32_t)> callback);
730 
745 void rkBuzzerSet(bool on);
746 
766 void rkSmartLedsRGB(uint16_t idx, uint8_t r, uint8_t g, uint8_t b);
767 
778 void rkSmartLedsHSV(uint16_t idx, uint8_t h, uint8_t s, uint8_t v);
779 
785 void rkSmartLedsHEX(uint16_t idx, uint32_t hexCode);
786 SmartLed& rkSmartLedsGetController();
787 
802 void rkServosSetPosition(uint8_t id, float angleDegrees);
803 
810 float rkServosGetPosition(uint8_t id);
811 
819 void rkServosDisable(uint8_t id);
820 
823 #endif // LIBRB_H
int16_t rkTemperature()
Teplota desky v Robotce.
Definition: robotka.cpp:67
uint32_t rkBatteryPercent()
Úroveň baterie v procentech.
Definition: robotka.cpp:59
uint32_t rkBatteryVoltageMv()
Úroveň baterie v mV.
Definition: robotka.cpp:63
void rkButtonOnChangeAsync(std::function< bool(rkButtonId, bool)> callback=nullptr)
Asynchroní zpracování události o stisku tlačítka.
Definition: robotka.cpp:259
bool rkButtonIsPressed(rkButtonId id, bool waitForRelease=false)
Je teď stisknuto tlačítko?
Definition: robotka.cpp:244
void rkButtonWaitForRelease(rkButtonId id)
Počkat, dokud není tlačítko uvolněno.
Definition: robotka.cpp:265
bool rkButtonDown(bool waitForRelease=false)
Je teď stisknuto "dolů"?
Definition: robotka.h:547
bool rkButtonOn(bool waitForRelease=false)
Je teď stisknuto "ON"?
Definition: robotka.h:587
rkButtonId
Seznam konstant označujícíh tlačítka, pro použítí v rkButtonIsPressed a dalších.
Definition: robotka.h:493
bool rkButtonUp(bool waitForRelease=false)
Je teď stisknuto "nahoru"?
Definition: robotka.h:557
bool rkButtonLeft(bool waitForRelease=false)
Je teď stisknuto "doleva"?
Definition: robotka.h:567
bool rkButtonOff(bool waitForRelease=false)
Je teď stisknuto "OFF"?
Definition: robotka.h:597
bool rkButtonRight(bool waitForRelease=false)
Je teď stisknuto "doprava"?
Definition: robotka.h:577
@ BTN_RIGHT
Tlačítko doprava.
Definition: robotka.h:497
@ BTN_LEFT
Tlačítko doleva.
Definition: robotka.h:496
@ BTN_ON
Tlačítko ON/Ok (prostřední)
Definition: robotka.h:498
@ BTN_UP
Tlačítko nahoru.
Definition: robotka.h:495
@ BTN_OFF
Tlačítko Off/Esc.
Definition: robotka.h:499
@ BTN_DOWN
Tlačítko dolů
Definition: robotka.h:494
void rkBuzzerSet(bool on)
Zapnout/vypnout bzučák.
Definition: robotka.cpp:370
#define RK_DEFAULT_WIFI_AP_PASSWORD
Výchozí heslo pro WiFi AP.
Definition: robotka.h:61
void rkSetup(const rkConfig &cfg=rkConfig())
Inicializační funkce Robotky.
Definition: robotka.cpp:19
uint16_t rkIrLeft()
Hodnota z levého IR senzoru.
Definition: robotka.cpp:336
uint16_t rkIrRight()
Hodnota z pravého IR senzoru.
Definition: robotka.cpp:340
void rkLedAll(bool on=true)
Zapnout/vypnout všechny LED zaráz.
Definition: robotka.cpp:223
void rkLedRed(bool on=true)
Zapnout/vypnout červenou LED.
Definition: robotka.cpp:207
void rkLedBlue(bool on=true)
Zapnout/vypnout modrou LED.
Definition: robotka.cpp:219
void rkLedGreen(bool on=true)
Zapnout/vypnout zelenou LED.
Definition: robotka.cpp:215
void rkLedYellow(bool on=true)
Zapnout/vypnout žlutou LED.
Definition: robotka.cpp:211
void rkLedById(uint8_t id, bool on=true)
Zapnout/vypnout LED podle jejich čísla na desce, od 1 do 4 včetně.
Definition: robotka.cpp:231
uint16_t rkLineGetSensor(uint8_t sensorId)
Hodnota z jednoho senzoru na čáru.
Definition: robotka.cpp:328
void rkLineClearCalibration()
Vymazat kalibraci.
Definition: robotka.cpp:318
void rkLineCalibrate(float motor_time_coef=1.0)
Kalibrovat senzorickou lištu.
Definition: robotka.cpp:280
float rkLineGetPosition(bool white_line=false, uint8_t line_threshold_pct=25)
Pozice čáry pod senzorickou lištou.
Definition: robotka.cpp:332
void rkMotorsDrive(float mmLeft, float mmRight, uint8_t speed)
Popojetí oběma motory o vzdálenost v mm (blokující).
Definition: robotka.cpp:113
void rkMotorsJoystick(int32_t x, int32_t y)
Nastavení rychlosti motorů podle joysticku.
Definition: robotka.cpp:203
float rkMotorsGetPositionLeft()
Vrátí absolutní najetou vzálenost na levém motoru v mm.
Definition: robotka.cpp:168
void rkMotorsDriveLeftAsync(float mm, uint8_t speed, std::function< void()> callback=nullptr)
Popojetí levým motorem o vzdálenost v mm (asynchroní).
Definition: robotka.cpp:151
void rkMotorsSetPositionById(uint8_t id, float positionMm=0.f)
Nastaví absolutní počítadlo vzdálenosti na motoru podle ID na hodnotu v mm.
Definition: robotka.cpp:193
void rkMotorsSetPowerLeft(int8_t power)
Nastavení výkonu levého motoru.
Definition: robotka.cpp:75
void rkMotorsSetPowerRight(int8_t power)
Nastavení výkonu pravého motoru.
Definition: robotka.cpp:79
void rkMotorsSetSpeedRight(int8_t speed)
Nastavení rychlosti pravého motoru.
Definition: robotka.cpp:100
void rkMotorsDriveRight(float mm, uint8_t speed)
Popojetí pravým motorem o vzdálenost v mm (blokující).
Definition: robotka.cpp:127
void rkMotorsDriveAsync(float mmLeft, float mmRight, uint8_t speed, std::function< void()> callback=nullptr)
Popojetí oběma motory o vzdálenost v mm (asynchroní).
Definition: robotka.cpp:147
void rkMotorsSetPositionLeft(float positionMm=0.f)
Nastaví absolutní počítadlo vzdálenosti na levém motoru na hodnotu v mm.
Definition: robotka.cpp:185
void rkMotorsSetSpeedById(uint8_t id, int8_t speed)
Nastavení rychlosti motoru podle jeho čísla (M1...M4) na desce.
Definition: robotka.cpp:104
void rkMotorsSetPositionRight(float positionMm=0.f)
Nastaví absolutní počítadlo vzdálenosti na pravém motoru na hodnotu v mm.
Definition: robotka.cpp:189
void rkMotorsSetPower(int8_t left, int8_t right)
Nastavení výkonu motorů.
Definition: robotka.cpp:71
void rkMotorsSetSpeed(int8_t left, int8_t right)
Nastavení rychlosti motorů.
Definition: robotka.cpp:92
void rkMotorsDriveByIdAsync(uint8_t id, float mm, uint8_t speed, std::function< void()> callback=nullptr)
Popojetí motorem podle ID o vzdálenost v mm (asynchroní).
Definition: robotka.cpp:159
float rkMotorsGetPositionRight()
Vrátí absolutní najetou vzálenost na pravém motoru v mm.
Definition: robotka.cpp:172
void rkMotorsDriveById(uint8_t id, float mm, uint8_t speed)
Popojetí motorem podle ID o vzdálenost v mm (blokující).
Definition: robotka.cpp:131
void rkMotorsDriveLeft(float mm, uint8_t speed)
Popojetí levým motorem o vzdálenost v mm (blokující).
Definition: robotka.cpp:123
void rkMotorsSetPowerById(uint8_t id, int8_t power)
Nastavení výkonu motoru podle jeho čísla (M1...M4) na desce.
Definition: robotka.cpp:83
void rkMotorsSetSpeedLeft(int8_t speed)
Nastavení rychlosti levého motoru.
Definition: robotka.cpp:96
float rkMotorsGetPositionById(uint8_t id)
Vrátí absolutní najetou vzálenost na motoru podle ID.
Definition: robotka.cpp:176
void rkMotorsDriveRightAsync(float mm, uint8_t speed, std::function< void()> callback=nullptr)
Popojetí pravým motorem o vzdálenost v mm (asynchroní).
Definition: robotka.cpp:155
void rkControllerSendLog(const char *format,...)
Odeslat text do aplikace.
Definition: robotka.cpp:23
void rkSmartLedsHSV(uint16_t idx, uint8_t h, uint8_t s, uint8_t v)
Nastavit barvu chytré led ve formátu HSV (Hue, Saturation, Value).
Definition: robotka.cpp:383
void rkSmartLedsHEX(uint16_t idx, uint32_t hexCode)
Nastavit barvu chytré led podle RGB HEX kódu.
Definition: robotka.cpp:392
void rkSmartLedsRGB(uint16_t idx, uint8_t r, uint8_t g, uint8_t b)
Nastavit barvu chytré led ve formátu RGB (Red, Green, Blue).
Definition: robotka.cpp:374
void rkServosSetPosition(uint8_t id, float angleDegrees)
Nastaví pozici hloupého serva na zadaný úhel.
Definition: robotka.cpp:405
void rkServosDisable(uint8_t id)
Vypne hloupé servo.
Definition: robotka.cpp:423
float rkServosGetPosition(uint8_t id)
Vrátí naposledy nastavenou pozici hloupého serva.
Definition: robotka.cpp:414
uint32_t rkUltraMeasure(uint8_t id)
Změřit vzálenost (blokující)
Definition: robotka.cpp:344
void rkUltraMeasureAsync(uint8_t id, std::function< bool(uint32_t)> callback)
Změřit vzálenost (asynchroní)
Definition: robotka.cpp:356
Nastavení SW pro Robotky.
Definition: robotka.h:70
const char * wifi_password
Heslo k WiFi, na kterou se připojit. Výchozí: ""
Definition: robotka.h:100
float stupid_servo_max
Horní hranice signálu pro hloupá serva, která se rovná 90 stupňům. Výchozí: 1.65
Definition: robotka.h:132
uint8_t motor_id_left
Které M číslo motoru patří levému, podle čísla na desce. Výchozí: 2
Definition: robotka.h:106
bool rbcontroller_app_enable
povolit komunikaci s aplikací RBController. Výchozí: false
Definition: robotka.h:94
uint8_t motor_max_power_pct
Limit výkonu motoru v procentech od 0 do 100. Výchozí: 60
Definition: robotka.h:108
uint16_t smart_leds_count
Nastavení počtu připojených chytrých LED. Výchozí: 8.
Definition: robotka.h:134
uint16_t motor_wheel_diameter
Průměr kol robota v mm, použito na počítání ujeté vzdálenosti. Výchozí: 67 mm.
Definition: robotka.h:112
const char * name
Jméno robota. Výchozí: "".
Definition: robotka.h:97
const char * wifi_ap_password
Heslo k vytvořené síti. Výchozí: "flusflus"
Definition: robotka.h:103
uint32_t motor_max_acceleration
Maximální zrychlení motorů v ticích enkodéru za vteřinu. Výchozí: 50000
Definition: robotka.h:129
uint8_t wifi_ap_channel
Kanál WiFi vytvořené sítě. Výchozí: 1
Definition: robotka.h:104
bool motor_polarity_switch_left
Prohození polarity levého motoru. Výchozí: false
Definition: robotka.h:109
float stupid_servo_min
Spodní hranice signálu pro hloupá serva, která se robvná -90 stupňům. Výchozí: -1....
Definition: robotka.h:131
rkPinsConfig pins
Konfigurace pinů pro periferie, viz rkPinsConfig.
Definition: robotka.h:136
bool wifi_default_ap
Vytvářet WiFi síť místo toho, aby se připojovalo k wifi_name. Výchozí: false
Definition: robotka.h:102
uint8_t motor_id_right
Které M číslo motoru patří pravému, podle čísla na desce. Výchozí: 1
Definition: robotka.h:107
const char * wifi_name
Jméno WiFi sítě, na kterou se připojovat. Výchozí: ""
Definition: robotka.h:99
bool motor_enable_failsafe
Zastaví motory po 500ms, pokud není zavoláno rkSetMotorPower nebo rkSetMotorSpeed....
Definition: robotka.h:111
bool motor_polarity_switch_right
Prohození polarity pravého motoru. Výchozí: true
Definition: robotka.h:110
const char * owner
Jméno vlastníka robota. Podle tohoto jména filtruje RBController roboty. Výchozí: ""
Definition: robotka.h:96
uint32_t motor_max_ticks_per_second
Maximální rychlost motorů v ticích enkodéru za vteřinu. Výchozí: 2000
Definition: robotka.h:120
Nastavení čísel pinů různých periferií.
Definition: robotka.h:39