Robofun 機器人論壇

標題: [問題]兩個可變電阻讓flash物件上下左右移動 [打印本頁]

作者: 阿肚紐    時間: 2013-12-16 23:32
標題: [問題]兩個可變電阻讓flash物件上下左右移動
我在flash 端(600x600像素)利用  movieClip_3.x/y=myp程式碼;  arduino 利用類比輸入,將取到的值乘上600/1023 可以上下左右移動但是在控制上下與控制左右的可變電阻一起轉動時,物件會一格一格的向上移動,非常地不順暢,是不是用錯方式來呈現,還是有更好的方式來控制物件的上下左右,請求各位大大的提示,感謝!!
作者: mzw2008    時間: 2013-12-17 01:21
跑FLASH的電腦效能如何呢!?
作者: 阿肚紐    時間: 2013-12-17 09:53
回復 2# mzw2008
我在arduino 程式中每傳一個數值都會delay 200ms 請問一下會不會是這個問題??

但是把delay拿掉arduino傳值到TinkerProxy接收都會lag,沒辦法隨傳隨收,我串列埠的鮑率已經條到最大921600了還是無法。


flash 的效能?? 是指fps? 還是電腦的硬體?? 我fps已經調到30  電腦硬體 i5 跑一張圖片的上下左右應該不會太困難吧

我是想說可不可以跟滑鼠一樣的平滑,在同時轉動兩個可變電阻的時候,不會有一格一格的樣子(類似在玩貪食蛇時,一直↑→↑→↑→那種一格一格跑的情況) 。
作者: HelloEdward    時間: 2013-12-18 22:36
這個說來話長總而言之這Arduino要跑順要的配上即時多工系統才行.......我是HelloEdward有預備(地點及時間未定)開這樣如下的課程請參考
Arduino課程資訊:三行指令打造您專屬的微處理機即時多工系統核心
(使用Arduino UNO平台為例)
Arduino 在短時間流行起來,歸功於開放原始碼的方式,使得初學者踏入此一領域便有數十項Arduino現有專案範例程式可供參考。Edward在單晶片領域耕耘多年,近年來得力於C語言對MCU的普遍支援,使得使用多年的『計時器狀態機即時多工排程方法』得以濃縮成3行,這3行指令正值Arduino平台與32位元的ARM CORTEX-M系列的流行,益發顯現其跨越平台的特性,使用此方法發展的軟件,得以在極少修改的情況下,可同時支援Arduino、PIC、8051、ARM CORTEX 等MCU及開發平台。一次性軟件發展而後永續使用,非只此4種平台,只要CPU支援TIMER的中斷及C語言均能使用此排程法,達到相同功能軟件之目的,此『計時器狀態機即時多工排程方法』簡稱『賴氏排程器』。
『賴氏排程器』不同於一般即時作業系統的龐雜,只保留作業系統最核心的處理程序(Process)對於時間安排(Scheduling)部分,因其簡潔有效率的指令安排而能得到最快速的軟、硬即時的支援,無論是不允許絲毫時間誤差的語音信號產生器,或者是需要大量的即時多工處理程序,本排程法均能有效率的支援,就效能上來說,一般市面RTOS處理任務時間極限不能小於其時鐘節拍,約為5~10ms也就是100~200HZ,而使用『賴氏排程器』的一般建議標準規劃為244us也就是4096HZ,與前者差異甚大,當然啦!這只是12MHZ(1MIPS)級標準型8051的建議,隨者MCU速度提升及任務需求您可做更高的速度規劃。
有別於Arduino傳統範例程式一次只能做一項專案工作的方式,本課程導入排程器的系統觀念,學者可將所做過的實習項目都可不遺漏的連成一氣同時執行,當然啦!學會本課程不僅可學會Arduino所附參考程式範例,亦可將之修改成自己所需鑲嵌在即時多工系統中執行得樣式!
作者: vegewell    時間: 2013-12-21 02:39
本帖最後由 vegewell 於 2013-12-21 02:41 編輯

回復 3# 阿肚紐



