This is an old revision of the document!
What it does: The project is a functional, portable pocket calculator capable of evaluating basic arithmetic expressions (addition, subtraction, multiplication, and division). It takes input from a 4×4 matrix keypad, displays the operations and results on an LCD screen, and uses a passive buzzer to provide audio feedback for key presses and errors.
Its purpose: To create a reliable and user-friendly calculation tool while demonstrating the practical integration of multiple hardware peripherals and essential software concepts (such as debouncing, state machines, and I2C communication).
The starting idea: Standard breadboard calculators or simple digital projects often lack tactile or audio feedback, leading to missed inputs or double-presses. We wanted to solve this by adding an auditory layer that confirms user actions, making the device feel more like a finished commercial product.
Why it is useful: For us, it provides a great learning platform for handling matrix inputs, string parsing, and hardware timers on a microcontroller. For the user, the audio feedback drastically reduces input errors, making it more reliable than a silent keypad interface.
The system is built around a central microcontroller unit (MCU). The architecture consists of three main external modules interacting with the processing unit:
Input Module (4×4 Keypad): Connected via GPIO pins. It sends raw row/column data to the microcontroller when a key is pressed.
Visual Output Module (I2C LCD): Connected via the I2C bus (SDA/SCL pins). It receives parsed strings from the MCU to display the current operands, mathematical operators, and the final result.
Audio Output Module (Passive Buzzer): Connected via a PWM-capable pin. The MCU uses timers to generate specific frequencies (tones) depending on the context: a short beep for a valid key press, and a longer, distinct tone for invalid operations (e.g., division by zero).
[Insert Block Diagram Here]
List of Components:
1x Microcontroller Board (e.g., Arduino Nano / Uno or ATmega324A/328P)
1x 4×4 Matrix Keypad
1x 1602 LCD Display with I2C Module adapter
1x Passive Buzzer
1x Breadboard
Jumper wires (Male-to-Male and Male-to-Female)
1x Resistor (approx. 220Ω - 1kΩ) for the buzzer (optional)
Schematics and Signal Diagrams: [Insert Schematic Image Here] [Insert Picture of the Breadboard setup Here]
Descrierea codului aplicaţiei (firmware):
mediu de dezvoltare (if any) (e.g. AVR Studio, PlatformIO)
biblioteci şi surse 3rd-party folosite (e.g. Procyon AVRlib)
algoritmi şi structuri pe care plănuiţi să le implementaţi
(etapa 3) surse şi funcţii implementate
Care au fost rezultatele obţinute în urma realizării proiectului vostru.
Codul sursă trebuie urcat într-un repo public, recomandăm GitHub. Structurați-vă pagina de GitHub a proiectului pe mai multe directoare. De exemplu, creați un director numit src în care țineți tot codul sursă. Alt director hardware în care să țineți schemele și diagramele și alt director numit images în care să puneți toate fotografiile cu proiectul vostru, pe care le link-ați în README.md. Pagina de GitHub a proiectului vostru trebuie să conțină toate fișierele relevante pentru realizarea proiectului vostru. Dacă există resurse externe pe care le-ați folosit, vă rugăm să le link-ați în README.md. Sunteți încurajați să filmați un demo cu proiectul vostru și să îl încărcați pe YouTube. Faceți embed la video în README.md și în pagina de wiki OCW a proiectului vostru.
Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.
Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.