我正在制作一个16位十进制到二进制转换器,有8个LED,使用端口操作用户输入十进制数,然后程序将其转换为二进制数,然后写入指示灯但是我在端口操作上有问题我保留二进制数作为字符串的一种类型,因此不能将数字写入管脚我的代码是;

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=前八名;
我得到一条错误消息:无法在赋值中将“String”转换为“volatile uint8{aka volatile unsigned char}”
对不起,如果这是常识,但我找不到。
这是我的作业,所以我必须用自己的代码把十进制转换成二进制这就是为什么我用绳子它保留二进制位。
谢谢你的帮助。

最佳答案

B*是Arduino库提供的宏,不能以您尝试的方式使用您应该做的是获取input,屏蔽所需的位,并将该数字输出到端口。

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

07-24 09:45
查看更多