### Ako zvládnuť webinár * pomenuj svojho avatara * napr. dvojkliknutím na svoje meno vpravo hore * nevysielaj obraz, pokiaľ nemusíš * ušetríš linku ostatným ;) * vypni mikrofón, keď nehovoríš * ušetríš linku ostatným ;) * minimalizuješ vzruchy * pýtaj sa, ak máš nejasnosti * stlač medzerník a drž ho, kým rozprávaš (ako na vysielačke) alebo použi chat
## Čo všetko som sa pri programovaní Arduina naučil zle mirek@cnl.sk / [**Namakaný deň - Webináre**](http://www.namakanyden.sk/webinare/)
## Oznamy * Raspberry Pi 4 8GB * Raspberry Pi OS * https://fred.sensetecnic.com * témy nabudúce: * Node-RED a práca s databázou (SQLite) * Low-Power * 3D tlač (Michal Sedláček) * Testovanie (Milan Varga)
## Zoznamka * som učiteľ ([KPI FEI TUKE](https://kpi.fei.tuke.sk/)) * predmet [Programovanie](http://it4kt.cnl.sk/c/pvjc) (v jazyku _C_) * _5._ sezóna s _Arduino_-m * posledné 3-4 týždne semestra * záverečné zadanie [Logic/Mastermind](http://it4kt.cnl.sk/c/pvjc/2018/problemset.05.mastermind.html) * automatizované testovanie zadaní * experimentujeme aj s _Arduinom_
## _"Prečo neznášam Arduino?"_ * pôvodný pracovný názov tohto príspevku :-) * môj učiteľský pohľad zhrnutý v niekoľkých dôvodoch... * ...pretože vás núti osvojiť si zlé návyky
![the Arduino Guy](images/pavol.hudacko.jpg) * Paľo - _the Arduino Guy_ ;)
## 1. Nejednotnosť v pomenovávaní
* `BUILTIN_LED` should be `LED_BUILTIN` [#1555](https://github.com/esp8266/Arduino/issues/1555) * rok _2016_ * ```cpp #define LED_BUILTIN 13 ``` * ```cpp // examples/02.Digital/Button/Button.ino // examples/06.Sensors/Knock/Knock.ino const int ledPin = 13; ``` * ```cpp // examples/03.Analog/AnalogInput/AnalogInput.ino int ledPin = 13; ```
[![Beginning C for Arduino](images/beginning.c.for.arduino.jpeg)](https://www.amazon.com/Beginning-Arduino-Second-Learn-Programming/dp/1484209419/ref=sr_1_2?ie=UTF8&qid=1530436970&sr=8-2&keywords=beginning+c+for+arduino)
[![Arduino Používateľská príručka](images/arduino.pouzivatelska.prirucka.jpg)](https://www.martinus.sk/?uItem=249563)
## PC Revue: Seriál Arduino [![Seriál Arduino](images/serial.arduino.png)](https://www.pcrevue.sk/a/ARDUINO-3)
## 2. Obchádzanie modulárneho prístupu
## 3. Vynútené používanie globálnych premenných
![Global Variables Are Bad](images/global.variables.are.bad.mkay.jpeg)
## Pôvod problému * inšpirácia z prostredia/jazyka [Processing](https://processing.org/) ```cpp void setup(){ // initialization function // runs once } void loop(){ // main loop // runs continuously } ```
## Skrytý (?!) ```main()``` ``` $ cd ARDUINO_HOME/ $ find . -name "main.cpp" ARDUINO_HOME/hardware/arduino/avr/cores/arduino/main.cpp ``` ``` int main(){ // runs once setup(); // runs continuosly for (;;) { loop(); } } ```
## 2 riešenia
## 1. Include Guard ```cpp // ARDUINO_HOME/hardware/arduino/avr/cores/arduino/main.cpp #ifndef _ADVANCED int main(){ // runs once setup(); // runs continuosly for (;;) { loop(); } } #endif ```
## `project.ino` ```cpp #define _ADVANCED int main(){ // setup Serial.begin(9600); pinMode(LED_BUILTIN, OUTPUT); // loop for(;;){ digitalWrite(LED_BUILTIN, HIGH); delay(1000); digitalWrite(LED_BUILTIN, LOW); delay(1000); } } ```
## 2. Atribút `weak` ```cpp // ARDUINO_HOME/hardware/arduino/avr/cores/arduino/main.cpp int main() __attribute((weak))__; int main(){ // runs once setup(); // runs continuosly for (;;) { loop(); } } #endif ```
## Blink NG ``` int main(){ init(); // setup pinMode(LED_BUILTIN, OUTPUT); // loop for(;;){ digitalWrite(LED_BUILTIN, HIGH); delay(1000); digitalWrite(LED_BUILTIN, LOW); delay(1000); } } ```
## 4. Stavový stroj bez stavového stroja
![GTA](images/gta.jpg)
## [Garage Gate Opener Using Arduino](https://www.instructables.com/id/Garage-Gate-Opener-Using-Arduino/)
``` if((digitalRead(up_button)==HIGH) &&(digitalRead(upper_sensor)==LOW) &&(digitalRead(stop_button)==LOW) &&(digitalRead(down_button)==LOW) &&(digitalRead(down_sensor)==LOW)) { n=1; } else ```
## Stavový diagram
## A iné... * spotreba energie * práca s prerušeniami
> "Tak to robia všetci!"
## Otázky?
![qr code](https://api.qrserver.com/v1/create-qr-code/?data=https://bit.ly/2XTcjCc&size=300x300) (**https://bit.ly/2XTcjCc**)