単純なArduino連続算術

私は、質量、モーメント、および腕の計算を通して、航空機の静的マージンを計算するプログラムを開発しています。本質的に大きな数字を扱う。

私は途中でコードを設定するのが難しいので、算術演算がより大きな数に正しく適用されます。私がこれまで行ってきたことは、入力が0〜9のときだけです。算術演算ではそれ以上の桁数が計算されません。

私は数字をASCII形式から意図した値に変換するために別々の変数に分割していることを理解しています。問題はそれらの数字を一緒に戻すことにあります。

私はこれがおそらく非常にシンプルだと知っていますが、私は長い休憩のあとarduinoをもう一度ピックアップしており、とても錆びています。

これまでのところ私のコードです:

long batterymoment,num1,num2,answer;
int batterymass = 720;
int batteryposition;
boolean mySwitch = false;

void setup() {
  Serial.begin(9600);
  num1=0;
  num2=0;
  Serial.println("Enter battery position");
}

void loop() {
  while (Serial.available()){
   batteryposition = Serial.read();

   if(batteryposition>47 && batteryposition<58){  
     if(!mySwitch){
       num1=(num1*10)+(batteryposition-48);
     }else{
       num2=(num2*10)+(batteryposition-48);
     }
   }

   answer=num1+num2;
   batterymoment=answer*batterymass;
   Serial.print("Battery moment is: ");
   Serial.println(batterymoment);
   num1=0;
   num1=0;
   mySwitch=false;
  }
}

ありがとう。

0
あなたがこれ以上読む前にこれを読んで理解してください: hackingmajenkoblog .wordpress.com/2016/02/01 /&hellip;
追加された 著者 Majenko,
@Majenkoを行います
追加された 著者 TestOChangeO,

1 答え

num1 = 0を繰り返すことを意味しますか?ループ中()?

loop()はSerial.available()およびSerial.read()よりもはるかに高速に実行されるため、loop()ごとに1文字しか読み取れません。

ある種類のセパレータ/非桁の文字を受け取ったときに、レポートとクリアを行います。

1
追加された
はい。この作業をするために、コードの最後の塊の周りにelse {...}を追加することができます。バッファーに文字をコピーしてから、メッセージ全体を知っていれば、atol()、atoi()、atof()...などをバッファー上で行う方がきれいでしょう。
追加された 著者 Dave X,
「答え= num1 + num2」の前に非桁の文字を満たさなければならないという声明がありますか?
追加された 著者 TestOChangeO,