日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

arduino python firmate_processing firmata协议及数组训练

發(fā)布時間:2024/9/30 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 arduino python firmate_processing firmata协议及数组训练 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

要求:

最初想法:繪制一個圖形,通過圖形的變化或者鼠標點擊什么圖案,arduino上面的led燈亮暗變換。

因為想熟練數組的運用,所以在繪制圖形的時候想通過數組來繪制圖形,但是我發(fā)現如果一味的想運用上數組,反而會本末倒置,把繪圖復雜化。(因為在我的想法里,數組在繪圖方面是用來繪制一樣的圖形,不過是它們的大小,位置等可以通過數組來變化,但是在我目前繪制的圖形中,并沒有需要很多個一樣的圖形,所以我把最初的想法放棄了)

然后我就開始想通過數組我能繪制什么,于是我想到了我可以繪制多個圓,并且讓它們旋轉從而增加趣味性。

然后通過數組我可以改變圓的大小。

我還可以改變它們的顏色,于是我就想到了彩虹的七色。然后又可以隨著顏色的變換,arduino上的led燈一個一個亮起來,這就意味者我需要7個燈,但是在擺放燈的時候我放了10個,因為剛好可以布成一個愛心桃。

思路理清楚了 接著我就開始做processing的部分了,因為圓需要旋轉所以得運用到rotate();函數

但是我又需要它不停的旋轉所以我打算在rotate函數里加個自定義變量 即 rotate(i);

然后在后面給i一個增量,圓就可以不停的旋轉了。

不過在旋轉這里我得提一點 就是 rotate(PI/i);是以圓心為軸旋轉 ,這樣達不到我需要的效果 舍棄

而 rotate(i)則是以圓外某一點為軸旋轉 符合我想要的要求。

圓能旋轉了, 但是我得控制它們旋轉軸的具體左邊啊。

這時候就需要translate()函數了, 通過它可以確定中心軸的坐標

通過以上可以得出,結合translate和rorare 再給以一個變量,即可讓一個圖形繞著某點不停的旋轉

接下來就是通過數組繪制7個圓了, 在數組的定義過程中,因為我想改變的是圓的大小,從50到350 以50單位遞增,

所以在定義數組的時候就想運用for函數,這樣就方便許多,。。但是可能是我在定義數組這方面還是不是很了解,所以只能用最笨的方法來定義了。

因為沒有專門截圖,但是下圖

可以看出來我用最笨的方法定義

(圓在背景前面)

這張圖也是我碰到的一個麻煩,就是當我想運用數組畫圓出來的時候,發(fā)現能夠順利輸出,結果卻沒反應。

經過思考過后,發(fā)現會不會是因為把圓放在background前面了,因為之前有學到過,在draw循環(huán)里加個background可以把之前的東西清空,即不會留下一些圖形運動的痕跡。

(放在背景后面)

果然成功了。

上圖只是測試能不能運用數組成功畫出10等大的圓,成功后,我就用了之前所說過的,translate函數把它們選擇的中心軸設置畫布的中心,然后通過調整上圖

ellipse(400,q*10,x[a],x[a])?中的

x軸和y軸可以控制圓之間的距離,即疏密程度。

接下來processing部分沒什么大問題了

接著就是arduino部分了,還有就是firmate協議

先連接好電路,跟之前的有個作業(yè)一樣 我連成了心形,大致物理圖如下

想要將p和a交互起來,在這里用到了firmata協議,首先現在arduino軟件上將協議燒錄進arduino里,

然后我通過processing里面的示例,將里面關于調用協議的內容加入到了我的代碼中,然后達到了交互的效果。

當然在此也碰到了很多小問題,因為對firmata協議的不理解和不熟悉,走了很多彎路,最后也是勉強成功的。

說是勉強成功是因為 我的確可以控制燈亮起來,但是我在里面輸入了low的編碼時,卻暗不下來,而且因為led燈連的端口的不同

9-12號端口的光特別特別暗 也不知道是為什么。 而且隨著燈的編碼變多 processing里的圖案居然會變得延遲。

以下是實際操作代碼:

import

processing.serial.*;?//輸入輸出processing和arduino的數據

import

cc.arduino.*;?//引入firmata協議

Arduino arduino;?//

新建一個arduino的變量

float i=0;?//控制旋轉的變量

float speed=0.001;?//旋轉變量的增量 即旋轉的速度

int [] x = new int[9]; //定義數列X的長度為9

int t=0;?//自定義變量用來控制顏色的變換和燈的變換

void setup(){

size(1000,1000);

x[0]=50;

x[1]=80;

x[2]=120;

x[3]=150;

x[4]=180;

x[5]=210;

x[6]=240;

x[7]=270;

x[8]=300;?//數量里面每個具體的數

arduino = new Arduino(this, Arduino.list()[0],

57600);?//將Arduino里面?zhèn)鱽淼男盘杻Υ嬖谧兞縜rduino中

for (int i = 0; i <= 13; i++)

arduino.pinMode(i, Arduino.OUTPUT); //設置數字輸出端口

}

void draw(){

background(0);

translate(500,500);?//圖形旋轉的中心軸

for(int a=0; a<9;a++){

rotate(i);

ellipse(20,800,50,50); //繪制10個相同大小的圓

ellipse(400,20,50,50); //同上

ellipse(500,20,50,50);//同上

ellipse(20,a*50,x[a],x[a]); //繪制10個等大的圓

i+=speed; // 旋轉的速度

t++;

if(t>2000){fill(255,0,0);} //當t>2000時 填充紅色

if(t>3000){fill(#FF5303);} // 當t>3000s時 填充橙色

if(t>4000){fill(#FF5303);}

if(t>5000){fill(#FFF308);}

if(t>6000){fill(#23FF08);}

if(t>7000){fill(#08FFF1);}

if(t>8000){fill(#0896FF);}

if(t>9000){fill(#7C1AFF);}

if(t>10000){fill(#E000FF);} //當t>10000時 填充紫色

if(t>12000){fill(random(255),random(255),random(255));}

//當t>12000 填充彩色

if(t>14000){fill(random(255));} // 當t>14000 填充黑白頻閃

if(t>16000){t=1000;} // 當t>16000 恢復白色 重新開始顏色輪回

if(t>0){arduino.digitalWrite(3,Arduino.HIGH); } //黑白圓時候

3號端口的燈亮

if(t>2000){arduino.digitalWrite(4,Arduino.HIGH); } //紅色圓時候

4號端口燈亮

//為什么在這里不想做一亮一暗的效果,是因為不知道為什么加了一條Low后

led燈之會暗一點點,真的就一點點,再加上加上Low processing里的動畫效果居然有很大的延遲, 所以舍棄了。

if(t>3000){arduino.digitalWrite(5,Arduino.HIGH);} //原理同上

if(t>4000){arduino.digitalWrite(6,Arduino.HIGH);}

if(t>5000){arduino.digitalWrite(7,Arduino.HIGH);}

if(t>6000){arduino.digitalWrite(8,Arduino.HIGH);}

if(t>7000){arduino.digitalWrite(9,Arduino.HIGH);}

if(t>8000){arduino.digitalWrite(10,Arduino.HIGH);}

if(t>9000){arduino.digitalWrite(11,Arduino.HIGH);}

if(t>10000){arduino.digitalWrite(12,Arduino.HIGH);}//原理同上

}

}

沒有延遲單純processi的視頻

總結

以上是生活随笔為你收集整理的arduino python firmate_processing firmata协议及数组训练的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。