从串口读取9位整数

时间:2017-05-25 09:59:07

标签: arduino

我正在准备一个Arduino项目。我想拿一个学生编号,这是9位数,如140201004,我想用它作为ID。但是当我写入串行监视器时,它将转换为19500.

我做错了什么?

int readnumber(void) {
  int num = 0;
  boolean validnum = false;

  while (1) {
    while (! Serial.available());
    char c = Serial.read();
    if (isdigit(c)) {
      num *= 10;
      num += c - '0';
      validnum = true;
    } else if (validnum) {
      return num;
    }
  }
}

void loop() {
  delay(100);
  if(Serial.available()>0) {
    data=Serial.read();
    if(data=='1') { 
       Serial.print("Enrolling ID #");
       int id = readnumber();
       Serial.println(id);
       getFingerprintEnroll(id);      
    }
    if(data=='4') {
       getFingerprintID();
    }
  }
}

1 个答案:

答案 0 :(得分:3)

int是一个16位有符号整数,数字可以从−32,768变为32,767
你的号码140,201,004显然太大了。

二进制140,201,004中的00001000 01011011 01001100 0010110001001100 00101100,如果你只取低16位,你会看到19,500十进制int num = 0;

为了能够存储该号码,您需要一个32位整数。而且由于你不需要负数,所以它应该是未签名的。

你应该替换

unsigned long num = 0;

uint32_t num = 0;

var myApp = angular.module('sample', []);
myApp.controller('firstCtrl', function($scope) {
    $scope.sum = function() {
        $scope.$emit('sumTwoNumber', [1, 2]);
    };
});
myApp.controller('secondCtrl', function($scope) {
    $scope.$on('sumTwoNumber', function(e, data) {
        var sum = 0;
        for (var a = 0; a < data.length; a++) {
            sum = sum + data[a];
        }
        console.log('event working', sum);

    });
});

同时替换函数的返回类型。