在Arduino中使用带有Seri​​al.print()的int变量

时间:2013-05-05 19:47:55

标签: int arduino

CODE

    void setup() {
       Serial.begin(9600);
       int r = 0;
       Serial.print("How long\n");
       int lng = Serial.read();

       while (Serial.available() == 0) {
         //Empty
       }

       char string[] = {'0'};
       while (r < 62) {
          if(r == 10) {
             string[0] += 7;
          }
          if(r ==36) {
             string[0] += 6;
          }
          Serial.println(string);
          r ++;
          string[0] ++;
       }
       Serial.print(lng, DEC);
     }

     void loop() {

     }

好的,第一个问题是第Serial.print(lng, DEC);行。它在串行监视器上打印出-1。如果我在int lng = Serial.read()期间输入3,我怎样才能让它返回输入?

其次,如何将字符串的长度设置为lng并确保每个空格以0开头而不是空白?


最终工作代码:

  void setup() {
     Serial.begin(9600);
     int r = 0;
     Serial.print("How long\n");
     int lng;

     while (1)
       if (Serial.available() > 0)
       {
          lng = Serial.read();
          break;
       }

     int l = (lng - 48);
     char string[l];
     for (int i = 0; i < l; i++)
        string[i] = '0';

     while (r < 62) {
        if (r == 10) {
           string[0] += 7;
        }
        if (r == 36) {
           string[0] += 6;
        }
        Serial.println(string);
        r++;
        string[0]++;
      }
      char eof = '/';
      Serial.println(eof);
 }

 void loop() {

 }

char eof ='/'是因为我有一个与Arduino对话的Python脚本。打印eof是一个标志,让Python知道它已完成打印并关闭串行连接。

1 个答案:

答案 0 :(得分:1)

程序在尝试读取后进入忙碌状态。所以它不会读任何东西。 改变这一部分:

int lng = Serial.read();
while(Serial.available() == 0){}

成:

int lng;
while(1)
    if (Serial.available() > 0)
    {
        lng = Serial.read();
        break;
    }

关于第二个问题:

char myString[lng];
for (int i = 0; i < lng; i++)
    myString[i] = '0';