ir kalkulator

Hei jeg er ny på arduino så beklager for rotete programering.

jeg sliter med et program som ikke vil gå inn i casene sine.
får bare tall en vil ikke gå inn i secondnumber() funskjonen.

noen som har noen ide?

#include <IRremote.h>
#include <IRremoteInt.h>


#define CHminus 16753245
#define CH  16736925
#define CHPluss 16769565
#define skipleft 16720605
#define skipRight 16712445
#define play/pause 16761405
#define minus   16769055
#define  pluss  16754775
#define    nul 16738455
#define onehundo 16750695
#define twohundo 16756815
#define one  16724175
#define two 16718055
#define three 16743045
#define four 16716015
#define five 16726215
#define six  16734885
#define seven 16728765
#define eight 16730805
#define nine  16732845


const int RECV_PIN = 11; //leser ir-sensor

IRrecv irrecv(RECV_PIN); //lager irrecv objekt

decode_results results; //lagrer resultat fra dekodet signal



int tall_1 = 0;  //lager variable
int tall_2 = 0;
long total = 0;

char nyttTall; //lagrer tall
char annetTall;



void setup()
{
  Serial.begin(9600); //starter serialport
  irrecv.enableIRIn(); //starter ir motager
  Serial.println(" Velkommen_til_kalkulering_på_avstand "); //skriver en hyggelig melding til bruker
}

void loop() {
  nyttTall = 'U';
  nummer (); //kaller funskjonen nummer hvor alle koder fra ir-kontroll er lagret


  // results.value = nyttTall ; //skal lese det som kommer inn fra ir

  //hvis man trykker på fjernkontroll så går man inn her
  if (Serial.available() > 0) { //leter etter lagrede tall større en 0
    nyttTall = Serial.read(); //skal lese tall som kommer inn
}


  switch (nyttTall) {   //ser på tallene i results. hvis det er tall der begynner det ¨kjøre caser

    case 48 ... 57: // samler sammen verdier til en av tegnene er lest "+-*/"


      tall_1 = tall_1 * 10 + (nyttTall - '0'); //tar imot ett tall og hvis tallet er større en ti ganges det nye tallet med ti. så hver gang det flyttes til høyre får det en tier med seg

      Serial.print("tall 1 = ");
      Serial.println(tall_1); //Skriver det første tallet
      break;

    case pluss:

      //if ( tall_1 > 0) {
      //tall_1 = (total != 0 ? total : tall_1); //hvis totalen er forskjellig fra null, totalen hvis ikke tall_1

      SecondNumber(); // samler inn neste tall. tall_2
      Serial.print("tall_2 = ");
      Serial.print(tall_2);
      total = tall_1 + tall_2;

      Serial.print(total);
      tall_1 = 0, tall_2 = 0; // nullstiller verdiene tilbake til null for neste runde
      break;
  }


  /*case 'F':
  if(nyttTall<48 && nyttTall>57){
  Serial.print("error");
  }*/
  //
  //        case 'C':
  //      if ("clear") {
  //        total = 0;
  //        Serial.println("cleared");
  //      }
  //
  //      break;
  //}


  //irrecv.resume();

}

//}
long SecondNumber()

{

  //while ( true )
  //{
  //annetTall = Serial.read();

  if (annetTall >= '0' && annetTall <= '9')
  {
    tall_2 = tall_2 * 10 + (annetTall - '0');
    Serial.println("tall_2");
    return tall_2;
  }

}
/* if (tall_1 && tall_2 && '=') { //hvis tall_1 og tall_2 i tillegg til = er trykket returnere total
   Serial.print("svar");
   return total; //returnerer totalen

   break;
 }*/

//}
//}

//dekoder ir signalet
void nummer() {
  if (irrecv.decode(&results) == true ) {
    if (results.value == 16738455) {
      // Serial.print("0");
      nyttTall = '0';

    }

    if (results.value == 16724175) {
      //Serial.print("1");
      nyttTall = '1';
      annetTall = '1';
    }
    if (results.value == 16718055) {
      // Serial.print("2");
      nyttTall = '2';
      annetTall = '2';
    }
    if (results.value == 16743045) {
      //Serial.print("3");
      nyttTall = '3';
      annetTall = '3';
    }
    if (results.value == 16716015) {
      // Serial.print("4");
      nyttTall = '4';
      annetTall = '4';
    }
    if (results.value == 16726215) {
      // Serial.print("5");
      nyttTall = '5';
    }
    if (results.value == 16734885) {
      // Serial.print("6");
      nyttTall = '6';
    }
    if (results.value == 16728765) {
      // Serial.print("7");
      nyttTall = '7';
    }
    if (results.value == 16730805) {
      // Serial.print("8");
      nyttTall = '8';
    }
    if (results.value == 16732845) {
      //Serial.print("9");
      nyttTall = '9';
    }
    if (results.value == 16754775) {
      Serial.print("+");
      nyttTall = '+';
    }
    if (results.value == 16761405) {
      Serial.print("=");
      nyttTall = '=';
    }
    if (results.value == 16753245) {
      Serial.print("clear");
      nyttTall = 'C';
    }

    irrecv.resume();
  }
}

Rodet - jo tak. :wink: Det er ikke et problem at skrive rodet, undtagen når man vil fikse det. Det vil derfør være værd at overveje om du bør begynde forfra.

case pluss: er forkert skulle være case '+' :

Det er årsgen til du ikkek an komme ind i second_number. Det med at gemme både nyttTal og andetTal i samme number() er forkert. Når du er i Second number skal du jo i samme løkke som før kalde number() for at få nyttTal.