Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Arduino中显示负数_Arduino_Format - Fatal编程技术网

在Arduino中显示负数

在Arduino中显示负数,arduino,format,Arduino,Format,我和我的朋友正在Arduino板上为数字温度计布线/编码,我正在编写代码。我们的温度计工作得很好,基本的温度数据传输到我们用来输出的4位7段LED屏幕。我正试图编写代码来显示负(零下)温度,但很难获得正确的输出。它不输出负号,而是输出8 下面是loop()方法: void循环(void){ int temp=getTemp(); 布尔负=假; 如果(温度0;位数--){ //在短时间内打开一个数字 开关(数字){ 案例1: //对于temps 100.0或更高版本,最左边的数字只需打开, //或

我和我的朋友正在Arduino板上为数字温度计布线/编码,我正在编写代码。我们的温度计工作得很好,基本的温度数据传输到我们用来输出的4位7段LED屏幕。我正试图编写代码来显示负(零下)温度,但很难获得正确的输出。它不输出负号,而是输出8

下面是loop()方法:

void循环(void){
int temp=getTemp();
布尔负=假;
如果(温度<0){
//因为温度是负的,所以乘以-2再加上
//它本身给了我们这个数的绝对值
温度+=(温度*(-2));
//我们将负布尔值设置为true,表示我们正在处理一个负数
负=真;
}
显示编号(温度、负);
}
下面是(截断的)displayNumber()方法:

void displayNumber(int-to-display,布尔负数){
int num=toDisplay;
//数字为1-4,从左到右
对于(整数位数=4;位数>0;位数--){
//在短时间内打开一个数字
开关(数字){
案例1:
//对于temps 100.0或更高版本,最左边的数字只需打开,
//或显示temps-10.0或以下的负号
如果(num>=1000 | |(num>=100&&negative==true)){
数字写入(数字1,高);
}
如果(num>=100&&negative==true){
灯号(11);
}
打破
案例2:
//仅在温度为10.0度或以上时需要打开,或
//对于一位数的零下温度。
如果(num>=100 | |负==true){
数字写入(数字2,高);
}
if(num<100&&negative==true){
灯号(11);
}
打破
案例3:
数字写入(数字3,高);
打破
案例4:
数字写入(数字4,高);
打破
}
//启用此数字的右段
lightNumber(显示%10);
toDisplay/=10;
//关闭所有线段
灯号(10);
//关闭所有数字
数字写入(数字1,低位);
数字写入(数字2,低位);
数字写入(数字3,低位);
数字写入(数字4,低位);
}
}
…lightNumber()方法的代码为数字0-9正确地打开或关闭段,对于负号,10表示所有段关闭,11表示仅打开中心段。它使用带有整数参数的switch语句作为开关。 问题是,当我向displayNumber()发送一个负值时,数字前面不是负号,而是在负号应该出现的位置显示一个8。
你知道为什么吗?

我认为你在过度思考你的if语句。在您的版本中,当数字为负数时执行两个if语句。试试这个:

case 1:
  // The leftmost digit only needs to be on for temps 100.0 or above, 
  // or to display the negative sign for temps -10.0 or below
  if (num >= 1000 ){
    digitalWrite(digit1, HIGH);
    }
  if (num >= 100 && negative == true) {
    lightNumber(11);
  }
  break;

我认为你在过度思考你的if声明。在您的版本中,当数字为负数时执行两个if语句。试试这个:

case 1:
  // The leftmost digit only needs to be on for temps 100.0 or above, 
  // or to display the negative sign for temps -10.0 or below
  if (num >= 1000 ){
    digitalWrite(digit1, HIGH);
    }
  if (num >= 100 && negative == true) {
    lightNumber(11);
  }
  break;

哪里是
lightNumber
digitalWrite
?我想可能需要看更多的代码来回答。不要这样做:
temp+=(temp*(-2))!这是混乱和低效的。怎么样
temp=temp*(-1)?哪里是
lightNumber
digitalWrite
?我想可能需要看更多的代码来回答。不要这样做:
temp+=(temp*(-2))!这是混乱和低效的。怎么样
temp=temp*(-1)
case 1:
  // The leftmost digit only needs to be on for temps 100.0 or above, 
  // or to display the negative sign for temps -10.0 or below
  if (num >= 1000 ){
    digitalWrite(digit1, HIGH);
    }
  if (num >= 100 && negative == true) {
    lightNumber(11);
  }
  break;