Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 2111|回復: 1
打印 上一主題 下一主題

請求各位前輩講解

[複製鏈接]
跳轉到指定樓層
1#
發表於 2016-5-18 14:40:29 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
請教各位前輩 以下是朋友的程式 小弟我看不懂 希望可以聽各位大大的講解
int i;
int led[]={2,3,4,5,6,7,8,9};
unsigned char dataD;
unsigned char dataB;
void setup()
{
    //DDRD = B00000011;
    //DDRB = B11111100;
     Serial.begin(9600);
        for(i=0;i<8;i++)
           pinMode(led[i],OUTPUT);
        for(i=0;i<8;i++)
           digitalWrite(led[i],LOW);
}
void loop()
{
     if(Serial.available()>0)
        {
         unsigned char data = Serial.read();
         PORTD = data<<2;
         PORTB = data>>6;
         dataD = PORTD;
         dataD = dataD&0x03;
         //dataD = dataD|(data<<2);
         dataB = PORTB;
         dataB = dataB&0xFC;
         dataD = dataD|(data<<2);
         dataB = dataB|(data<<6);     
         delay(2000);
         PORTD = PORTD&0x03;
         PORTB = PORTB&0xFC;   
        }
}
2#
發表於 2016-5-18 18:21:20 | 只看該作者
本帖最後由 超新手 於 2016-5-18 18:29 編輯

幫他簡化一下, 可能你就看的比較懂
除非有其他程式, 否則 dataD 和 dataB 根本沒作用
可以刪掉, 如下
void loop()
{
     if(Serial.available()>0)
        {
         unsigned char data = Serial.read();
         PORTD = data<<2;
         PORTB = data>>6;
         delay(2000);
         PORTD = PORTD&0x03;
         PORTB = PORTB&0xFC;   
        }
}
重點在於
arduino(應該說 uno, 各機種略有不同)的接腳 2 ~ 9
分別是
PD2~PD7, PB0 和 PB1
所以收到 data 後, 必須左移兩位寫入 PORTD
右移六位寫入 PORTB(應該是點亮對應的 LED)
等兩秒後, 再把PD2~PD7, PB0 和 PB1寫入 0 (應該是關掉所有 LED)

其實這並不是 Arduino 的程式風格,
也無法移植到其他版本的 arduino
只不過...為什麼你不直接去問你朋友?
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-11-25 14:04 , Processed in 0.095470 second(s), 8 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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