Download - Arduino naplno (Arduino Day 2015)
ARDUINO NAPLNOAdam Hořčica
Vojtěch Suk
Kdo jsme
Arduino * Wiring AVR * C
Adam Hořčica Vojtěch Suk
Co nás čeká?
HWSW
SW NAPLNO
Arduino IDE
• Aktuálně 1.6.1 (březen 2015)
– Novinky v 1.6.0
• Rychlejší kompilace, autodetekce COM portu, čísla řádků, CLI, podpora pro více HW platforem, …
– Detekce „neautorizovaných desek“
• Ano je to „IDE“, ale…
– Editor
Externí editor
Organizace Sketch
• Organizace na disku
• [dir] sketch
–sketch.ino
–settings.ino
–utils.ini
Stejné jméno
#line 1 "sketch.ino„#include "Arduino.h" void setup();void loop();void led_setup();void led_on();void led_off();#line 1 void setup() {
led_setup();}void loop() {
led_on();delay(1000);led_off();delay(1000);
}#line 1 "settings.ino" const int LED = 13;#line 1 "utils.ino" void led_setup() {
pinMode(LED, OUTPUT);}void led_on() {
digitalWrite(LED, HIGH);}void led_off() {
digitalWrite(LED, LOW);}
Organizace Sketch – co dál
• Preprocessing není spolehlivý
– Pouze deklarace funkce
• Skatch nemusí obsahovat jen *.ino
– Používejte klasické *.cpp/*.h soubory
Arduino IDE CLI
arduino [FILE.ino…]
arduino [--verify|--upload] [--board package:arch:board[:parameters]]
[--port portname] [--pref name=value] [-v|--verbose] [FILE.ino]
Např.:arduino --upload /path/to/sketch/sketch.ino
Alternativně:
make
https://github.com/arduino/Arduino/blob/master/build/shared/manpage.adoc
Jiné IDE
• Eclipse
– Pro arduino (http://www.baeyens.it/eclipse/index.html)
• AVR Studio
– Atmel procesory
– Postavené nad VS
• Visual Pro Micro
– Pro VS a AVR Studio
CodeBender
https://codebender.cc/
PROGRAMOVÁNÍ
Wiring
Mnoho textu „škodí“
• Při spuštění se data programu (proměnné) kopírují do RAM
• Včetně “všeho textu”
Mnoho textu „škodí“
• Rešení: funkce F(…)
Serial.println(F(“Lorem ipsum”));
Delay
void loop() {
digitalWrite(13, HIGH);delay(1000);digitalWrite(13, LOW);delay(1000);
}
int ledState = LOW;
unsigned long last = 0;
void loop()
{
unsigned long now = millis();
if(now - last >= 1000) {
last = now;
if (ledState == LOW) ledState = HIGH;
else ledState = LOW;
digitalWrite(13, ledState);
}
… něco užitečného …
}
Kooperativní multitasking
LED
• Je čas rozsvítit?
• Ano/Ne
Tlač.
• Zmáčknuto tlačítko?
• Ano/Ne
Serial
• Data z PC?
• Ano/ne
Stavový automat
• Rozdělit chování aplikace/části aplikace do stavů
• Knihovna FiniteStateMachine (Wiring)
„Chytrý“ blikač
Off
Blinking
Lerning
Lerning Done
DEMO TIME
„Debuger“
• Výpis na Serial.println(myVariable);
#ifdef DEBUG#define TRACE(x) Serial.println(x); #else#define TRACE(x) #endif
Visual Pro Micro
• Rozšíření pro Visual Studio
– Funguje i v Community edition
– Placené
– Na forum se řeší port do Eclipse
• Umí „debugger“ bez externího HW
– Překlad + instrumentace
Skutečný debugger
• debugWire, JTAG
• ATmega328P Xplained Mini
• AVR Studio, GDB
Jak zrychlit?
• Arduino.h je univerzální…
• …ale pomalé
• Např. digitalWrite…
1) digitalWrite
#define output 2
void setup () {pinMode(output, OUTPUT);
}
void loop() {digitalWrite(output, HIGH);digitalWrite(output, LOW);
}
2) PORTD
2) PORTD
#define output 2
void setup () {pinMode(output, OUTPUT);
}
void loop() {while (1) {PORTD = (1<<PD2);PORTD = 0;
} }
HW NAPLNO
Vlastní shiled
• Rozšíření klasických Arduin (Uno, Mega, …)
• Výroba DPS
– CAD SW (Fritzing, Eagle, …)
– Knihovna pro shiledhttps://github.com/adafruit/Adafruit-Eagle-Library
Vlastní Arduino klon
• Minimální Arduino
– ATmega
– Napájení
– Reset
– Připojení k PC
– ISP
Co dál
„Pokud potřebujete asembler, použili jste málo výkonný procesor“ …
Kam dál?
while (audience.questionAvailable()) {
answer();
}
Serial.println(F(“ Děkujeme za pozornost”));