Table of Contents

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:

  1. adunare (+) scadere (-)
  2. inmultire (*) impartire (/)
  3. 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

  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

calculator_analog.zip

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