Go Down

Topic: touchshield slide calculator (Read 420 times) previous topic - next topic

AaronD

hi i found this calculator code and i had to rewrite some code to make it work on the touchshield slide http://www.liquidware.com/shop/show/TSL/TouchShield+Slide+ and uses the Antipasto IDE http://www.liquidware.com/antipasto_arduino_ide. it only calculates 1x1 digit like 6+7 or 9x5 (which isn't helpful). so i need help changing the code so it can calculate as more digits like 24 + 12 or 150 / 10. here's the code:
Code: [Select]
void setup(){
  background(0);
  stroke(100);
  rect(74,40,178,37);
 
  rect(35,91,50,30);
  text("7",59,107,15);
  rect(97,91,50,30);
  text("8",122,107,15);
  rect(159,91,50,30);
  text("9",185,107,15);
 
  rect(35,129,50,30);
  text("4",59,145,15);
  rect(97,129,50,30);
  text("5",122,145,15);
  rect(159,129,50,30);
  text("6",184,145,15);
 
  rect(35,167,50,30);
  text("1",61,183,15);
  rect(97,167,50,30);
  text("2",122,183,15);
  rect(159,167,50,30);
  text("3",184,183,15);
 
  rect(35,205,50,30);
  text("C",59,221,15);
  rect(97,205,50,30);
  text("0",122,221,15);
  rect(159,205,50,30);
  text("=",184,220,18);
 
  line(224,91,224,236);
 
  rect(240,91,50,30);
  text("/",265,106,10);
  rect(240,129,50,30);
  text("x",264,141,23);
  rect(240,167,50,30);
  text("-",265,182,20);
  rect(240,205,50,30);
  text("+",265,220,17);
}

void loop(){
unsigned char auxCalc=0;
  char number=0,sums=0;
  char num1[2]={0};
  char num2[2]={0};
  char result[4]={0};
  char operation[2]={0};

  while(1){
       gettouch();     
   if(mouseY>91 & mouseY<121){      //first row
       if(mouseX>35 & mouseX<85){
        auxCalc=7;
      }else if(mouseX>97 & mouseX<147){
        auxCalc=8;
      }else if(mouseX>160 & mouseX<210){
        auxCalc=9;
      }else if(mouseX>240 & mouseX<270){
        auxCalc='/';
      }
    }else if(mouseY>129 & mouseY<159){ //second row
     if(mouseX>35 & mouseX<85){
        auxCalc=4;
      }else if(mouseX>97 & mouseX<147){
        auxCalc=5;
      }else if(mouseX>160 & mouseX<210){
        auxCalc=6;
      }else if(mouseX>240 & mouseX<270){
        auxCalc='x';
      }               
    }else if(mouseY>167 & mouseY<197){ //third row
      if(mouseX>35 & mouseX<85){
        auxCalc=1;
      }else if(mouseX>97 & mouseX<147){
        auxCalc=2;
      }else if(mouseX>160 & mouseX<210){
        auxCalc=3;
      }else if(mouseX>240 & mouseX<270){
        auxCalc='-';
      }                     
    }else if(mouseY>205 & mouseY<235){ //fourth row
      if(mouseX>35 & mouseX<85){
        auxCalc='E';
        stroke(0);
       rect(90,45,146,22);
      }else if(mouseX>97 & mouseX<147){
        auxCalc=0;
      }else if(mouseX>160 & mouseX<210){
        auxCalc='R';
      }else if(mouseX>240 & mouseX<270){
        auxCalc='+';
    }else{
      auxCalc='N';
     }
    }     
    if(number==0){      //get first number
      if(auxCalc<10){
        num1[0]=auxCalc+0x30;       
      }else{
        if(auxCalc=='E'){                 
          num1[0]=0x30;               
        }else{                 
          operation[0]=auxCalc;
          if(operation[0]!='R' & operation[0]!='N' & operation[0]!='I'){
            number++;
            stroke(0);
            rect(90,45,45,25); 
            delay(200);
           stroke(100);
            text(operation,106,53,10,10);
          }                                                     
        }                           
      }
      stroke(100);
      text(num1,94,53,10,10);
      num2[0]=0;
    }else if (number==1){       //get second number
      if(auxCalc<10){
        num2[0]=auxCalc+0x30;             
      }else{
        if(auxCalc=='E'){
            num2[0]=0x30;
        }else{                                                         
          if(auxCalc=='R'){
            switch(operation[0]){
              case '+':
                sums=(num1[0]-0x30);
                sums+=(num2[0]-0x30);                         
              break;
              case '-':
                sums=(num1[0]-0x30);
                sums-=(num2[0]-0x30);                         
              break;
              case 'x':
                sums=(num1[0]-0x30);
                sums*=(num2[0]-0x30);                         
              break;
              case '/':
                sums=(num1[0]-0x30);
                sums/=(num2[0]-0x30);                                                 
              break; 
              default:
                sums=(num1[0]-0x30);
                sums+=(num2[0]-0x30);
              break;                                                               
            }       
            if(sums<0){
              result[0]='-';
              result[1]=(-1*(sums/10))+0x30;
              result[2]=(-1*(sums%10))+0x30;
            }else{
              result[0]=' ';                                   
              result[1]=(sums/10)+0x30;
              result[2]=(sums%10)+0x30;
            }       
            noStroke();
            rect(113,45,10,15);
            stroke(100);
            text(num2,118,53,10,10);
            text("=\0",130,53,10,10);
            stroke(0);
            rect(210,50,25,20);
            stroke(100);
            text(result,198,60,14,14);                                             
            number++;   
            delay(200);                                                                 
          }                                                                       
        }                             
      }
      if(number<2){
        stroke(100);
        text(num2,118,53,10,10);
      }
    }else{
      number=0;
    }           
  } 
}

nilton61

I would make a decent calculator and have it working before delving into a fancy UI

Go Up