Lektorált tananyag, ami a BKF Digitális és Kollaboratív Művészet (DIKOM) pályázatnak keretén belül valósult meg.
Szerző: Harsányi Réka, Társszerző: Juhász Márton András, Lektor: Fernezelyi Márton
A Firmata egy kommunikációs protokoll, aminek célja a számítógépes környezetekkel való adatcsere megkönnyítése.
Sok olyan gyors prototipizálásra alkalmas környezet létezik, amelyiken a firmata protokoll használata már megoldott. Ilyenek például a VVVV, Max/MSP, Processing és Flash. Létezik olyan firmata alapú program (firmware), ami az Arduino minden funkcióját elérhetővé teszi soros parancsokon keresztül, az analóg olvasástól a digitális csatornák kapcsolgatásáig, és ezeket saját számítógépen futó fejlesztőkörnyezetünkből el is tudjuk érni. A könyvtár használatával anélkül hozhatunk létre célfeladatokra kétirányú soros kommunikációs programot, hogy saját protokollt (pl. handshaking) vagy objektumokat fejlesztenénk.
Metódusai:
begin()
Elindítja a könyvtárat.
begin(long)
Elindítja a könyvtárat és felülírja az előzőleg beállított adatátviteli sebességet arra, amit megadunk.
printVersion()
Elküldi a protokoll verziószámát a számítógépnek.
blinkVersion()
Elvillogja a protokoll verziószámát a 13-as csatornára kötött LED-en keresztül.
printFirmwareVersion()
Elküldi a firmware nevét és verziószámát a számítógépnek.
setFirmwareVersion(byte major, byte minor)
Beállíthatjuk a firmware nevét és verziószámát. A firmware neve a programunk nevével fog megegyezni a (.pde) kiterjesztés nélkül.
Üzenetek küldése:
sendAnalog(byte pin, int value)
Elküldi az analóg bemenet csatornájának számát és értékét.
sendDigitalPorts(byte pin, byte firstPort, byte secondPort)
Elküldi a két digitális port állapotát különálló bájtokként.
sendDigitalPortPair(byte pin, int value)
Elküldi a két digitális port állapotát egy integer változóként.
sendSysex(byte command, byte bytec, byte* bytev)
Önkényesen választott bájtok tömbjeként küld parancsot.
sendString(const char* string)
Stringet küld a számítógépnek.
sendString(byte command, const char* string)
Parancsként is definiálhatunk stringet, amit elküld.
Üzenetek fogadása:
available()
Leellenőrzi, hogy van-e bejövő adat a tárolóban.
processInput()
Feldolgozza a tárolóban található bejövő üzeneteket és – ha vannak – átvezeti őket a megfelelő visszahívási funkciókhoz.
attach(byte command, callbackFunction myFunction)
Funkciót köt bizonyos típusú bejövő üzenetekhez.
detach(byte command)
Törli az üzenet típusához kapcsolt funkciót.
Visszahívási funkciók:
Ahhoz, hogy egy üzenettípushoz funkciót tudjunk társítani, annak valamelyik szabvány visszahívási funkcióval egyeznie kell. Három különböző visszahívási funkció létezik:
generic
void callbackFunction(byte pin, int value);
Általános visszahívási funkció, pl. csatornák állapotának lekérdezésére.
system_reset
void systemResetCallbackFunction(void);
Visszaállítja a firmware-t az alapállapotba.
string
void stringCallbackFunction(char *myString);
Karakterláncok visszaadásához.
sysex
void sysexCallbackFunction(byte pin, byte byteCount, byte *arrayPointer);
pl. MIDI vezérlőjelek visszaadásához.
Üzenettípusok:
ANALOG_MESSAGE
Egy analóg bemenethez tartozó aktuális érték.
DIGITAL_MESSAGE
Egy digitális port 8 bitjének értéke.
REPORT_ANALOG
Ki-/bekapcsolja az analóg üzeneteket.
REPORT_DIGITAL
Ki-/bekapcsolja a digitális üzeneteket.
SET_PIN_MODE
Beállít egy csatornát: INPUT/OUTPUT/PWM.
FIRMATA_STRING
stringCallbackFunction-nel társítható string alapú üzenettípus.
SYSEX_START
Általános, változó hosszúságú üzenetek (pl. MIDI SysEx protokoll)sysexCallbackFunction-nel társítható üzenettípus.
SYSTEM_RESET
Visszaállítja a firmware-t az alapállapotába, systemResetCallbackFunction-nel társítható üzenettípus.
Előre elkészített firmata alapú firmware-ek
Miután firmatára támaszkodó, előre elkészített firmware-ből többféle is létezik a programcsomagban, nézzük inkább ezek gyakorlati hasznát!
AllInputsFirmata
Az összes analóg és digitális bemenet aktuális állapotát a lehető leggyorsabban továbbítja a számítógépnek. Létrehozását az Arduino2Max program inspirálta.
AnalogFirmata
A lehető legtöbb analóg portot hasznosítja, beleértve az összes analóg bemenetet, 3, 5, 6, 9, 10, 11 PWM kimeneteket, melyek közül a 9 és 10 szervo meghajtóként is használható.
ServoFirmata
Az összes digitális csatornát szervo meghajtóként érhetjük el.
I2CFirmata
I2C protokollt használó eszközökkel kommunikálhatunk az Arduinon, mint átalakítón keresztül.
StandardFirmata
Minden felsorolt funkciót támogat, elérhetjük a digitális és analóg ki-/bemeneteket, I2C kommunikációt, használhatunk digitális csatornákat szervo meghajtónak.
StandardFirmata használata Processingből
Processing kód: 59processingfirmata
Arduino.cc library letöltése:
http://playground.arduino.cc/Interfacing/Processing
StandardFirmata használata Max/MSP-vel
- - - - - - - - - -
forrás: http://arduino.cc/en/Tutorial/HomePage