【问题标题】:(ARDUINO) About Port Manipulation(ARDUINO) 关于端口操作
【发布时间】:2015-05-24 04:27:32
【问题描述】:

我正在使用端口操作制作一个带有 8 个 LED 的 16 位十进制到二进制转换器。用户输入十进制,然后程序将其转换为二进制,然后写入 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 = firstEight;

我收到此错误消息:在赋值中无法将 'String' 转换为 'volatile uint8_t {aka volatile unsigned char}' 对不起,如果这实际上是一个常识,但我找不到它。

这是我的作业,所以我必须使用自己的代码将十进制转换为二进制。这就是我使用字符串的原因。它保留二进制位。

感谢您的帮助。

【问题讨论】:

    标签: c arduino


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多