NUCLEO-F446RE
a pojmenujte jej prg-nucleo
.main.cpp
vložte jednoduchý program pro periodické blikání LED.
#include "mbed.h" DigitalOut myled (LED1); // "Handle" to the LED. int main() { while (1) { myled = !myled; // Flip the state of the LED. ThisThread::sleep_for(1s); // Efficient MCU sleep. } }
Build project
. (První kompilace může trvat dlouho.)
struct
, který má, kromě datových položek, také metody. Například objekt mybutton
může mít metodu fall()
, která určí ukazatel na “cizí” funkci, která bude zavolána při detekci změny úrovně napětí, což odpovídá stisknutí tlačítka. Tedy např., mybutton.fall(&on_button_fall)
.
V rámci PRG se C++ věnují přednášky 10 až 13.
#include "mbed.h" DigitalOut myled(LED1); DigitalIn mybutton(BUTTON1); int main() { while (1) { if (mybutton == 0) { myled = 1; } else { myled = 0; } } }
myled
je datového typu DigitalOut
.
Terminologií C++ se jedná o instanci třídy DigitalOut
.
Instance třídy je spjata se sadou funkcí, které s ní umí pracovat - tzv. metodami.
Metoda může být tzv. konstruktor, který instanci inicializuje.
(Ve smyslu jako když inicializujeme proměnnou typu int
.)
Konstruktor může přijímat parametry, jako jakákoliv jiná funkce.
V našem případě předáváme “název pinu”, který chceme ovládat.
(Představte si, že výsledná instance je jakýsi ovladač/driver/API, který umí pracovat s LED diodou.)
To, že můžeme “do proměnné přiřadit”, je pouze syntax zucker, který ve skutečnosti volá metodu write
.
Více vizte např. https://en.cppreference.com/w/cpp/language/class.
Metoda write
implementuje samotný mechanismus, který způsobí, že se na pinu objeví vysoká úroveň napětí.
Vizte např. B3B38LPE1, B4M38AVS, B0B35APO.
Timeout
.
uint32_t
.
uint32_t
) může kódovat až 32 různých booleovských hodnot.
x
bit = (number >> x) & 1;
bit = (number) & (x << 1);
x
na 1
number |= 1 << x;
x
na 0
number &= ~(1 << x);
number ^= 1 << x;
x
podle hodnoty proměnné v
number = (number & ~(1U << x)) | (v << x);