Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 2153|回復: 5

arduino 藍芽控制窗簾 新手詢問

[複製鏈接]
發表於 2017-10-28 16:23:45 | 顯示全部樓層 |閱讀模式
您好
我是個新手
因為學校專題需求
所以網路上找了許多資料
目前遇到的問題是:
用手機app控制窗簾上下
單純上升或下降 可以動作
但是加上紅外線感應器之後
上升的時候 碰到上面紅外線感應器
窗簾停止
但是這時用手機app操作下降按鍵
卻無法控制窗簾下降

if (digitalRead(UpIRsensor) == 1)
{       
        myservo.attach(9);                     
        myservo.write(90);           
}
while (digitalRead(UpIRsensor) == 1);

if (digitalRead(DownIRsensor) == 0)
{               
        myservo.attach(9);                       
        myservo.write(90);  
}   
while (digitalRead(DownIRsensor) == 0);

switch (cmmd[0]) { //讀取第一個字
case 99:
myservo.write(180);
break;

case 100:
myservo.write(0);
break;

case 101:
myservo.write(90);
break;

我是個新手
我的程式不是很ok
想請問各位大神
需要修改哪裡或加什麼
能夠達成 想要的動作:
"手機app按上升
碰到上面紅外線
窗簾停止
在用app按上升或下降
能夠有動作"
麻煩各位了 謝謝
發表於 2017-10-28 17:21:40 | 顯示全部樓層
宣告一個變數,如 u,,初始值0
當 u =1,檢查上面,如果到就停馬達,並把u設為0
當 u =2,檢查上面,如果到就停馬達,並把u設為0
CASE
當收到 app 上升命令時
馬達上昇, u=1
當收到 app 下降命令
馬達下降,u=2
當收到停止命令,馬達停止
u=0
發表於 2017-10-28 18:14:13 | 顯示全部樓層
用 if
不要用 while
否則程式會卡住
 樓主| 發表於 2017-10-29 14:25:38 | 顯示全部樓層
您好  謝謝你的回答
我修改之後的程式請問是這樣嗎
不知道對不對
還是無法達到我想要的動作

if(u=1,(digitalRead(UpIRsensor) == 1))
{       
        myservo.attach(9);                     
        myservo.write(90);  
        u=0;      
}
while (digitalRead(UpIRsensor) == 1);               

if(u=2,(digitalRead(DownIRsensor) == 0))
{               
        myservo.attach(9);                                              
        myservo.write(90);
        u=0;  
}   
while (digitalRead(DownIRsensor) == 0);         


switch (cmmd[0]) { //讀取第一個字
case 99:
myservo.write(180);
u=1;
break;

case 100:
myservo.write(0);
u=2;
break;

修改之後發現的問題是
沒有 while 那行
app按上升
馬達一開始就會有好像上升和停止同時運作的聲音

有while那行 可以正常的上升碰到上紅外線停止
下降碰到下紅外線停止

只是偵測著紅外線
操作手機app上升/下降按鍵
一樣沒辦法操作上下
一定要手動移開紅外線感測
才會開始動作

例如:
我用手把上下紅外線都遮住
app按上升
要把手往上移動到沒感應到下方紅外線
馬達才會往上升
上升到沒感應到上面紅外線之後會自動停止
之後app按下降
一樣要把手往下移動到紅外線感應到
才會向下動作

請問我需要修改哪裡呢
還是不太懂
不好意思
還在學習中
感謝您





 樓主| 發表於 2017-10-29 15:48:51 | 顯示全部樓層
謝謝大大
我研究出來了
感謝
發表於 2017-10-29 17:24:40 來自手機 | 顯示全部樓層
if((u==1)&&(digitalRead(UpIRsensor) == 1))
{
myservo.attach(9);
myservo.write(90);
u=0;
}
if((u==2)&&(digitalRead(DownIRsensor) == 0))
{
myservo.attach(9);
myservo.write(90);
u=0;
}
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2024-3-29 09:47 , Processed in 0.198587 second(s), 6 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表