Az Arduino lapkák többféle kiszerelésben és formában léteznek és közös bennük, hogy nyílt forráskóddal és hatalmas amatőr fejlesztői bázissal rendelkeznek. Én az egyik legismertebbet fogom használni az Arduino Duemilanove-ot.
Ennek a lapnak 14 digitális és 6 analóg csatlakozási pontja van, amik programozással állíthatóak. Nem kell megijedni mivel igen egyszerű c/c++ alapú pár utasításos nyelve van. A lapka USB-vel csatlakozik a számítógépünkhöz, azon keresztül programozható, és a program a lecsatlakozás után is rajta marad. A csatlakozási pontok (PIN-ek) állapotát programkóddal változtathatjuk, a legegyszerűbb esetben szabályozhatjuk, hogy folyjon-e rajtuk keresztül áram vagy ne.
Nézzünk egy egyszerű kódot amivel egy LED-et tudunk villogtatni.
int ledPin = 13; // LED 13 as PIN-re kötve
// a setup csak induláskor fut le
void setup() {
// A PIN-t kimeneti módra állítjuk:
pinMode(ledPin, OUTPUT);
}
// a loop addig fut amíg az Arduino áram alatt van
void loop()
{
digitalWrite(ledPin, HIGH); // adjunk áramot a LED-nek
delay(1000); // várjunk egy másodpercet
digitalWrite(ledPin, LOW); // kapcsoljuk le
delay(1000); // várjunk egy másodpercet
}
Részletek: Blink Tutorial
Vágjunk akkor bele a LED-ek villogtatásába. Flash és Arduino közötti kapcsolat egy proxy szerver beiktatásával fog történni. Arduino képes soros portra írni vagy onnan olvasni, ezeket az adatokat egy proxy szerver adja tovább amire Flash socket-en keresztül csatlakozik, és így tud kommunikálni az Arduino lappal. Én a TinkerProxy-t javaslom erre a célra, mivel ez speciálisan Flash-hez lett írva.
Az alábbi lépések szükségesek:
- 8 LED-et kötünk 8 kimenetre.
- Írunk egy programot ami a Flash-ből érkező szám alapján bekapcsolja a megfelelő LED-eket.
- Feltöltjük a programot a lapra.
- Írunk egy Flash zene lejátszót ami a SoundMixer.computeSpectrum segítségével figyeli a zene intenzitását
- Konfiguráljuk a TinkerProxy-t a megfelelő port-ra, majd indítsuk el.
- Csatlakozunk Flash-el socket-en keresztül
1. Lépés a LED-ek bekötése

