2016-11-08 15 views
0

現在、私はプロジェクトを進めています。私は、コンピュータ上のプログラムからシリアル経由で接続された核F303REマイクロコントローラを備えたラズベリーPIにUDPメッセージを送信しています。 マイクロコントローラには1つのセンサーがあり、1つは接続されています。センサーの電圧が特定の値以下に下がると、LEDが点灯します。 私のプログラムでは、ラズベリーのPIにUDPメッセージを送り、シリアルポートとマイクロコントローラに転送します。プログラム内のトリガー値"d"をに設定すると、1回だけ動作します。初めて設定した後、再び設定することはできません。私は今、一日を探していましたが、解決策は見つかりませんでした。誰でもここにアイデアがありますか?シリアル経由のマイクロコントローラへの設定値

#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()'では、あなたは '宣言するまた、 'utspenning()'を呼び出すときは? – Swanand

+0

scanfフォーマット指定子が疑わしいのですが、この関数はローカル変数として使用しています。 "%8s"や "%[^ \ r \ n]" 'が好きかもしれませんが、 ''の後ろに 's'が現れるはずはないと思います。印刷する浮動体を指定しますが、後続の引数にfloatの値を指定しないでください。 – kkrambo

+0

デバッガのコードを踏んだことはありますか?何が起こるのですか? – kkrambo

答えて

-1

私は「このマイクロまたはあなたが開発している環境に慣れていないメートル私はvolatile宣言する必要電圧1疑う。

+0

ハードウェアレジスタだけが、たとえばLEDのような「揮発性」を必要とします。おそらく 'DigitalOut'には' volatile'セマンティクスが含まれています。 – Potatoswatter

関連する問題