Mănăilă Bogdan: Calculator Aritmetic
Introducere
Prezentarea pe scurt a proiectului:
Calculatorul permite rezolvarea operațiilor de adunare, scădere, înmulțire, împărțire, exponentiere, logaritm și anunță utilizatorul dacă se încearcă o operație „ilegală”. Dupa o perioada de inactivitate, utilizatorul este intrebat daca doreste sa continue. Pentru cazul afirmativ se apasa orice buton. Daca mai trece un interval si nu s-a confirmat continuarea, calculatorul se reseteaza
Scopul lui este de a putea face operații aritmetice
Ideea de la care am pornit a fost un calculator aritmetic normal
El este util atunci când ai nevoie să faci calcule, dar nu ai telefonul la îndemână (în timpul unui test)
Descriere generală
Hardware Design
Schema cablaj
Schema electrica
Poze cablaj
Software Design
Implementare
Codul foloseste un singur firmware - Arduino Nano - ce realizeaza comunicarea dintre componente si calculeaza rezultatul dorit.
Biblioteci
LiquidCrystal_I2C
Keypad
EasyBuzzer
TimerOne
- biblioteci.cpp
#include <Arduino.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#include "TimerOne.h"
#include "EasyBuzzer.h"
Tastatura
1 | 2 | 3 | D |
4 | 5 | 6 | x |
7 | 8 | 9 | y |
C | 0 | . | = |
Functionalitati:
adunare (+) scadere (-)
inmultire (*) impartire (/)
ridicare la putere (^) logaritm (L)
- tastatura.cpp
const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
//define the characters on the buttons of the keypad
char keys[ROWS][COLS] = {
{'1','2','3','D'},
{'4','5','6','x'},
{'7','8','9','y'},
{'C','0','.','='}
};
byte rowPins[ROWS] = {6, 7, 8, 9}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {5, 4, 3, 2}; //connect to the column pinouts of the keypad
// Create the Keypad object
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
Ecran
- ecran.cpp
// set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);
Variabile globale
- global.cpp
char prev; // previous character
bool point = false; // check if there is a point in the number
char op[50]; // the operation
char rez[50]; // the result
int mode = 0; // mode of operation
char x = '+'; // first operator
char y = '-'; // second operator
int ct = 0; // character count
int intrerupere = 0; // active/inactive interrupt
Structuri
- struct.cpp
typedef struct cor {
char x;
double y;
} __attribute__((packed)) char_double;
Functii
bzero - reinitializeaza un vector char
timerIsr - incrementeaza variabile de inactivitate
check - verifica validitatea caracterului dat (true - adauga caracterul; false - mesaj de eroare + semnal buzzer)
solve - verifica daca ecuatia poate fi calculata si daca da, calculeaza rezultatul
help - calculeaza rezultatul
setup - seteaza intervalul pentru intreruperi pe obiectul Timer1, initializeaza obiectelel pentru ecran, tastatura si buzzer
loop:
daca a trecut un interval de inactivitate, utilizatorul este intrebat daca vrea sa continue
daca nu primeste raspuns, se reseteaza ecranul
daca primeste raspuns se continua calculul
daca este in intervalul de timp se verifica daca a fost apasata o tasta, o identifica si realizeaza operatiile specifice ei
Rezultate Obţinute
Concluzii
Download
Jurnal
Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.
Bibliografie/Resurse
Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe *Resurse Software* şi *Resurse Hardware*.
Export to PDF