A LED-ek mindegyike külön PIN-re van kötve amik egy ellenállás segítségével GND-re, vagyis a földre vannak csatlakoztatva. Tulajdonképpen csak annyiban különbözik a villogtatós bekötéstől, hogy több LED-et használunk, és beiktatnunk még egy ellenállást is. Ezt én így valósítottam meg:
2. Lépés az Arduino program
/**
* author: Reider
*/
#define LED_COUNT 8 // 8 ledünk van
int ledPins[] = { 2, 3, 4, 5, 6 , 7, 8, 9 }; // A led PIN-ek
void setup()
{
//konfiguráljuk a kommunikáció sebességét
Serial.begin(9600);
//a LED-ek csatlakozásait kimenetként álíltjuk be
for(int i=0; i<LED_COUNT; i++){
pinMode( ledPins[i] , OUTPUT );
}
//villogtatunk egyet hogy jelezzük a program elindult
blinkLeds();
}
void loop()
{
//figyeljük hogy jött e üzenet flash-től ami egy szám lesz
if (Serial.available() > 0) {
//amennyiben van üzenet beolvassuk hány ledet kell bekapcsolni
int value = Serial.read();
//beállítjuk a LED állapotokat
setLedStates( value );
}
}
//a setLedStates megadott számú ledet kapcsol be
void setLedStates(int num)
{
for(int i=0; i<LED_COUNT; i++){
if( i+1<=num ){
//amelyik led a kapott számban benne van felkapcsoljuk
digitalWrite( ledPins[i], HIGH );
}else{
//a többit le
digitalWrite( ledPins[i], LOW );
}
}
}
//a blinkLeds felvillantja a ledeket
void blinkLeds()
{
setLedStates( LED_COUNT );
delay(300);
setLedStates( 0 );
}
3. Lépés a program feltöltése
A feltöltéshez az Arduino weblapjáról ingyenesen letölthető programot használhatjuk ami Mac, Windows vagy akár Linux-on is használható.
A feltöltés előtt ki kel választanunk a lapunkat és a portot amire az Arduino csatlakoztatva van, ez Windows-on többnyire COM3.
4. Lépés a Flash lejátszó
const SERVER_ADDRESS:String = "localhost" //a cím ahova csatlakozunk
const PORT:int = 5333 //a szerver port száma
const SAMPLE_NUM:int = 5 //minták száma amit a program a hang lejátszásánál átlagol
var socket:Socket
var sound:Sound
var chanel:SoundChannel
var samplerTimer:Timer
init()
function init():void
{
// ez a timer fogja a megadott időközönként meghívni a mintavételező függvényt
samplerTimer = new Timer(20)
samplerTimer.addEventListener(TimerEvent.TIMER, onSamplerTimer)
//a gombokhoz adjuk a figyelőket
connectBtn.addEventListener(MouseEvent.CLICK, onConnectClick)
playBtn.addEventListener(MouseEvent.CLICK, onPlayClick)
//létrehozzuk a socket-et
setupSocket()
}
function setupSocket():void
{
socket = new Socket()
socket.addEventListener(Event.CONNECT,
function():void{
monitor.outputField.appendText( "connected succesfuly\n" )
}
);
socket.addEventListener(Event.CLOSE,
function():void{
monitor.outputField.appendText( "connection closed\n" )
}
);
}
/* ez a függvény írja a socketre a megkapott intenzitás adatokat amik majd
a proxy segítségével átadódnak az Arduino-nak */
function writeMonitorValue(value:int):void
{
trace( value )
if(!socket.connected) return
/*simán byte-ként írjuk ki a számokat, mivel nincs szükségünk nagy értékekre
és így kezelni is egyszerű őket */
socket.writeByte( value );
socket.flush()
}
// a drawBytes csak grafikon szerűen kirajzolja az intenzitásokat
function drawBytes(bytes:ByteArray):void
{
const PLOT_HEIGHT:int = 200;
const PLOT_WIDTH:int = 500;
const CHANNEL_LENGTH:int = 256;
const RATIO:Number = PLOT_WIDTH/CHANNEL_LENGTH
var g:Graphics = monitor.canvas.graphics;
g.clear();
g.lineStyle( 0, 0x59B9E1 );
g.beginFill( 0x59B9E1 );
g.moveTo( 0, PLOT_HEIGHT );
var n:Number = 0;
bytes.position = 0
for (var i:int = 0; i < CHANNEL_LENGTH; i++) {
n = Math.min(bytes.readFloat() * PLOT_HEIGHT, PLOT_HEIGHT);
g.lineTo(i * RATIO, PLOT_HEIGHT - n);
}
g.lineTo( PLOT_WIDTH, PLOT_HEIGHT );
g.endFill();
}
// a drawMonitorValue kirajzolja az Arduino-nak küldendő értékeket
function drawMonitorValue(value:int):void
{
const DRAW_HEIGHT:int = 200;
const DRAW_WIDTH:int = 80;
const RATIO:Number = DRAW_HEIGHT/8
var g:Graphics = levelDisplay.canvas.graphics
g.clear()
g.beginFill( 0x59B9E1 )
g.drawRect(0, DRAW_HEIGHT - (value*RATIO), DRAW_WIDTH, value*RATIO)
g.endFill()
}
function onConnectClick(event:Event):void
{
// csatlakozzunk a szerverhez
socket.connect(SERVER_ADDRESS, PORT);
}
function onPlayClick(event:Event):void
{
// játsszuk le a zenét
if(chanel) chanel.stop()
sound = new Sound()
sound.load( new URLRequest(musicField.text) )
chanel = sound.play()
samplerTimer.start()
monitor.outputField.appendText( "playing "+musicField.text+"\n" )
}
function onSamplerTimer(event:Event):void
{
// ByteArray-ként megkapjuk az intenzitás értékeket 0-1 -es skálán
var bytes:ByteArray = new ByteArray()
SoundMixer.computeSpectrum( bytes , true)
// a slider megadja hogy honnan vegyünk mintát
bytes.position = sampleSlider.value * 4
var sampleSum:Number = 0
for(var i:int=0; i<SAMPLE_NUM; i++){
sampleSum += bytes.readFloat()
}
/* mivel csak 0-1 ig kapunk értékeket és nekünk 8 LED-ünk van, ezért
szorzunk 8-al hogy a megfelelő adatokat kapjuk */
var monitorValue:int = Math.round( Math.min( (sampleSum/SAMPLE_NUM) * 8 , 8 ) )
// átküldjük socket-en az intenzitást
writeMonitorValue( monitorValue )
// kirajzoljuk az egész spektrumot
drawBytes( bytes )
// kirajzoljuk az átküldött értéket
drawMonitorValue( monitorValue )
}
A program működés közben:

