Basit Arduino Seri Aritmetik

Bir uçağın statik marjını kütle, moment ve kol hesaplarıyla hesaplamak için bir program geliştiriyorum. Esas olarak büyük sayılarla uğraşmak.

Aritmetik daha büyük sayılara doğru şekilde uygulanacak şekilde kodumu ayarlamakta zorluk çekiyorum. Şu ana kadar sahip olduğum işler ancak girdi 0-9 olduğunda çalışır. Aritmetik, ötesindeki haneleri hesaplayamaz.

Rakamları ayrı ASCII formatlarından istenen değerlerine dönüştürmek için ayrı değişkenlere ayırdığımı anlıyorum. Sorun, bu rakamları tekrar bir araya getirmektir.

Bunun muhtemelen çok basit olduğunu biliyorum ama uzun bir aradan sonra tekrar arduino alıyorum ve çok paslıyım.

İşte şimdiye kadar kodum:

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;
  }
}

Teşekkürler.

0
Daha ileri gitmeden önce bunu okuyun ve anlayın: hackingmajenkoblog .wordpress.com/2016/02/01/& hellip;
katma yazar Majenko, kaynak
@Majenko yapacak
katma yazar TestOChangeO, kaynak

1 cevap

Num1 = 0'ı tekrarlamak mı istiyorsun; döngüde()?

Döngü() yalnızca bir karakter okuyor çünkü loop (), Serial.available() ve Serial.read() öğesinden çok daha hızlı gerçekleşir.

Bir çeşit ayırıcı/basamaksız karakter aldığınızda raporlama ve temizleme yapın.

1
katma
Evet. Bu işlemi yapmak için son kod parçası etrafına başka bir {...} ekleyebilmelisiniz. Karakterlerin bir tampon belleğe kopyalanması ve ardından tüm mesajı aldığınızı öğrendikten sonra tampon üzerine atol (), atoi (), atof() ... vb. İşlemlerinin yapılması muhtemelen daha temiz olacaktır.
katma yazar Dave X, kaynak
Yani 'cevap = num1 + num2' den önce yerine getirilmesi için rakamsız bir karakter gerektiren bir ifade var?
katma yazar TestOChangeO, kaynak