相關(guān)推薦
您可能對(duì)下面課程感興趣
Arduino視頻教程基礎(chǔ)篇

75小節(jié)已有138527人學(xué)過

leonardo做的無線鼠標(biāo)
發(fā)布時(shí)間:2022-03-11 10:59 [ 我要自學(xué)網(wǎng)原創(chuàng) ] 發(fā)布人: 小劉2175 閱讀: 1360

leonardo到手已經(jīng)很久了,但一直還沒有想好用他來做點(diǎn)啥,前不久一個(gè)搞藝術(shù)的好朋友說自己每天用鼠標(biāo)手特別不舒服,而且鍵盤都很少用, 問我能不能做一個(gè)手勢(shì)控制電腦鼠標(biāo)的一樣?xùn)|西,例如兩個(gè)手指頭就代表左右鍵,食指控制光標(biāo)上下左右移動(dòng),然后食指按下則點(diǎn)擊左鍵,中指按下則點(diǎn)擊右鍵。之前我也看到過一個(gè)MIT天才(具體啥名給忘了)在食指中指套兩顏色不同的項(xiàng)圈,用電腦攝像頭識(shí)別,用來控制電腦?墒俏椰F(xiàn)在還木有那種水平,想想自己身邊接觸的,然后leonordo立馬蹦了出來,一直都想玩下leonardo的控制電腦鼠標(biāo)鍵盤功能,現(xiàn)在終于有了動(dòng)力,就先做個(gè)簡(jiǎn)單的飛鼠吧,也就是無線鼠標(biāo),至于后面脫離高成本的無線通信用手指控制電腦,后面再慢慢想吧,希望看到此篇的同志們請(qǐng)不要覺得我很蛋疼很無聊(雖然自己有點(diǎn)這么認(rèn)為,呵呵),有啥好的想法,分享出來大家一起研究下。     于是準(zhǔn)備材料,做飛鼠嘛,自然想到最簡(jiǎn)單可靠的的無線通信方式也就是藍(lán)牙,示意圖如下

     下一步工作就是設(shè)置藍(lán)牙AT指令,使藍(lán)牙一上電便主機(jī)從機(jī)自動(dòng)連接上,此點(diǎn)就不多闡述,后面會(huì)單獨(dú)寫出藍(lán)牙設(shè)備與藍(lán)牙設(shè)配對(duì)并建立連接。
    leonardo程序:
[mw_shl_code=c,true]int range = 5; //X Y軸一步移動(dòng)的范圍,影響移動(dòng)的速度。
int responseDelay = 10; //鼠標(biāo)相應(yīng)延時(shí),ms為單位
int xDistance,yDistance;
void setup()
{
Serial1.begin(9600); //開串口,注意這里是serial1,這是leonardo的串口與其他arduino的區(qū)別
}
void loop()
{
unsigned char Recieve[4]; //設(shè)置數(shù)組,存接受到的4個(gè)字符
for(int i=0;i<4;i++)
{
Recieve=Serial1.read();
delay(2);
}

if(Recieve[0] == 'a')
xDistance -= range;
else if(Recieve[0] == 'd')
xDistance = range;
else
xDistance = 0; //設(shè)置鼠標(biāo)向X軸方向移動(dòng)的距離

if(Recieve[1] == 'w')
yDistance -= range;
else if(Recieve[1] == 's')
yDistance = range; //設(shè)置鼠標(biāo)向Y軸方向移動(dòng)的距離
else
yDistance = 0;

if ((xDistance != 0) || (yDistance != 0))
{ Mouse.move(xDistance, yDistance, 0); } //執(zhí)行鼠標(biāo)移動(dòng)動(dòng)作

if(Recieve[2] == '0') {
if (!Mouse.isPressed(MOUSE_LEFT)) {
Mouse.press(MOUSE_LEFT); //執(zhí)行鼠標(biāo)按下左鍵
}
}
else {
if (Mouse.isPressed(MOUSE_LEFT)) {
Mouse.release(MOUSE_LEFT);
}
} //未使用時(shí)必須釋放左鍵
if(Recieve[3] == '0') {
if (!Mouse.isPressed(MOUSE_RIGHT)) {
Mouse.press(MOUSE_RIGHT);
} //執(zhí)行鼠標(biāo)按下右鍵
}
else {
if (Mouse.isPressed(MOUSE_RIGHT)) {
Mouse.release(MOUSE_RIGHT);
} // //未使用時(shí)必須釋放右鍵
}
delay(responseDelay); // 延時(shí),讓其執(zhí)行動(dòng)作
}
[/mw_shl_code]

UNO使用外部電池供電,整個(gè)搖桿部分就可以拿到十米左右的地方控制電腦。UNO程序如下:
[mw_shl_code=c,true]char Y=6, R=3, G=4;


void setup(void)
{
pinMode(R, INPUT_PULLUP); //設(shè)置搖桿按鍵上拉
pinMode(G, INPUT_PULLUP);
Serial.begin(9600); //開串口
}

void loop()
{
int X,Y,R_Button,G_Button;
X=analogRead(1);
Y=analogRead(0); //讀搖桿兩軸的模擬值
R_Button=digitalRead(R);
G_Button=digitalRead(G); //讀搖桿的兩個(gè)按鍵狀態(tài)

if(X<100)
Serial.write('a');
else if(X>800)
Serial.write('d');
else
Serial.write('n'); //x軸向左輸出a,向右輸出d,中間輸出n

if(Y<100)
Serial.write('s');
else if(Y>800)
Serial.write('w');
else
Serial.write('n'); //Y軸向上輸出w,向下輸出s,中間輸出n

if(G_Button ==0)
Serial.write('0');
else
Serial.write('1'); //左邊按鍵按下輸出0,否則輸出1
if(R_Button == 0)
Serial.write('0');
else
Serial.write('1'); //右邊按鍵按下輸出0,否則輸出1
delay(10); //延時(shí)10ms,使發(fā)送數(shù)據(jù)穩(wěn)定
}
[/mw_shl_code]

這樣leonardo部分連接電腦,手持搖桿在很遠(yuǎn)的位置就可以遙控電腦鼠標(biāo)。
調(diào)試說明:受到藍(lán)牙通信速率和leonardo本身控制命令的束縛,整個(gè)控制光標(biāo)不會(huì)向普通鼠標(biāo)那樣靈活,因?yàn)樗粭l指令必須給一小段時(shí)間延時(shí)反應(yīng)。

Arduino視頻教程基礎(chǔ)篇
我要自學(xué)網(wǎng)商城 ¥40 元
進(jìn)入購(gòu)買
文章評(píng)論
0 條評(píng)論 按熱度排序 按時(shí)間排序 /350
添加表情
遵守中華人民共和國(guó)的各項(xiàng)道德法規(guī),
承擔(dān)因您的行為而導(dǎo)致的法律責(zé)任,
本站有權(quán)保留或刪除有爭(zhēng)議評(píng)論。
參與本評(píng)論即表明您已經(jīng)閱讀并接受
上述條款。
V
特惠充值
聯(lián)系客服
APP下載
官方微信
返回頂部
相關(guān)推薦
您可能對(duì)下面課程感興趣
Arduino視頻教程基礎(chǔ)篇

75小節(jié)已有138527人學(xué)過

分類選擇:
電腦辦公 平面設(shè)計(jì) 室內(nèi)設(shè)計(jì) 室外設(shè)計(jì) 機(jī)械設(shè)計(jì) 工業(yè)自動(dòng)化 影視動(dòng)畫 程序開發(fā) 網(wǎng)頁設(shè)計(jì) 會(huì)計(jì)課程 興趣成長(zhǎng) AIGC