Robofun 機器人論壇

標題: ascii to bin LED output [打印本頁]

作者: jackygwaaa    時間: 2016-5-13 13:55
標題: ascii to bin LED output
各位前輩好!小弟之前有寫個程式是用每個 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);
      }
}
作者: alpha    時間: 2016-5-14 13:37
可以改成 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 就可以了
作者: jackygwaaa    時間: 2016-5-14 20:02
回復 2# alpha
請問前輩這句話我還是不懂(PORTB (PB0-PB7)當作輸出腳 , PORTB=UART_Receive() ; 直接將接收到的字元值給 PORTB 就可以了)
可以請前輩寫個完整的讓我參考嗎?不好意思小弟剛學微處理機還沒有很熟.....
作者: jackygwaaa    時間: 2016-5-14 23:47
回復 2# alpha


    我是8顆LED 5V接LED陽極 陰極接Arduino的digital  P2~P9
作者: alpha    時間: 2016-5-15 08:03
回復 4# jackygwaaa


   data=~data 就可以了
作者: alpha    時間: 2016-5-15 08:07
回復 3# jackygwaaa
這是 C 語言的寫法 , 不是 ARDUINO 的寫法 , 也許 ARDUINO 有這種寫法 , 只是我不熟 ARDUINO
作者: jackygwaaa    時間: 2016-5-15 10:13
回復 5# alpha

data=~data ???
作者: jackygwaaa    時間: 2016-5-16 15:50
前輩我寫出來後顯示的燈號不正確......
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;
       }     
}
作者: alpha    時間: 2016-5-18 16:21
回復 7# jackygwaaa

因為你的LED 陽極是接 V+,陰極接輸出腳 , 所以當你寫入 '1' 時 ,該輸出腳是高電位, LED 不會亮 , 要寫入'0'才會亮




歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/) Powered by Discuz! X3.2