5. Lépés TinkerProxy konfiguráció
A TinkerProxy egy egyszerű szerver program ami Arduino usb-n keresztül érkező adatait a rá csatlakozó klienseknek adja tovább. Én a leírásomhoz a TinkerProxy 2.0 -t használtam. Mint már említettem a program nagyon egyszerű, csak a futtatható fájlok és két konfigurációs fájlból áll, az egyik Windows a másik Mac környezethez. Nézzük milyen konfigurációs beállítások szükségesek Windows alatt.
# Amennyiben az XMLSocket osztályt használjuk mivel ott az új üzenetet a 0 érték jelzi # a program képes automatikusan konvertálni nekünk az alapból \n ként érkező sorvége karaktereket newlines_to_nils=false # A használt COM port Windows alatt ez többnyire a 3-as comm_ports=3 # Alap beállítások itt csak arra kell figyelnünk hogy a comm_baud # a programunkban Serial.begin részben megadott értékkel egyezzen comm_baud=9600 # COM3-hoz tartozó port amihez majd Flash-el csatlakozni fogunk net_port3=5333
A program futtatásához elég csak duplán kattintani az exe-re és már várja is a csatlakozó klienseket.
6. Lépés működtetés
Amennyiben az Arduino lapunk csatlakoztatva van a gépünkhöz és elindítottuk a proxit, Flash csatlakoztatása és a zene indítása után hasonlót kell látnunk:
Beszerzés
Az Arduino Duemilanove-ot Magyarországon a Kitchen Budapest árulja körülbelül 7500FT-ért de külföldről is beszerezhető:
Cool Components Anglia
SparkFun USA cheap zovirax tablets
És még további rengeteg helyen.
További Arduino és Flash tutorial
Video Tutorial:
Physical Computing with Arduino: Getting Started
Physical Computing with Arduino: Connecting to Adobe Flash
Physical Computing with Arduino: Photocells
Physical Computing with Arduino: Passive Infrared
Physical Computing with Arduino: Temperature and Humidity
Physical Computing with Arduino: Ultrasonic Range Finder
Physical Computing with Arduino: RGB LED
Physical Computing with Arduino: Accelerometers
Szöveges Tutorial:
Getting Started with Flash and Arduino
Flash and Arduino Communication
Flash / Arduino Tips, Tricks and Gotchas
Sending Multibyte Numbers from ActionScript to Arduino
Accelerate : Flash / Arduino Based Speed Detector
Wireless Light Sensor (Part 1 of 3)
Wireless Light Sensor (Part 2 of 3)
Wireless Light Sensor (Part 3 of 3)
Források: ArduinoFlashSoundMonitor.zip








akkor aszem kipróbálom én is

mondjuk én egy gyorsulásmérő adatait akarom bevinni… zsír kis joystick-ot készítve
ha elkészülök, majd megosztom veletek
@Genin
Nagyon gyorsan képes olvasni, a jel gyorsaság tulajdonképpen a socket sebességétől függ, de nem lehet látni semmi késést szabad szemmel.
nagggyon jó
pedig gondoltam megírom, hogy lehet flashből is kommunikálni vele… de jó szokásodhoz híven leelőztél, arról nem is beszélve, hogy meg is valósítottad 
amúgy pont most találtam meg én is magamnak ezt az áramkört, erre itt van egy leírás már hónapok óta
de legalább meg tudm kérdezni, hogy mennyit késik a jel? érezhető? mert a videó alapján nem tudom eldönteni
@szbzs
Köszi az észrevételeket, javítottam a hibákat és átnéztem újra a leírást. Reméljük most már jobb lett, de ha lesz még valami kis időm átfutom biztos.
Örülök hogy tetszik, ha lesz érdeklődés van még a témához sok ötletem.
Szerintem egy-két helyen “elírtad” a szöveget, pld.: “… a program nagyon egyszerŰ, csak a futtatható fájlok …”, “A feltöltést (feltöltéshez?) az Arduino weblapjáról ingyenesen letölthető programot használhatjuk …”, meg mintha a vesszőket rendszeresen elhagynád.
Ehhez képest számomra az egyik legjobb leírás, amit valaha olvastam: “nem hétköznapi-mit-hol-merre-hogyan-és mégsem szájbarágós”.
Köszönöm.
Ez állati jó! Köszi, hogy megosztottad velünk!