СДЕЛАЙТЕ СВОИ УРОКИ ЕЩЁ ЭФФЕКТИВНЕЕ, А ЖИЗНЬ СВОБОДНЕЕ

Благодаря готовым учебным материалам для работы в классе и дистанционно

Скидки до 50 % на комплекты
только до

Готовые ключевые этапы урока всегда будут у вас под рукой

Организационный момент

Проверка знаний

Объяснение материала

Закрепление изученного

Итоги урока

Методическая разработка "Проект "Arduino. Матричный калькулятор"

Категория: Информатика

Нажмите, чтобы узнать подробности

В данной разработке представлена работа с платой Arduino, серийным портом, матричной клавиатурой и листинг программы калькулятора на их основе с комментариями.

Просмотр содержимого документа
«Методическая разработка "Проект "Arduino. Матричный калькулятор"»

МУНИЦИПАЛЬНОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ДОПОЛНИТЕЛЬНОГО ОБРАЗОВАНИЯ

«ЦЕНТР ДЕТСКОГО ТЕХНИЧЕСКОГО ТВОРЧЕСТВА»










Методическая разработка

«Проект «Матричный калькулятор»

к дополнительной общеобразовательной

общеразвивающей программе

технической направленности

«Лаборатория робототехники»



Возраст детей: 10-15 лет









Автор: Костычев Вадим Александрович















г. Заречный Пензенской области

2022 г.

В ходе изучения робототехники, схемотехники и программирования на основе платформы Arduino большую роль играет разработка проектов. Они позволяют отработать как навыки программирования, так и сборки электрических цепей устройств. Данная разработка призвана отработать навыки разработки алгоритмов и работы с матричной клавиатурой.

Целью данной разработки является повышение интереса учащихся к техническому творчеству посредством работы с платформой Arduino.

Данная методическая разработка используется как обучающий пример для работы по дополнительной общеобразовательной общеразвивающей программе технической направленности «Лаборатория робототехники». С их помощью учащиеся смогут понять как подключать, работать с матричной клавиатурой и библиотекой «SimpleKeypad», потренируются в написании алгоритмов.

Для выполнения данного проекта необходимо правильно подключить пины клавиатуры к плате Arduino. При неверном подключении значения нажатия на кнопки будут непредсказуемыми.

Далее необходимо подключить библиотеку SimpleKeypad и создать несколько массивов: пины строк клавиатуры, пины столбцов и многомерный массив значений кнопок. А также указать имя клавиатуры, и параметры для работы библиотеки.

В основной программе имеет смысл создать два цикла while: первый цикл принимает значение переменной a и математический оператор, второй – принимает оператор b и вызывает функцию, которая выполняет расчёты.

Эта функция работает на основе оператора switch и полученному математическому оператору. При выполнении функции все оператору обнуляются.

Важный алгоритм – введение числа в переменные a и b. Когда мы приняли символ от 0 до 9, мы должны переменную на 10, чтобы на конце оказался 0, а затем получив значение (номер) символа, через вычитание из него символа «0», сложить его с числом. Затем мы выводим полученное значение по одному, чтобы числа переменной не повторялись.













Принципиальная схема



Листинг программы

#include // подключение библиотеки для работы с матричной клавиатурой


#define KP_ROWS 4 // количество строк

#define KP_COLS 4 // количество столбцов


byte colPins[4] = {8, 9, 10, 11}; // уакзываем пины подключения колонок

byte rowPins[4] = {7, 6, 5, 4}; // указываем пины подключения строк


long a, b, res; // создаем переменные первой, второй переменной и результата

char key, operation; // и создаем символьные переменные для вводимого символа и оператора


char keys[KP_ROWS][KP_COLS] = { // создаем массив со значениями кнопок

{'1', '2', '3', '+'},

{'4', '5', '6', '-'},

{'7', '8', '9', '*'},

{'C', '0', '=', '/'}

};


SimpleKeypad pad((char*)keys, rowPins, colPins, 4, 4); // указываем библиотеке пины строк и колонок клавиатуры


void setup() {

Serial.begin(9600); // подключаем серийный порт

}


void loop() {

while (1) { // создаем цикл, который прервется только после получения мат. оператора

key = pad.getKey(); // примем значение с клавиатуры

if (key == 'C') { // если приняли значение 'C' - обнуляем все переменные

a = 0;

b = 0;

res = 0;

operation = 0;

}


if (key = '0' and key

a = a * 10 + (key - '0'); // переводим значение в число вычитанием символа '0', добавляем его в конец переменной a

Serial.print(key); // выводим принятое значение в серийный порт

}


if (a != 0 and (key == '-' or key == '+' or key == '*' or key == '/')) { // если уже ввели значение a, а затем мат. оператор

operation = key; // сохранили мат. оператор

Serial.print(operation); // вывели оператор на экран

break; // завершили цикл while

}

}


while (1) { // открыли новый цикл для того, чтобы ввести переменную b

key = pad.getKey(); // примем значение с клавиатуры

if (key == 'C') { // если приняли значение 'C' - обнуляем все переменные

a = 0;

b = 0;

res = 0;

operation = 0;

break; // завершаем цикл, возвращаемся в первый while

}

if (key = '0' and key

b = b * 10 + (key - '0'); // переводим значение в число вычитанием символа '0', добавляем его в конец переменной b

Serial.print(key); // выводим принятое значение в серийный порт

}

if (key == '=' and b != 0) { // если нажата кнопка равно, и уже введена переменная b

domath(); // воспользуемся функцией domath

break; // и завершим цикл while, вернемся в начало программы

}

}

}


void domath() { // создадим функцию для рассчета результата

switch (operation) { // воспользуемся оператором switch, он по аргументу operation опеределит операцию

case '+': // при сложении

res = a + b; // складываем a и b в переменную res

Serial.print('='); // выводим знак равно

Serial.println(res); // выводим результат

break; // завершаем работу оператора switch


case '-': // Вычитание

res = a - b; // вычитаем b из a в переменную res

Serial.print('='); // выводим знак равно

Serial.println(res); // выводим результат

break; // завершаем работу оператора switch


case '*':

res = a * b; // умножаем a на b и присваиваем значение переменной res

Serial.print('='); // выводим знак равно

Serial.println(res); // выводим результат

break; // завершаем работу оператора switch


case '/': // Деление

double res = (float)a / (float)b; // создаем дробь res и делим переменные, как дроби

Serial.print('='); // выводим знак равно

Serial.println(res); // выводим результат

break; // завершаем работу оператора switch

}

a = 0; // обнуляем переменные для следующей записи

b = 0;

res = 0;

operation = 0;

}