Robotka
Knihovna pro obsluhu Robotky.
Načítám...
Vyhledávám...
Nebylo nic nalezeno
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 "SmartServoBus.hpp"
21
22#include "RBCX.h"
23#include "gridui.h"
24#include "rbprotocol.h"
25
26using namespace gridui;
27
43 : line_cs(5)
44 , line_mosi(23)
45 , line_miso(19)
46 , line_sck(18)
47 , smartled_sig(12)
48 , ir_adc_chan_left(ADC1_CHANNEL_0)
49 , ir_adc_chan_right(ADC1_CHANNEL_3) {
50 }
51
52 uint8_t line_cs;
53 uint8_t line_mosi;
54 uint8_t line_miso;
55 uint8_t line_sck;
56
57 uint8_t smartled_sig;
58
59 adc1_channel_t ir_adc_chan_left;
60 adc1_channel_t ir_adc_chan_right;
61};
62
63#define RK_DEFAULT_WIFI_AP_PASSWORD "flusflus"
64
72struct rkConfig {
73 rkConfig()
77 , owner("Nenastaven")
78 , name("Nenastaveno")
79 , wifi_name("")
80 , wifi_password("")
81 , wifi_default_ap(false)
84 , motor_id_left(1)
93 , stupid_servo_min(-1.65f)
94 , stupid_servo_max(1.65f)
95 , smart_leds_count(8) {
96 }
97
111
112 const char* owner;
113 const char* name;
114
115 const char* wifi_name;
116 const char* wifi_password;
117
119 const char* wifi_ap_password;
121
129
139
148
151
153
155};
156
163void rkSetup(const rkConfig& cfg = rkConfig());
164
179void rkMotorsSetPower(int8_t left, int8_t right);
180
186void rkMotorsSetPowerLeft(int8_t power);
187
193void rkMotorsSetPowerRight(int8_t power);
194
201void rkMotorsSetPowerById(uint8_t id, int8_t power);
202
209void rkMotorsSetSpeed(int8_t left, int8_t right);
210
216void rkMotorsSetSpeedLeft(int8_t speed);
217
223void rkMotorsSetSpeedRight(int8_t speed);
224
231void rkMotorsSetSpeedById(uint8_t id, int8_t speed);
232
242void rkMotorsDrive(float mmLeft, float mmRight, uint8_t speed);
243
252void rkMotorsDriveLeft(float mm, uint8_t speed);
253
262void rkMotorsDriveRight(float mm, uint8_t speed);
263
273void rkMotorsDriveById(uint8_t id, float mm, uint8_t speed);
274
292void rkMotorsDriveAsync(float mmLeft, float mmRight, uint8_t speed, std::function<void()> callback = nullptr);
293
310void rkMotorsDriveLeftAsync(float mm, uint8_t speed, std::function<void()> callback = nullptr);
311
328void rkMotorsDriveRightAsync(float mm, uint8_t speed, std::function<void()> callback = nullptr);
329
347void rkMotorsDriveByIdAsync(uint8_t id, float mm, uint8_t speed, std::function<void()> callback = nullptr);
348
355float rkMotorsGetPositionLeft(bool fetch = false);
356
363float rkMotorsGetPositionRight(bool fetch = false);
364
372float rkMotorsGetPositionById(uint8_t id, bool fetch = false);
373
379void rkMotorsSetPositionLeft(float positionMm = 0.f);
380
386void rkMotorsSetPositionRight(float positionMm = 0.f);
387
394void rkMotorsSetPositionById(uint8_t id, float positionMm = 0.f);
395
406void rkMotorsJoystick(int32_t x, int32_t y);
407
421uint32_t rkBatteryPercent();
422
428uint32_t rkBatteryVoltageMv();
429
435int16_t rkTemperature();
436
456void rkControllerSendLog(const char* format, ...);
457void rkControllerSendLog(const std::string& text);
458
459void rkControllerSend(const char* cmd, rbjson::Object* data = nullptr);
460void rkControllerSendMustArrive(const char* cmd, rbjson::Object* data = nullptr);
461
474void rkLedRed(bool on = true);
479void rkLedYellow(bool on = true);
484void rkLedGreen(bool on = true);
489void rkLedBlue(bool on = true);
490
495void rkLedAll(bool on = true);
496
501void rkLedById(uint8_t id, bool on = true);
502
515 BTN_DOWN = rb::ButtonId::Down,
516 BTN_UP = rb::ButtonId::Up,
517 BTN_LEFT = rb::ButtonId::Left,
518 BTN_RIGHT = rb::ButtonId::Right,
519 BTN_ON = rb::ButtonId::On,
520 BTN_OFF = rb::ButtonId::Off,
521};
522
523#define EXTRA_BUTTON1 27
524#define EXTRA_BUTTON2 14
525
533bool rkButtonIsPressed(rkButtonId id, bool waitForRelease = false);
534
560void rkButtonOnChangeAsync(std::function<bool(rkButtonId, bool)> callback = nullptr);
561
568inline bool rkButtonDown(bool waitForRelease = false) {
569 return rkButtonIsPressed(BTN_DOWN, waitForRelease);
570}
571
578inline bool rkButtonUp(bool waitForRelease = false) {
579 return rkButtonIsPressed(BTN_UP, waitForRelease);
580}
581
588inline bool rkButtonLeft(bool waitForRelease = false) {
589 return rkButtonIsPressed(BTN_LEFT, waitForRelease);
590}
591
598inline bool rkButtonRight(bool waitForRelease = false) {
599 return rkButtonIsPressed(BTN_RIGHT, waitForRelease);
600}
601
608inline bool rkButtonOn(bool waitForRelease = false) {
609 return rkButtonIsPressed(BTN_ON, waitForRelease);
610}
611
618inline bool rkButtonOff(bool waitForRelease = false) {
619 return rkButtonIsPressed(BTN_OFF, waitForRelease);
620}
621
630
657void rkLineCalibrate(float motor_time_coef = 1.0);
658
665
672uint16_t rkLineGetSensor(uint8_t sensorId);
673
684float rkLineGetPosition(bool white_line = false, uint8_t line_threshold_pct = 25);
685
699uint16_t rkIrLeft();
700
705uint16_t rkIrRight();
706
724uint32_t rkUltraMeasure(uint8_t id);
725
750void rkUltraMeasureAsync(uint8_t id, std::function<bool(uint32_t)> callback);
751
766void rkBuzzerSet(bool on);
767
787void rkSmartLedsRGB(uint16_t idx, uint8_t r, uint8_t g, uint8_t b);
788
799void rkSmartLedsHSV(uint16_t idx, uint8_t h, uint8_t s, uint8_t v);
800
806void rkSmartLedsHEX(uint16_t idx, uint32_t hexCode);
807SmartLed& rkSmartLedsGetController();
808
823void rkServosSetPosition(uint8_t id, float angleDegrees);
824
831float rkServosGetPosition(uint8_t id);
832
840void rkServosDisable(uint8_t id);
841
863lx16a::SmartServoBus& rkSmartServoBus(uint8_t servo_count);
864
867#endif // LIBRB_H
int16_t rkTemperature()
Teplota desky v Robotce.
Definition: robotka.cpp:68
uint32_t rkBatteryPercent()
Úroveň baterie v procentech.
Definition: robotka.cpp:60
uint32_t rkBatteryVoltageMv()
Úroveň baterie v mV.
Definition: robotka.cpp:64
void rkButtonOnChangeAsync(std::function< bool(rkButtonId, bool)> callback=nullptr)
Asynchroní zpracování události o stisku tlačítka.
Definition: robotka.cpp:271
bool rkButtonIsPressed(rkButtonId id, bool waitForRelease=false)
Je teď stisknuto tlačítko?
Definition: robotka.cpp:256
void rkButtonWaitForRelease(rkButtonId id)
Počkat, dokud není tlačítko uvolněno.
Definition: robotka.cpp:277
bool rkButtonDown(bool waitForRelease=false)
Je teď stisknuto "dolů"?
Definition: robotka.h:568
bool rkButtonOn(bool waitForRelease=false)
Je teď stisknuto "ON"?
Definition: robotka.h:608
rkButtonId
Seznam konstant označujícíh tlačítka, pro použítí v rkButtonIsPressed a dalších.
Definition: robotka.h:514
bool rkButtonUp(bool waitForRelease=false)
Je teď stisknuto "nahoru"?
Definition: robotka.h:578
bool rkButtonLeft(bool waitForRelease=false)
Je teď stisknuto "doleva"?
Definition: robotka.h:588
bool rkButtonOff(bool waitForRelease=false)
Je teď stisknuto "OFF"?
Definition: robotka.h:618
bool rkButtonRight(bool waitForRelease=false)
Je teď stisknuto "doprava"?
Definition: robotka.h:598
@ BTN_RIGHT
Tlačítko doprava.
Definition: robotka.h:518
@ BTN_LEFT
Tlačítko doleva.
Definition: robotka.h:517
@ BTN_ON
Tlačítko ON/Ok (prostřední)
Definition: robotka.h:519
@ BTN_UP
Tlačítko nahoru.
Definition: robotka.h:516
@ BTN_OFF
Tlačítko Off/Esc.
Definition: robotka.h:520
@ BTN_DOWN
Tlačítko dolů
Definition: robotka.h:515
void rkBuzzerSet(bool on)
Zapnout/vypnout bzučák.
Definition: robotka.cpp:382
#define RK_DEFAULT_WIFI_AP_PASSWORD
Výchozí heslo pro WiFi AP.
Definition: robotka.h:63
void rkSetup(const rkConfig &cfg=rkConfig())
Inicializační funkce Robotky.
Definition: robotka.cpp:20
uint16_t rkIrLeft()
Hodnota z levého IR senzoru.
Definition: robotka.cpp:348
uint16_t rkIrRight()
Hodnota z pravého IR senzoru.
Definition: robotka.cpp:352
void rkLedAll(bool on=true)
Zapnout/vypnout všechny LED zaráz.
Definition: robotka.cpp:235
void rkLedRed(bool on=true)
Zapnout/vypnout červenou LED.
Definition: robotka.cpp:219
void rkLedBlue(bool on=true)
Zapnout/vypnout modrou LED.
Definition: robotka.cpp:231
void rkLedGreen(bool on=true)
Zapnout/vypnout zelenou LED.
Definition: robotka.cpp:227
void rkLedYellow(bool on=true)
Zapnout/vypnout žlutou LED.
Definition: robotka.cpp:223
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:243
uint16_t rkLineGetSensor(uint8_t sensorId)
Hodnota z jednoho senzoru na čáru.
Definition: robotka.cpp:340
void rkLineClearCalibration()
Vymazat kalibraci.
Definition: robotka.cpp:330
void rkLineCalibrate(float motor_time_coef=1.0)
Kalibrovat senzorickou lištu.
Definition: robotka.cpp:292
float rkLineGetPosition(bool white_line=false, uint8_t line_threshold_pct=25)
Pozice čáry pod senzorickou lištou.
Definition: robotka.cpp:344
void rkMotorsDrive(float mmLeft, float mmRight, uint8_t speed)
Popojetí oběma motory o vzdálenost v mm (blokující).
Definition: robotka.cpp:114
void rkMotorsJoystick(int32_t x, int32_t y)
Nastavení rychlosti motorů podle joysticku.
Definition: robotka.cpp:215
float rkMotorsGetPositionById(uint8_t id, bool fetch=false)
Vrátí absolutní najetou vzálenost na motoru podle ID.
Definition: robotka.cpp:177
float rkMotorsGetPositionRight(bool fetch=false)
Vrátí absolutní najetou vzálenost na pravém motoru v mm.
Definition: robotka.cpp:173
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:152
float rkMotorsGetPositionLeft(bool fetch=false)
Vrátí absolutní najetou vzálenost na levém motoru v mm.
Definition: robotka.cpp:169
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:205
void rkMotorsSetPowerLeft(int8_t power)
Nastavení výkonu levého motoru.
Definition: robotka.cpp:76
void rkMotorsSetPowerRight(int8_t power)
Nastavení výkonu pravého motoru.
Definition: robotka.cpp:80
void rkMotorsSetSpeedRight(int8_t speed)
Nastavení rychlosti pravého motoru.
Definition: robotka.cpp:101
void rkMotorsDriveRight(float mm, uint8_t speed)
Popojetí pravým motorem o vzdálenost v mm (blokující).
Definition: robotka.cpp:128
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:148
void rkMotorsSetPositionLeft(float positionMm=0.f)
Nastaví absolutní počítadlo vzdálenosti na levém motoru na hodnotu v mm.
Definition: robotka.cpp:197
void rkMotorsSetSpeedById(uint8_t id, int8_t speed)
Nastavení rychlosti motoru podle jeho čísla (M1...M4) na desce.
Definition: robotka.cpp:105
void rkMotorsSetPositionRight(float positionMm=0.f)
Nastaví absolutní počítadlo vzdálenosti na pravém motoru na hodnotu v mm.
Definition: robotka.cpp:201
void rkMotorsSetPower(int8_t left, int8_t right)
Nastavení výkonu motorů.
Definition: robotka.cpp:72
void rkMotorsSetSpeed(int8_t left, int8_t right)
Nastavení rychlosti motorů.
Definition: robotka.cpp:93
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:160
void rkMotorsDriveById(uint8_t id, float mm, uint8_t speed)
Popojetí motorem podle ID o vzdálenost v mm (blokující).
Definition: robotka.cpp:132
void rkMotorsDriveLeft(float mm, uint8_t speed)
Popojetí levým motorem o vzdálenost v mm (blokující).
Definition: robotka.cpp:124
void rkMotorsSetPowerById(uint8_t id, int8_t power)
Nastavení výkonu motoru podle jeho čísla (M1...M4) na desce.
Definition: robotka.cpp:84
void rkMotorsSetSpeedLeft(int8_t speed)
Nastavení rychlosti levého motoru.
Definition: robotka.cpp:97
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:156
void rkControllerSendLog(const char *format,...)
Odeslat text do aplikace.
Definition: robotka.cpp:24
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:395
void rkSmartLedsHEX(uint16_t idx, uint32_t hexCode)
Nastavit barvu chytré led podle RGB HEX kódu.
Definition: robotka.cpp:404
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:386
lx16a::SmartServoBus & rkSmartServoBus(uint8_t servo_count)
Vrátí instanci SmartServoBus pro ovládání chytrých serv.
Definition: robotka.cpp:444
void rkServosSetPosition(uint8_t id, float angleDegrees)
Nastaví pozici hloupého serva na zadaný úhel.
Definition: robotka.cpp:417
void rkServosDisable(uint8_t id)
Vypne hloupé servo.
Definition: robotka.cpp:435
float rkServosGetPosition(uint8_t id)
Vrátí naposledy nastavenou pozici hloupého serva.
Definition: robotka.cpp:426
uint32_t rkUltraMeasure(uint8_t id)
Změřit vzálenost (blokující)
Definition: robotka.cpp:356
void rkUltraMeasureAsync(uint8_t id, std::function< bool(uint32_t)> callback)
Změřit vzálenost (asynchroní)
Definition: robotka.cpp:368
Nastavení SW pro Robotky.
Definition: robotka.h:72
const char * wifi_password
Heslo k WiFi, na kterou se připojit. Výchozí: ""
Definition: robotka.h:116
float stupid_servo_max
Horní hranice signálu pro hloupá serva, která se rovná 90 stupňům. Výchozí: 1.65
Definition: robotka.h:150
uint8_t motor_id_left
Které M číslo motoru patří levému, podle čísla na desce. Výchozí: 2
Definition: robotka.h:122
bool rbcontroller_app_enable
povolit komunikaci s aplikací RBController. Výchozí: false
Definition: robotka.h:98
uint8_t motor_max_power_pct
Limit výkonu motoru v procentech od 0 do 100. Ovlivňuje všechny režimy motorů. Výchozí: 60
Definition: robotka.h:124
uint16_t smart_leds_count
Nastavení počtu připojených chytrých LED. Výchozí: 8.
Definition: robotka.h:152
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:128
const char * name
Jméno robota. Výchozí: "".
Definition: robotka.h:113
bool rbcontroller_enable_webocket
Definition: robotka.h:104
const char * wifi_ap_password
Heslo k vytvořené síti. Výchozí: "flusflus"
Definition: robotka.h:119
uint32_t motor_max_acceleration
Maximální zrychlení motorů v ticích enkodéru za vteřinu. Výchozí: 50000
Definition: robotka.h:147
uint8_t wifi_ap_channel
Kanál WiFi vytvořené sítě. Výchozí: 1
Definition: robotka.h:120
bool motor_polarity_switch_left
Prohození polarity levého motoru. Výchozí: false
Definition: robotka.h:125
float stupid_servo_min
Spodní hranice signálu pro hloupá serva, která se robvná -90 stupňům. Výchozí: -1....
Definition: robotka.h:149
rkPinsConfig pins
Konfigurace pinů pro periferie, viz rkPinsConfig.
Definition: robotka.h:154
bool rbcontroller_enable_udp
Definition: robotka.h:110
bool wifi_default_ap
Vytvářet WiFi síť místo toho, aby se připojovalo k wifi_name. Výchozí: false
Definition: robotka.h:118
uint8_t motor_id_right
Které M číslo motoru patří pravému, podle čísla na desce. Výchozí: 1
Definition: robotka.h:123
const char * wifi_name
Jméno WiFi sítě, na kterou se připojovat. Výchozí: ""
Definition: robotka.h:115
bool motor_enable_failsafe
Zastaví motory po 500ms, pokud není zavoláno rkSetMotorPower nebo rkSetMotorSpeed....
Definition: robotka.h:127
bool motor_polarity_switch_right
Prohození polarity pravého motoru. Výchozí: true
Definition: robotka.h:126
const char * owner
Jméno vlastníka robota. Podle tohoto jména filtruje RBController roboty. Výchozí: ""
Definition: robotka.h:112
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:138
Nastavení čísel pinů různých periferií.
Definition: robotka.h:41