如何纠正arduino编程中的错误"exit status 1 exponent has no digits"?
how to rectify the error "exit status 1 exponent has no digits" in arduino programming?
我需要帮助来调试我刚刚输入的 arduino 程序。显示的错误是:-
1.exit 状态 1 指数没有数字(在 "char INT_ENABLE = 0*2E" 行找到)。
该程序的目的是在通过 adxl345 检测到 inactivity 时触发蜂鸣器并关闭继电器开关,而在检测到 activity 时执行相反的操作。
我在下面提供我的程序代码。检查并帮助我纠正这个问题以及您可能在我的程序中发现的任何其他问题。
#include <SPI.h>
int cs = 10;
int intr = 2;
int buzzer = 4;
int relay = 5;
int su = 1;
int intr1
pinmode (buzzer,OUTPUT);
pinmode (relay,OUTPUT);
char POWER_CLT = 0*2D
char DATA_FORMAT = 0*31
char DATAX0 = 0*32
char DATAX1 = 0*33
char DATAY0 = 0*34
char DATAY1 = 0*35
char DATAZ0 = 0*36
char DATAZ1 = 0*37
char THRESH_ACT = 0*24
char THRESH_INACT = 0*38
char TIME_INACT = 0*26
char INT_ENABLE = 0*2E
char INT_MAP = 0*2F
char ACT_INACT_CTL = 0*27
char INT_SOURCE = 0*30
char values[10];
char output[20];
int x, y, z;
char inactivityevent = 0;
void setup()
{
SPI.begin();
SPI.setDataMode(SPI_MODE3);
Serial.begin(9600);
pinMode(cs,OUTPUT);
digitalWrite(cs, HIGH);
attachInterrupt(digitalpintointerrupt(intr),interruptHandler,RISING);
writeRegister(DATA_FORMAT,0*01);
writeRegister(POWER_CTL,0*08);
writeRegister(INT_MAP,0*F7 && 0*EF);
writeRegister(THRESH_INACT,1);
writeRegister(TIME_INACT,0);
writeRegister(ACT_INACT_CTL,0*0F);
writeRegister(INT_ENABLE,0*08);
readRegister(INT_SOURCE,1,VALUES);
}
void interrupHandler()
{
read register (INT_SOURCE,1,values);
}
void loop()
{
intr1=digitalread(intr);
if ( intr1==high)
{
read register(DATAX0,6,values);
x = ((int)values[1]<<8|(int)values[0]);
y = ((int)values[3]<<8|(int)values[2]);
z = ((int)values[5]<<8|(int)values[4]);
if ( x<=15 && x>=-15 && y<=10 && y>=-10 && z>=75 && z<=90)
{
digitalwrite(buzzer,HIGH);
digitalwrite(relay,LOW);
}
else
{
for (int i=0;i<=90;i++)
{
delay (2000);
if (intr == LOW)
{ break(); }
if (i==90)
digitalwrite(relay,LOW);
}
}
while (su=1)
{
if (intr==LOW)
{
digitalwrite(buzzer,LOW);
digitalwrite(relay,HIGH);
break();
}
}
}
}
对于程序中的所有 0*nn
值,将它们替换为 0xnn
。确保每一行都以分号结尾(例如,第 7、10-24 行)。在第 40 行,检查包含 &&
的表达式,因为那是一个 "logical" 运算符,而您看起来想要一个 "bitwise" 运算符,所以将 &&
更改为 &
.在第45行,我认为你需要VALUES
小写,因为你试图填写的变量名称是小写的。
有几个地方你说 read register
但我认为你需要对那些地方使用 readRegister
。
检查第 78 行,其中 while 循环检查 su
的值。我认为你应该在这里有 while (su == 1)
而不是只有一个 =
。单个 =
正在设置值,但我认为您想改为检查该值,因此您需要 ==
。我确实注意到程序中没有任何内容可以从 1
更改 su
,因此它会一直持续到 intr
发生。
我发现了这个问题,因为它是错误消息的顶部 Google 结果,所以如果有人在这里结束,这是实际发生的事情。这一行是问题所在:
char INT_ENABLE = 0*2E
这应该是
char INT_ENABLE = 0x2E;
其中0x
表示2E
是一个十六进制数。然而,编译器将原始代码读取为 zero times 2E
,并将 2E
解释为尝试编写缺少指数的 floating-point 数字。
对于以前没有见过这个的人,你可以把像 200 万这样的数字写成 2e6
,这意味着 2 followed by 6 zeros
或 2 times 10 to the power of 6
。第一个数字被称为尾数,第二个是指数。因此错误消息 exponent has no digits
.
在我的例子中,问题是数字 1 看起来和 lower-case L 一样,我侄子有 mistyped/misread 一个变量 1ed
而不是 led
.
我需要帮助来调试我刚刚输入的 arduino 程序。显示的错误是:- 1.exit 状态 1 指数没有数字(在 "char INT_ENABLE = 0*2E" 行找到)。 该程序的目的是在通过 adxl345 检测到 inactivity 时触发蜂鸣器并关闭继电器开关,而在检测到 activity 时执行相反的操作。 我在下面提供我的程序代码。检查并帮助我纠正这个问题以及您可能在我的程序中发现的任何其他问题。
#include <SPI.h>
int cs = 10;
int intr = 2;
int buzzer = 4;
int relay = 5;
int su = 1;
int intr1
pinmode (buzzer,OUTPUT);
pinmode (relay,OUTPUT);
char POWER_CLT = 0*2D
char DATA_FORMAT = 0*31
char DATAX0 = 0*32
char DATAX1 = 0*33
char DATAY0 = 0*34
char DATAY1 = 0*35
char DATAZ0 = 0*36
char DATAZ1 = 0*37
char THRESH_ACT = 0*24
char THRESH_INACT = 0*38
char TIME_INACT = 0*26
char INT_ENABLE = 0*2E
char INT_MAP = 0*2F
char ACT_INACT_CTL = 0*27
char INT_SOURCE = 0*30
char values[10];
char output[20];
int x, y, z;
char inactivityevent = 0;
void setup()
{
SPI.begin();
SPI.setDataMode(SPI_MODE3);
Serial.begin(9600);
pinMode(cs,OUTPUT);
digitalWrite(cs, HIGH);
attachInterrupt(digitalpintointerrupt(intr),interruptHandler,RISING);
writeRegister(DATA_FORMAT,0*01);
writeRegister(POWER_CTL,0*08);
writeRegister(INT_MAP,0*F7 && 0*EF);
writeRegister(THRESH_INACT,1);
writeRegister(TIME_INACT,0);
writeRegister(ACT_INACT_CTL,0*0F);
writeRegister(INT_ENABLE,0*08);
readRegister(INT_SOURCE,1,VALUES);
}
void interrupHandler()
{
read register (INT_SOURCE,1,values);
}
void loop()
{
intr1=digitalread(intr);
if ( intr1==high)
{
read register(DATAX0,6,values);
x = ((int)values[1]<<8|(int)values[0]);
y = ((int)values[3]<<8|(int)values[2]);
z = ((int)values[5]<<8|(int)values[4]);
if ( x<=15 && x>=-15 && y<=10 && y>=-10 && z>=75 && z<=90)
{
digitalwrite(buzzer,HIGH);
digitalwrite(relay,LOW);
}
else
{
for (int i=0;i<=90;i++)
{
delay (2000);
if (intr == LOW)
{ break(); }
if (i==90)
digitalwrite(relay,LOW);
}
}
while (su=1)
{
if (intr==LOW)
{
digitalwrite(buzzer,LOW);
digitalwrite(relay,HIGH);
break();
}
}
}
}
对于程序中的所有 0*nn
值,将它们替换为 0xnn
。确保每一行都以分号结尾(例如,第 7、10-24 行)。在第 40 行,检查包含 &&
的表达式,因为那是一个 "logical" 运算符,而您看起来想要一个 "bitwise" 运算符,所以将 &&
更改为 &
.在第45行,我认为你需要VALUES
小写,因为你试图填写的变量名称是小写的。
有几个地方你说 read register
但我认为你需要对那些地方使用 readRegister
。
检查第 78 行,其中 while 循环检查 su
的值。我认为你应该在这里有 while (su == 1)
而不是只有一个 =
。单个 =
正在设置值,但我认为您想改为检查该值,因此您需要 ==
。我确实注意到程序中没有任何内容可以从 1
更改 su
,因此它会一直持续到 intr
发生。
我发现了这个问题,因为它是错误消息的顶部 Google 结果,所以如果有人在这里结束,这是实际发生的事情。这一行是问题所在:
char INT_ENABLE = 0*2E
这应该是
char INT_ENABLE = 0x2E;
其中0x
表示2E
是一个十六进制数。然而,编译器将原始代码读取为 zero times 2E
,并将 2E
解释为尝试编写缺少指数的 floating-point 数字。
对于以前没有见过这个的人,你可以把像 200 万这样的数字写成 2e6
,这意味着 2 followed by 6 zeros
或 2 times 10 to the power of 6
。第一个数字被称为尾数,第二个是指数。因此错误消息 exponent has no digits
.
在我的例子中,问题是数字 1 看起来和 lower-case L 一样,我侄子有 mistyped/misread 一个变量 1ed
而不是 led
.