Amateur Radio Station R9AL Задиханов Радмир

      Учебный проект "Калькулятор на Arduino"

#include  // подключаем библиотеки 
#include  // подключаем библиотеки 
#include  // подключаем библиотеки 
LiquidCrystal_I2C lcd(0x38, 16, 2); //даем определение нашего дисплея

int num1, num2 ; // переменые цифра 1, цифра 2
float total; // результат
char operation, button; // знак и значение кнопки

const byte ROWS = 4;
const byte COLS = 4; //сколько линий и строк в клавиотуре

char keys[ROWS][COLS] = {
  {'1', '2', '3', '+'},
  {'4', '5', '6', '-'},
  {'7', '8', '9', '*'},
  {'C', '0', '=', '/'}
}; // массив с обозначением дя клавиш
byte rowPins[ROWS] = {9, 8, 7, 6}; //задаем пины клавиатуры
byte colPins[COLS] = {5, 4, 3, 2}; //задаем пины клавиатуры
Keypad customKeypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS); //создаем клавиатуру


void setup()
{
  lcd.init(); //Инициализирует дисплей
  lcd.backlight(); //включает подсветку
  lcd.setCursor(1, 0); // устанавливает курсор на 1 место 0 строки
  lcd.print("Calculator 1.0"); // выдает название
  delay(1000); // подождем секунду
  lcd.clear(); // очистим дисплей
  lcd.setCursor(2, 1); // установим курсор на 2 место 1 строки
  lcd.print("Make Radmir"); //создатель
}
void domath() //функция для вычеслений
{
  switch (operation)//если действие равно...
  {
    case '+': // сложению, то
      total = num1 + num2; // складываем числа
      break;

    case '-':// вычитанию, то
      total = num1 - num2; //вычитаем числа
      break;

    case '/':// делению, то

      total = (float)num1 / (float)num2; // делим числа
      break;

    case '*':// умножению, то
      total = num1 * num2; // умнажаем числа
      break;

  }
  lcd.clear(); //эти строки выводит результат
  lcd.setCursor(2, 1);
  lcd.print("Make Radmir");
  lcd.setCursor(0, 0); //ставим курсор на 0 сторчку 0 место
  lcd.print(total, 2); // выводим результат
}

void loop()
{


  while (1) //цикл 1 числа и знака
  {

    button = customKeypad.getKey(); // даем переменой значение нажатой кнопки
    if (button == 'C') // если было нажат "С" то очищаем значения
    {
      num1 = 0;
      num2 = 0;
      total = 0;
      operation = 0;
      lcd.clear();
      lcd.setCursor(2, 1);
      lcd.print("Make Radmir");
    }


    if (button >= '0' && button <= '9')// если нажата цифра, то
    {
      num1 = num1 * 10 + (button - '0'); //трюк для значения 1 числа
      lcd.setCursor(0, 0);
      lcd.print(num1);// выводим 1 цифру
    }

    if ( (button == '-' || button == '+' || button == '*' || button == '/'))//если нажат знак, то
    {
      operation = button; // даем переменой значиния знака
      lcd.print(operation);// выводм знак
      break;// выходим из цикла
    }

  }

  while (1)// цикл 2 числа и результата
  {

    if (button == 'C')//это нужно ведь если тот цикл очищаеться, то мы также отменяем этот цикл
      break; //выходим из цикла
    button = customKeypad.getKey();// даем значение кнопки
    if (button == 'C')// если хочет очистить значние
    {
      num1 = 0; //очищаем данные
      num2 = 0;
      total = 0;
      operation = 0;
      lcd.clear();
      lcd.setCursor(2, 1);
      lcd.print("Make Radmir");
      break; //выходим из цикла
    }
    if (button >= '0' && button <= '9' ) { //если цифра нажато, то
      num2 = num2 * 10 + (button - '0'); //также трюк для значения 2 числа
      lcd.clear(); // это нужно против повторения 2 числа
      lcd.setCursor(2, 1);
      lcd.print("Make Radmir");
      lcd.home();
      lcd.print(num1);
      lcd.print(operation);
      lcd.print(num2);// выводим 2 число
    }
    if (button == '=' && num2 != 0) // если нажат "=" и 2 число не равняеться 0, то
    {
      domath(); //запускаем функцию
      break; //выходим из цикла
    }
  }

  while (1)//цикл очитски полсе вывода
  {
    if (button == 'C')
      break; //выходим из цикла

    button = customKeypad.getKey();
    if (button == 'C')
    {
      lcd.clear();
      lcd.setCursor(2, 1);
      lcd.print("Make Radmir");
      lcd.setCursor(0, 0);
      num1 = 0; //очищаем данные
      num2 = 0;
      total = 0;
      operation = 0;
      break; //выходим из цикла
    }
  }

}


Тема форума: https://forum.msevm.ru/index.php?topic=11





Copyright © R9AL 2023 Все права защищены
Рейтинг@Mail.ru Яндекс цитирования