Калькулятор

,

Добрый вечер!
Пытаюсь доделать калькулятор
Не могу сделать знак корень :cry:
Кто-нибудь знает как можно это тут сделать?

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#include <math.h>

LiquidCrystal_I2C lcd(0x27,16,2);

byte customChar[] = {
  B00000,
  B00011,
  B00010,
  B00010,
  B11010,
  B01110,
  B00100,
  B00000
};

const char keys[4][4]={{'1','2','3','+'},
                       {'4','5','6','-'},
                       {'7','8','9','*'},
                       {'√','0','=','/'} // Вот тут что надо написать вместо √?
};
byte rows[] = {11, 10, 9, 8}; 
byte cols[] = {7, 6, 5, 4};                                                                                                                                                                                                                     
Keypad keypad1 = Keypad( makeKeymap(keys), rows, cols, 4, 4); 

int pos=0;
int endkey=0;
char buf[32];

void setup()
{
  lcd.createChar(0, customChar);
  Serial.begin(9600);
  lcd.init();
  lcd.backlight();
  lcd.cursor();
  for(int i=0;i<32;i++)
     buf[i]=0;
}


void loop() {
  char key = keypad1.getKey();
  if (key){
    Serial.print(key,HEX);Serial.println();
    addkey(key);
  }
}

void addkey(char k) {
  switch(k) {
    case '+': if(endkey==1) {
                 buf[pos]=k;tolcd(k);endkey=2;
              }
        break;
    case '-': if(endkey==1) {
                 buf[pos]=k;tolcd(k);endkey=2;
              }
        break;
    case '*': if(endkey==1) {
                 buf[pos]=k;tolcd(k);endkey=2;
              }
        break;
    case '/': if(endkey==1) {
                 buf[pos]=k;tolcd(k);endkey=2;
              }
        break;
    case '{': if(endkey==1) {
                 buf[pos]=k;tolcd(k);
                 getsumma();
                 endkey=3;
              }
        break;
    case '=': if(endkey==1) {
                 buf[pos]=k;tolcd(k);
                 getsumma();
                 endkey=3;
              }
        break;
    default : if(endkey==3) {
                 startover();pos=0;}
              buf[pos]=k;tolcd(k);endkey=1;
        break;
  } 
}

void tolcd(char k) {
  lcd.setCursor(pos%15,pos/15);
  lcd.print(k);
  pos=pos+1;
}

void getsumma() {
   String number1="";
   String number2="";
   char d;
   int i;
   float summa;
   for(i=0;i<pos;i++) {
     if(buf[i]>=0x30 && buf[i]<=0x39)
        number1+=buf[i];
     else
        break;   
   }
   Serial.print("number1=");Serial.print(number1.toInt());
   d=buf[i];
   Serial.print("  d=");Serial.println(buf[i]);
   for(i=i+1;i<pos;i++) {
     if(buf[i]>=0x30 && buf[i]<=0x39)
        number2+=buf[i];
     else
        break;   
   }
   Serial.print("number2=");Serial.print(number2.toInt());
   switch(d) {
      case '+': summa=number1.toInt()+number2.toInt();
         break;
      case '-': summa=number1.toInt()-number2.toInt();
         break;
      case '*': summa=number1.toInt()*number2.toInt();
         break;
      case '/': summa=number1.toInt()/number2.toInt();
         break;
      case '{': summa=sqrt(number1.toInt());
         break;
      default: 
         break;      
   }
   lcd.setCursor(0,1);
   lcd.print(summa);
}

void startover() {
   for(int i=0;i<=pos;i++) {
      buf[i]=0;
   }
   lcd.clear();  
}

А в прошлой теме ну никак продолжить нельзя было?

Это уже новый калькулятор. Тот уже доделали :slight_smile:

А зачем заменять этот знак? В utf8 это и есть символ квадратного корня.

https://forum.arduino.ru/t/kalyakulyator/16593/28