Robofun 機器人論壇

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

ascii to bin LED output

[複製鏈接]
發表於 2016-5-13 13:55:35 | 顯示全部樓層 |閱讀模式
各位前輩好!小弟之前有寫個程式是用每個 BIT 去判斷要讓 LED 亮或滅!是否可以改成一次就檢查每個bit不需要一個一個檢查!以下是我原始碼
int i;
int led[]={2,3,4,5,6,7,8,9};
void setup()
{
   Serial.begin(9600);
      for(i=0;i<8;i++)
         pinMode(led[i],OUTPUT);
            for(i=0;i<8;i++)
               digitalWrite(led[i],HIGH);
}

void loop()
{
   if(Serial.available()>0)
      {
       unsigned char data = Serial.read();
      
      if(data&0x01)
        digitalWrite(2,LOW);
      else            
        digitalWrite(2,HIGH);
      if(data&0x02)
        digitalWrite(3,LOW);
      else            
        digitalWrite(3,HIGH);
      if(data&0x04)
        digitalWrite(4,LOW);
      else            
        digitalWrite(4,HIGH);
      if(data&0x08)
        digitalWrite(5,LOW);
      else            
        digitalWrite(5,HIGH);
      if(data&0x10)
        digitalWrite(6,LOW);
      else            
        digitalWrite(6,HIGH);
      if(data&0x20)
        digitalWrite(7,LOW);
      else            
        digitalWrite(7,HIGH);
      if(data&0x40)
        digitalWrite(8,LOW);
      else            
        digitalWrite(8,HIGH);
      if(data&0x80)
        digitalWrite(9,LOW);
      else            
        digitalWrite(9,HIGH);
      }
}
發表於 2016-5-14 13:37:35 | 顯示全部樓層
可以改成 for (i=2 to 9)  , digitalWrite(i,data&(1>>(i-2))); , 但前提是 HIGH 的定義需要為 ''非0" ,LOW 為 0

若是以使用 ATM328 + AVR Studio C 的寫法

PORTB (PB0-PB7)當作輸出腳 , PORTB=UART_Receive() ; 直接將接收到的字元值給 PORTB 就可以了
 樓主| 發表於 2016-5-14 20:02:42 | 顯示全部樓層
回復 2# alpha
請問前輩這句話我還是不懂(PORTB (PB0-PB7)當作輸出腳 , PORTB=UART_Receive() ; 直接將接收到的字元值給 PORTB 就可以了)
可以請前輩寫個完整的讓我參考嗎?不好意思小弟剛學微處理機還沒有很熟.....
 樓主| 發表於 2016-5-14 23:47:25 | 顯示全部樓層
回復 2# alpha


    我是8顆LED 5V接LED陽極 陰極接Arduino的digital  P2~P9
發表於 2016-5-15 08:03:49 | 顯示全部樓層
回復 4# jackygwaaa


   data=~data 就可以了
發表於 2016-5-15 08:07:22 | 顯示全部樓層
回復 3# jackygwaaa
這是 C 語言的寫法 , 不是 ARDUINO 的寫法 , 也許 ARDUINO 有這種寫法 , 只是我不熟 ARDUINO
 樓主| 發表於 2016-5-15 10:13:19 | 顯示全部樓層
回復 5# alpha

data=~data ???
 樓主| 發表於 2016-5-16 15:50:42 | 顯示全部樓層
前輩我寫出來後顯示的燈號不正確......
int i;
int led[]={2,3,4,5,6,7,8,9};
void setup()
{
    Serial.begin(9600);
       for(i=0;i<8;i++)
          pinMode(led[i],OUTPUT);
             for(i=0;i<8;i++)
                digitalWrite(led[i],HIGH);
}

void loop()
{
    if(Serial.available()>0)
       {
        unsigned char data = Serial.read();
        PORTD = data;
       }     
}
發表於 2016-5-18 16:21:47 | 顯示全部樓層
回復 7# jackygwaaa

因為你的LED 陽極是接 V+,陰極接輸出腳 , 所以當你寫入 '1' 時 ,該輸出腳是高電位, LED 不會亮 , 要寫入'0'才會亮
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-3-29 03:32 , Processed in 0.193172 second(s), 7 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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