Arduino naplno (Arduino Day 2015)

Preview:

Citation preview

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”));

Recommended