這不是arduino或是電腦硬體的問題,是你自己flash程式沒寫好,
聽說windows的port每秒可傳遞五十次data,
足以應付你手指的速度,
我臨時興起,用c#寫,及如你用兩個可變電阻操作,感覺還蠻順的,
上傳的影片如下:http://www.youtube.com/watch?v=nS9AXR4u_-I
=====================
[youtube]nS9AXR4u_-I[/youtube]
作者: 阿肚紐    時間: 2013-12-22 09:35
本帖最後由 阿肚紐 於 2013-12-22 16:50 編輯

回復 5# vegewell

可以參考vegewell大大的程式嗎,或是給小弟一點提示我寫出來蠻不順的...
這邊是我arduino 的程式碼:

float val=0;
float oldval=999;
float val2=0;
float oldval2=999;

void setup() {
  Serial.begin(115200);        
}
void loop() {
   val=analogRead(A0);           //第一顆可變
   val2=analogRead(A1);          //第二顆
   if(abs(val-oldval)){              //第一顆與前值比較數值若有變動傳送資料沒有則不傳
     Serial.println(val*600/1023);
     oldval=val;
     delay(200);                       // 我delay 調200ms 以下TinkerProxy就無法很順的接收資料
   }
   if(abs(val2-oldval2)>2){             //第二顆與前值比較數值若有變動傳送資料沒有則不傳
     Serial.println((val2*600/1023)+1025); //為了分辨資料 我加上了1025之後再flash上在減掉
     oldval2=val2;
     delay(200);                     //同上
   }
}


flash程式碼:
var a:Arduino = new Arduino(5334);
var my2:Number=new Number();
a.addEventListener(DataEvent.DATA,receiveData);
function receiveData(event:DataEvent):void
{
   if(Number(event.data)>1024)
      my2=Number(event.data)-1024;
   else
      movieClip_2.x = Number(event.data);  //movieClip_2是我物件的名稱
   movieClip_2.y=my2;
}


我使用TinkerProxy中介軟體(鮑率115200)麻煩一下大大了需要更改的地方。感謝
作者: vegewell    時間: 2013-12-23 10:44
回復 6# 阿肚紐

不好意思,我現在沒空去研究TinkerProxy,
在arduino方面,我只寫幾句:
void setup() {
  Serial.begin(9600);          //設定SerialPort的速度9600 = 9600bit/s
}

void loop()
{
   int  aa = map( analogRead(A1), 0, 1023, 1000, 2023);
   Serial.print(aa);      
  delay(20);
  aa = map( analogRead(A2), 0, 1023, 2000, 3023);
   Serial.print(aa);        
  delay(20);
至於電腦裡的程式,反正你不懂c#,
而且很繁雜,就算了,
提示就是:可能要運用到類似卡曼濾波器方式.
作者: 阿肚紐    時間: 2013-12-23 20:44
本帖最後由 阿肚紐 於 2013-12-23 20:46 編輯

回復 7# vegewell


   我想問一下你的C#程式碼部分是用來當作flash 與arduino之間的中介軟體嗎?
作者: yl50607    時間: 2014-3-12 09:53
應該是Delay200的關係吧
如果 把delay拿掉arduino傳值到TinkerProxy接收都會lag
那要不要考慮改用 Serproxy
我之前是用這個 不太會有LAG問題
作者: 阿肚紐    時間: 2014-3-14 16:59
本帖最後由 阿肚紐 於 2014-3-14 17:45 編輯

回復 9# yl50607

請問一下...serproxy要如何使用 當初一開始我是用Serproxy做flash→arduino 是可以成功的但是做到arduino要傳值到flash flash端都會抓不到數值。才去找另外一個中介軟體使用。


這是我一個可變電阻的小程式在arduino flash端會抓不到數值,請大大看一下有甚麼問題嗎??
  int val;
  int zero=0;
  void setup(){
   Serial.begin(9600);
   pinMode(A0,INPUT);
}
void loop(){
  val=analogRead(A0);
    Serial.print(val);
    Serial.Write(zero); //在網路上看到範例好像說要給一個0的數值才會知道已傳完 但網路上範例使用的是BYTE關鍵字我是1.0以後版本的arduino 開發環境他建議我使用write 不知道這樣寫對不對
  delay(50);


}
開啟flash後serproxy有顯示有連接但數值卻一直都傳不進去
請各位大大幫忙一下 感謝!!
作者: 阿肚紐    時間: 2014-3-17 20:19
大大 求解 大大




歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/) Powered by Discuz! X3.2