久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1840|回復: 6
打印 上一主題 下一主題
收起左側

單片機紅外控制遙控車程序的問題 我真的有很多問號

[復制鏈接]
跳轉到指定樓層
樓主
日常提問,豐富自己。。。。

在此提前謝過各位的指點,感激之情,不勝言表!!!!

在此提前謝過各位的指點,感激之情,不勝言表!!!!

在此提前謝過各位的指點,感激之情,不勝言表!!!!



提問背景:我用51單片機開發板配的遙控器制作了一個遙控車,但是發現自己的遙控車和超市買的動作性質是不同的。

遙控原理:我先確定好遙控器每個按鍵發送的數據碼是什么,然后用switch語句進行選擇操作。代碼如下

while(1)

{

                switch(IrValue[2])
                        {         
                                case(0x45):
                                         startstop();IrValue[2]=0;break;               
                                case(0x18):
                                         direction(0x55);IrValue[2]=0;break;        
                         }
}
其中:IrValue[2]是數據碼字節,當IrValue[2]=0x45時,代表按下某一個按鍵發送的數據碼字節內容是0x45

我的問題是:當我按下數據碼為0x18的按鍵時,只能讓小車一直跑,按鍵松手了也一直跑。所以我就想,如果這個遙控器是以一定頻率發射紅外線信號的話,就不會出現這種情況,因為我在操作完direction函數后,用IrValue[2]=0把數據碼清空了,所以在下一次循環時就不會執行direction。所以我下定結論,紅外遙控器沒有以一定頻率發射紅外線信號。那么我要如何去做才能實現遙控器按下,小車跑,遙控器按鍵松開,小車停止呢???(在不換遙控器的前提下)
如果這種遙控器是不可以實現這個功能的,那我要如何才能實現這個功能


PS:可不可以用手機上一個軟件實現和我手里這個遙控器發射一摸一樣數據格式,我的遙控器數據格式是

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:341045 發表于 2020-3-29 15:06 | 只看該作者
while(1)
{
                switch(IrValue[2])
                        {         
                                case(0x45):
                                         startstop();IrValue[2]=0;break;               
                                case(0x18):
                                         direction(0x55);IrValue[2]=0;break;        
                                //估計是你還有數據沒截取, 如釋放鍵碼, 新加下面試下
                                default:

                                         
                                         break;


                         }
}
回復

使用道具 舉報

板凳
ID:367369 發表于 2020-3-29 15:13 | 只看該作者
direction();可以發出來嗎?  你的程序應該是IrValue[2]=0x18;然后電機的信號線的狀態變為前進狀態;當IrValue[2]=0時你的電機的狀態沒有更新
回復

使用道具 舉報

地板
ID:341045 發表于 2020-3-29 15:16 | 只看該作者
//估計是遙控的接收碼你沒列全, 你這樣試下
while(1)
{
                switch(IrValue[2])
                        {         
                                case(0x45):
                                         startstop();IrValue[2]=0;break;               
                                case(0x18):
                                         direction(0x55);IrValue[2]=0;break;

                                //你應該是截取的數據碼不全, 你試加下面幾句試下        
                                default:
                                         startstop();IrValue[2]=0;  //電機停, 接收數據清0, 不是這二句就按你的改
                                         break;
                         }
}
回復

使用道具 舉報

5#
ID:703220 發表于 2020-3-30 10:12 | 只看該作者
game灬boy 發表于 2020-3-29 15:13
direction();可以發出來嗎?  你的程序應該是IrValue[2]=0x18;然后電機的信號線的狀態變為前進狀態;當IrV ...

direction 里面就是對P1總線賦值
direction(u8 i)
{
        P1=i;
}
P1八個IO口控制兩個L293D的信號,以此來讓電機正反轉
回復

使用道具 舉報

6#
ID:367369 發表于 2020-3-30 12:03 | 只看該作者
壯大51 發表于 2020-3-30 10:12
direction 里面就是對P1總線賦值
direction(u8 i)
{

main你應該可以改成
while(1)
{
if (IrValue[2]==0x18)
  direction(0x55);
else
direction(0x00);
}
回復

使用道具 舉報

7#
ID:367369 發表于 2020-3-30 12:08 | 只看該作者
壯大51 發表于 2020-3-30 10:12
direction 里面就是對P1總線賦值
direction(u8 i)
{

你也說了“因為我在操作完direction函數后,用IrValue[2]=0把數據碼清空了,所以在下一次循環時就不會執行direction”
所以你的P1狀態為上次操作后的狀態即 P1=0x55;電機前進,而后面的程序沒有對P1的狀態進行改變;所以車一直前進
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产成人一区二区三区 | av黄色片在线观看 | 99pao成人国产永久免费视频 | 日韩欧美在线播放 | 日本视频在线播放 | 91在线看 | 97色在线视频 | 精品久久成人 | 欧美精品综合 | 美女福利视频一区 | 国产精品久久国产精品久久 | 天天视频一区二区三区 | 中文字幕精品一区二区三区精品 | 99综合在线 | 很很干很很日 | 成人深夜小视频 | 欧美高清视频一区 | 日韩精品在线视频免费观看 | 亚洲精品视频在线看 | 欧美小视频在线观看 | 97日日碰人人模人人澡分享吧 | 久久久精品一区 | 人人鲁人人莫人人爱精品 | 户外露出一区二区三区 | 国产精品免费看 | 精品久久香蕉国产线看观看亚洲 | 精品久久精品 | 99精品一级欧美片免费播放 | 一区二区电影 | 欧美视频xxx| 日韩一区二区在线视频 | 日韩在线91 | 综合精品久久久 | 日韩一级免费观看 | 免费a级毛片在线播放 | 国产一级片av | 成人亚洲一区 | 看片国产 | 国产不卡在线观看 | 欧美一区精品 | 国产精品成人在线 |