martedì 5 febbraio 2013

CALCOLATRICE

dal sito di GianLuca Ciocia.

//GIANLU8CA CIOCIAhttp://ciocia.altervista.org/
#include <Keypad.h>
#include <LiquidCrystal.h>

LiquidCrystal lcd(8, 9, 10, 11, 12, 13);
const byte ROWS = 4; 
const byte COLS = 4; 
char keys[ROWS][COLS] = {
  {'1','2','3','C'},
  {'4','5','6','D'},
  {'7','8','9','E'},
  {'A','0','B','F'}
};

byte rowPins[ROWS] = { 3, 2, 1, 0}; 
byte colPins[COLS] = { 7, 6, 5, 4}; 

Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
static float lvalue;
static float rvalue;
static char oper;
static byte errcode;

void setup() 
{ lcd.begin(16,2);
  lcd.print("Calcolatrice 3.0");
  lcd.setCursor(0,1);
  lcd.print("PaulettGiankard");
  errcode = 0; }

float do_calc (float num1, float num2, char a_oper) 
    {if (errcode > 0)
        {return num1; }
      
     else switch (a_oper)
          { case 0:
              return num2;
              break;
            case 'C': 
              return (num1 + num2);
              break;
            case 'D': 
              return (num1 - num2);
              break;
            case 'E': 
              return (num1 * num2);
              break;
            case 'F':
              if (num2 != 0) 
                return (num1 / num2);   
              else 
                {errcode = 1;
                return 0;}
            break;}}

void print_result(float valore)
{ lcd.clear();
  if (errcode > 0)
      lcd.print("ERRORE");
  else
      lcd.print(valore); }

void loop() {
  lvalue = 0;
  rvalue = 0;
  oper = 'C';
  for (;;) 
  {
    char  key = keypad.getKey();
    if (key == 0) {
    } 
    else
      if ((key >= 'C') && (key <= 'F')) {
        lvalue = do_calc(lvalue, rvalue, oper);
        print_result(lvalue);
        rvalue = 0;
        oper = key;
      } 
      else
        if (key == 'B') {
          lvalue = do_calc(lvalue, rvalue, oper);
          print_result(lvalue);
          rvalue = 0;
          oper = 'C';
        }
        else
          if (key == 'A') { 
            lcd.clear();
            lvalue = 0;
            rvalue = 0;
            errcode = 0;
            oper = 'C';
            print_result(rvalue);
          }
          else {
            int number = key - 48;
            //qui andrebbe un controllo per evitare che l'utente
            //inserisca un numero eccessivo di cifre...
            rvalue = rvalue * 10 + number; 
            print_result(rvalue);
          }
  }
}

4 commenti:

  1. MOLTO BELLA E FUNZIONALE CONGRATULAZIONI, HO MODIFICATO IL DISPLAY CON SCHEDA I2C E 20 CARATTERI SU 2 LINEE

    RispondiElimina
  2. a me da risultati a caso

    RispondiElimina
  3. potresti postare i collegamenti che hai fatto tra il keypad arduino e lcd, per piacere

    RispondiElimina
  4. Ti chiedo scusa ma la passione per arduino mi è passata da molto tempo.

    RispondiElimina