2015-05-23 72 views
2

我正在使用端口操作對8位LED進行16位十進制轉換。用戶輸入小數,然後程序將其轉換爲二進制,然後寫入LED。但是我有一個端口操作的問題。我將二進制數字保存爲一種字符串,因此我無法將編號寫入引腳。我的代碼是;(ARDUINO)關於端口操作

void setup() { 
DDRC = B11111111; 
Serial.begin(9600); 
} 
void loop() { 
if(Serial.available()>0){ 
long input = Serial.parseInt(); 
if (input>=2){ 
y = input/2; 
    while (y>0){ 
     r = input % 2; 
     out = String(r) + out; 
     y = input/2; 
     input = y ; 
     }} 
else 
     out = String(input); 
int digits = out.length(); 

for(int i=0; i<(16-digits); i++){ 
out = "0" + out; 
    } 
    String firstEight = "B" + out.substring(0,8); 
String lastEight = "B" + out.substring(8,16); 

然後,添加代碼的這條線端

PORTC = firstEight;

我得到這個錯誤信息:不能將'String'轉換爲'volatile uint8_t {aka volatile unsigned char}'作業 對不起,如果這實際上是一個常識,但我找不到它。

這是我的家庭作業,所以我必須用我自己的代碼將十進制轉換爲二進制。這就是爲什麼我使用字符串。它保留二進制位。

感謝您的幫助。

回答

1

B*是由Arduino庫提供的宏,不能以您嘗試這樣做的方式使用。你應該做的是採取input,屏蔽你需要的位,並將該編號輸出到端口。

PORTC = (input >> 8); // 8 leftmost bits in the parsed int