Daily Arduino×Flash #1
ちょっとArduinoとかフィジカルコンピューティング的なもののリハビリ.
毎日30min~1hくらいで小物つくってupするよ.
#1 距離センサと画像処理
おなじみSHAPE製の赤外線センサを使って,簡単な画像処理.
今日はとりあえず読み込んだ画像の大きさ(scaleX, scaleY)を距離に応じて変更したった.
回路図
準備中なう
プログラム
package { import flash.display.Sprite; import flash.events.Event; import flash.text.TextField; import flash.text.TextFormat; import funnel.*; import itsukichang.*; public class Main extends Sprite { private var _pin:Pin; private var _arduino:Arduino; private var _img:ImageLoader; private var _sum:Number = 0; private var _cnt:uint = 0; private var _n:Number; private var _text:TextField; public function Main() { init(); _arduino = new Arduino(Arduino.FIRMATA); _pin = _arduino.analogPin(0); addEventListener(Event.ENTER_FRAME, onLoop); } private function init():void { _img = new ImageLoader("itsukichang.jpg"); _img.addEventListener(ImageLoader.COMP, onComp); addChild(_img); _text = new TextField(); _text.defaultTextFormat = new TextFormat("", 20, 0x0); addChild(_text); } private function onComp(e:Event):void { _img.centerPos(); _img.x = stage.stageWidth / 2; _img.y = stage.stageHeight / 2; } private function onLoop(e:Event):void { /* 前後の値の平均とって処理することで若干スムーズに */ if ( _cnt < 2) { _sum += _pin.value; _cnt++; } else { _cnt = 0; _n = _sum / 2; _sum = 0; trace(_n); } _img.scaleX = _img.scaleY = _n * 5; /* 大体の距離を数値で表示 */ //精度的に 10cm以下は曖昧だよ!! _text.text = ((6787 / (_n * 1023 - 3)) - 4).toString() + "cm"; //_text.text = (70 - int(_n * 10000) / 100).toString() + "cm"; _text.x = stage.stageWidth / 2 - _text.width / 2; _text.y = 350; } } }