Mănăilă Bogdan: Calculator Aritmetic

Introducere

  • Nume: Mănăilă Bogdan
  • Grupa: 333CB
  • Îndrumător: Daniel Dosaru

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

Listă piese:

  • atmega328p microcontroller board
  • 12c 1602 led interface
  • tastatură matriceală 4×4 cu butoane
  • buzzer
  • baterie 9V
  • rezistenta 100 Ω
  • switch on/off

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

  1. LiquidCrystal_I2C
  2. Keypad
  3. EasyBuzzer
  4. 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:

  • D - sterge ultimul caracter din ecuatie
  • C - schimba modul de operare pentru x si y
  • x - y :
  1. adunare (+) scadere (-)
  2. inmultire (*) impartire (/)
  3. ridicare la putere (^) logaritm (L)
  • = - inlocuieste ecuatia cu rezultatul
  • . - incepe partea fractionara a numarului
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

  • prima linie: ultimele 16 caractere din ecuatie
  • a doua linie: rezultatul ecuatiei / mesajul de eroare
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:
  1. daca a trecut un interval de inactivitate, utilizatorul este intrebat daca vrea sa continue
  2. daca nu primeste raspuns, se reseteaza ecranul
  3. daca primeste raspuns se continua calculul
  4. 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

pm/prj2024/ddosaru/bogdan.manaila.txt · Last modified: 2024/05/26 23:44 by bogdan.manaila
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0