Eenvoudige Arduino seriële rekenkunde

Ik ontwikkel een programma om de statische marge van een vliegtuig te berekenen door middel van berekeningen van massa, moment en arm. In wezen omgaan met grote aantallen.

Ik heb moeite om mijn code zo in te stellen dat de rekenkunde correct wordt toegepast op grotere getallen. Wat ik tot nu toe heb gedaan, werkt alleen als de invoer 0-9 is. De rekenkunde slaagt er niet in om cijfers verder te berekenen.

Ik begrijp dat ik de cijfers in aparte variabelen onderverdeel, zodat ze van het ASCII-formaat naar de gewenste waarde worden omgezet. Het probleem zit in het weer bij elkaar brengen van die cijfers.

Ik weet dat dit waarschijnlijk heel eenvoudig is, maar ik neem Arduino weer op na een lange pauze en ik ben erg roestig.

Hier is mijn code tot nu toe:

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

Bedankt.

0
Lees dit en begrijp dit voordat je verder gaat: hackingmajenkoblog .wordpress.com/2016/02/01/& hellip;
toegevoegd de auteur Majenko, de bron
zal @Majenko doen
toegevoegd de auteur TestOChangeO, de bron

1 antwoord

Bedoel je om num1 = 0 te herhalen; in loop ()?

Het leest slechts één karakter per lus() omdat lus() veel sneller gebeurt dan Serial.available() en Serial.read ().

Voer de rapportage en vereffening uit wanneer u een soort scheidingsteken/niet-cijferig teken ontvangt.

1
toegevoegd
Ja. Je zou een else {...} rond het laatste stuk code kunnen toevoegen om dit te laten werken. Het zou waarschijnlijk schoner zijn om de karakters in een buffer te kopiëren en dan atol (), atoi (), atof() ... enz. Op de buffer te doen nadat je weet dat je het hele bericht hebt.
toegevoegd de auteur Dave X, de bron
Dus je bedoelt een verklaring die een niet-cijferig karakter vereist voordat 'answer = num1 + num2' wordt voldaan?
toegevoegd de auteur TestOChangeO, de bron