ARDUINO:Serial.print一个多字符元素

问题描述

我需要打印4位长的数字,这些数字是从0到16的二进制数字(0000、0001、0010等)。

问题:

考虑此代码

char array[] = {'0000','0001','0010','0011'};
int i;

void setup() {
  Serial.begin(9600); 
}

void loop() {
  while (i < 4){
    Serial.println(array[i]);
    i++;
  }
}

串行监视器输出

0
1
0
1

或者我的预期输出是:

0000
0001
0010
0011

似乎只读取数组中每个元素的第一个“字符”。

问题:如何在期望的输出中打印每个元素的完整性?

经过一番研究,我发现了这个:

Arduino serial print

然后指的是使用PROGMEM,但是我不确定这是否是我需要的,或者是否有解决我问题的更简单的方法

谢谢

解决方法

如评论中所述,请勿使用多字符常量(您使用的单引号)。他们可能会杀死幼犬。单引号用于字符常量,例如'a'

您可以使用字符串(带双引号)或真实的二进制数;没有欺骗性,后者将打印而没有前导零。

此代码示例同时完成了这两项工作,因此请选择所需的内容:

const char* array1[] = {"0000","0001","0010","0011"}; // strings
uint8_t array2[] = {0b000,0b0001,0b0010,0b0011};      // binary numbers
int arraySize = sizeof(array1) / sizeof(array1[0]);
    
void setup() {
  Serial.begin(9600);
  while (!Serial);
    
  Serial.println("Print the strings:");  
  int i = 0;
  while (i < arraySize){
    Serial.println(array1[i]);
    i++;
  }
      
  Serial.println("\nPrint the binary numbers (note: no leading zeroes):");
  i = 0;
  while (i < arraySize){
    Serial.println(array2[i],BIN);
    i++;
  }
      
}
    
void loop() {
}