3 Practical Arduino Projects: Displays, Frequency Measurement & Button Counter

Whether you're a beginner eager to dive into the world of Arduino electronics or a seasoned hobbyist looking for creative project ideas, this guide features three hands-on projects designed to boost your skills and confidence. You'll explore how to use 7-segment displays, shift registers, push buttons, and LCDs in simple yet powerful Arduino projects. Each section includes a detailed schematic, cleanly formatted code, and an explanation to make implementation easy. These projects are perfect for learning about digital displays, pulse counting, frequency measurement, and user input with buttons. From DIY counters to signal analyzers, these projects will make your electronics learning journey more interactive and fun.
Tools and Components Required
- Arduino Uno or compatible board
- 7-Segment Displays (Common Cathode)
- Shift Register (74HC595)
- Push Button
- 16x2 Liquid Crystal Display (LCD)
- 220 ohm Resistors
- Breadboard and Jumper Wires
- Digital signal source (for frequency input)
- USB Cable for programming Arduino
Project 1: Dual 7-Segment Display with Shift Register
This Arduino project demonstrates how to control two 7-segment displays using a 74HC595 shift register. It helps reduce the number of output pins needed while still displaying two digits. Perfect for learning multiplexing and binary to segment conversion using shiftOut().
Schematic:
Code:
const int dataPin = A5;
const int clockPin = A4;
const int resetPin = A3;
byte numbers[] = {
0x3F, 0x06, 0x5B, 0x4F, 0x66,
0x6D, 0x7D, 0x07, 0x7F, 0x6F
};
void setup() {
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(resetPin, OUTPUT);
}
void loop() {
for (int i = 0; i < 10; i++) {
displayNumber(i, (i + 1) % 10);
delay(1000);
}
}
void displayNumber(int num1, int num2) {
digitalWrite(resetPin, LOW);
digitalWrite(resetPin, HIGH);
shiftOut(dataPin, clockPin, MSBFIRST, numbers[num1]);
shiftOut(dataPin, clockPin, MSBFIRST, numbers[num2]);
}
Project 2: Frequency Measurement Using LCD
Measure the frequency of a digital signal using an LCD and Arduino. This project introduces you to the LiquidCrystal library and shows how to calculate frequency from time differences between rising and falling signal edges. A great project for learning pulse detection and real-time measurement.
Schematic:
Code:
#include
LiquidCrystal lcd(12, 11, 7, 6, 5, 4);
const int signalPin = A0;
unsigned long pulseStartTime = 0;
unsigned long pulseCount = 0;
float frequency = 0.0;
void setup() {
pinMode(signalPin, INPUT);
lcd.begin(16, 2);
lcd.print("Frequency(Hz):");
}
void loop() {
if (digitalRead(signalPin) == HIGH) {
if (pulseStartTime == 0) {
pulseStartTime = millis();
}
} else {
if (pulseStartTime != 0) {
pulseCount++;
unsigned long pulseDuration = millis() - pulseStartTime;
frequency = 1000.0 / (pulseDuration / (pulseCount - 1));
pulseStartTime = 0;
}
}
lcd.setCursor(9, 1);
lcd.print(frequency, 4);
delay(100);
}
Project 3: Button-Controlled 7-Segment Counter
This simple project displays numbers 0 to 9 on a 7-segment display with every button press. It's perfect for practicing digital input using a push button and output using display segments. Great for learning how to build counters with Arduino.
Schematic:
Code:
int segmentPins[] = {2, 3, 4, 5, 6, 7, 8};
int buttonPins = A0;
byte numbers[10] = {
0x3F, 0x06, 0x5B, 0x4F, 0x66,
0x6D, 0x7D, 0x07, 0x7F, 0x6F
};
int counter = 0;
void setup() {
for (int i = 0; i < 7; i++) {
pinMode(segmentPins[i], OUTPUT);
}
pinMode(buttonPins, INPUT);
}
void loop() {
if(digitalRead(buttonPins) == HIGH){
displayNumber(counter);
counter = (counter + 1) % 10;
delay(1000);
}
}
void displayNumber(int num) {
for (int i = 0; i < 7; i++) {
digitalWrite(segmentPins[i], numbers[num] & (1 << i));
}
}
Conclusion
These three Arduino projects are an excellent starting point for exploring the world of embedded systems and microcontroller applications. You’ve learned how to drive 7-segment displays, capture and calculate signal frequency, and handle user input with buttons. Whether you're building a DIY digital counter, a frequency meter, or experimenting with shift registers and LCDs, these practical projects will help you gain valuable hands-on experience. Keep experimenting, and you’ll unlock endless possibilities with Arduino!
You may also like
EmbedLab Team
Embedded systems engineer and educator. Writes weekly tutorials at EmbedLab to help beginners ship real hardware.
Related projects
Mastering Arduino Interrupts: Button-LED Project Tutorial
body { font-family: 'Arial', sans-serif; line-height: 1.6; max-width: 900px; margin: 0 auto; padding: 20px; background-color: #f9f9f9; color: #333; } h1, h2, h3 { color: #2c3e50; } h1 { font-size: 2.5

Top Arduino Beginner Projects (2025)
:root { --primary: #1a73e8; --accent: #ffb300; --bg: #f4f8fb; --white: #fff; --gray: #f9fafc; --text: #212121; --shadow: 0 4px 18px rgba(30,50,90,0.07); } body { font-family: 'Segoe UI', Arial, sans-s
5 Simple Arduino Projects for Beginners
5 Simple Arduino Projects for Beginners body { font-family: Arial, sans-serif; line-height: 1.6; margin: 20px; background-color: #ffffff; color: #333; } h2, h3 { color: #222; } pre { background: #1e1e

ESP32 LED Blink in Proteus 8 Simulation — Arduino IDE ESP32 WROOM DevKit Tutorial
Step-by-step ESP32 LED blink simulation in Proteus 8 using Arduino IDE ESP32, ESP32 WROOM-32 DevKit, the ESP32 pinout (GPIO2) and Wokwi/Proteus simulation — full Espressif ESP32 dev board code included.

ESP32 Proteus 8 Simulation — Free ESP32 Library, Arduino IDE & WROOM DevKit Guide
Add the ESP32 to Proteus 8 easily and for free: ESP32 library install, Arduino IDE ESP32 setup, ESP32 WROOM / ESP32 DevKit pinout, Wi-Fi & Bluetooth simulation and Wokwi alternatives for ESP32-S3, ESP32-C3 and ESP32-CAM.



