2016-11-08 33 views
0

我目前正在开发一个项目。我从计算机上的程序发送UDP消息给一个通过串口连接核心F303RE微控制器的树莓派PI。微控制器有一个传感器和一个LED连接。如果传感器电压下降到特定值以下,则LED将点亮。 从我的程序中,我发送了一条UDP消息给树莓派,后者将它转发给串口和微控制器。设置触发值“d”在程序只能一次。第一次设置后,它不会让我再次设置它。我一直在寻找一天,但还没有找到任何解决方案。这里有人有一个想法?通过串行设置微控制器的值

#include "mbed.h" 
DigitalOut Vcc(PA_0); 
AnalogIn aInnA1(PA_1); 
DigitalOut Gnd(PA_4); 
DigitalOut myled(PA_6); 

static float voltage1=0.0f; 


void utspenning() 
{ 
float voltage1 = aInnA1*3.3f; 
printf("$VOLTAGE,A1,%.2f\r\n"); // This sends value back to the program 
} 

int main() 
{ 
Vcc=1; Gnd=0; 
char e [9]; 

while(1) 
{ 
scanf("%[^\r\n]s",e); // Reads my input from the program 
float d = atof(e); 

    if (voltage1 > d) 
     { 
        myled = 1; 
     } 
    if (voltage1 < d) // 
      { 
       myled = 1; 
       wait(0.1); 
       myled = 0; 
       wait(0.1); 
      } 
}} 
+0

在你的函数'无效utspenning()',您声明'电压1“,因此在这个函数中,你用它作为局部变量,值不会在'静态浮动电压1'中更新,此外,你什么时候调用'utspenning()'?? – Swanand

+0

scanf格式说明符是可疑的。也许你想''%8s“'或'”%[^ \ r \ n]“',但我不认为'''会出现在']后面。对printf的调用似乎也是错误的。您指定要打印的浮点数,但不在随后的参数中提供浮点数的值。 – kkrambo

+0

你是否已经完成了调试器中的代码?怎么了? – kkrambo

回答

-1

我“不熟悉,这条微或者你正在开发的环境,但我怀疑电压1需要声明挥发。

+0

只有硬件寄存器需要'volatile',例如LED。据推测'DigitalOut'包含'volatile'语义。 – Potatoswatter