Source: https://mokxi.com/learn/advanced-arduino-course
Updated: 2026-11-11

Embedded track
Advanced Arduino

# An advanced Arduino course for after the basics

You can blink, read buttons and use millis(). Next: C++ classes and state machines, ports and timers by hand, and three buses on one board.

Free In your browser 3 courses, 20 lessons, about 15 hours

Start free Classes See the course

Overview

## How you will learn it

Most Arduino tutorials stop where projects start getting interesting. Past the basics, the problems change: code that has grown too big to follow, timing that has to be exact and boards with five devices on them.

This route takes the three courses that answer those problems. C++ that scales organizes the code, Under the hood takes the timing down to registers, and Talk to chips puts several devices on I2C, SPI and UART together.

Outcomes

## What you will learn

- Organize a sketch into classes, a ring buffer and a state machine.
- Replace Arduino functions with registers where speed or timing matters.
- Use I2C, SPI and UART devices together on one board.
- Build a calculator and a weather station that tie it together.

Your route

## The courses and lessons to take

Every lesson opens in the editor right away, signed in or not, and the simulator checks each step.

- Step 1 · 7 lessons · 6 h

### C++ that scales

Code that stays sane as it grows.

- Classes A Blinker class with private state, a constructor and an invariant it enforces itself: three objects, three lamps, one loop, and a bad value refused.
- A state machine class The elevator rebuilt as a Lift class: enum class states, one private go() that every transition passes through, and settings that belong to the constructor.
- Templates clampTo() for any type, countOf() for any array, and the ring buffer as Ring<T, N>: one piece of source, a checked, fast version for every type you use.
- Project: a calculator The keypad calculator rebuilt from this course: a Calculator class that is pure logic, exact arithmetic in hundredths, a self-test, and a pin layer fed by both the keypad and the serial monitor.
Every lesson in the course
- Step 2 · 6 lessons · 5 h

### Under the hood

Exact timing from the registers.

- DDR, PORT and PIN The three registers behind every digital pin: count in binary on three lamps with one write to PORTB, turn on a pull-up through PORTD, and read a button straight out of PIND.
- Timers by hand Timer 1 set up register by register: a prescaler, CTC mode and OCR1A for a match every 500 ms, the compare flag polled and cleared by hand, and no millis() anywhere.
Every lesson in the course
- Step 3 · 7 lessons · 4 h

### Talk to chips: I2C, SPI and UART

Several devices, three buses, one board.

- A BME280 and an SSD1306 sharing the bus A weather sensor and a screen on the same two wires, then two of each with the same addresses, kept apart by a TCA9548A multiplexer. Read a real sensor and draw on a real screen.
- Logging to an SD card, three buses on one board A microSD card on SPI, a DS3231 clock on I2C and a DS18B20 on 1-Wire: every five seconds a dated line goes into a CSV file you can open in a spreadsheet.
- Boss: a weather station on three buses A BME280 node reads the weather over I2C and sends it over an SPI radio; a gateway shows it on an I2C screen and logs every reading over UART. Every bus in the course, in one build.
Every lesson in the course

Keep going

## Guides and tools on the same subject

Guide

### Arduino state machine

Open it

Guide

### Arduino Timer1 interrupt

Open it

Guide

### Arduino low memory available

Open it

Track

### Embedded track

Arduino, ESP32, Raspberry Pi Pico and STM32: pins, timing, buses, motors, WiFi, registers and debugging, every lesson checked on a simulated board.
See the whole track

Questions

## Questions people ask

Am I ready for advanced Arduino?

If you can blink without delay, read a button with a pull-up and print over Serial, yes. If not, Embedded on the Arduino Uno covers those first.

Do I need a Mega or a newer board?

No. Everything runs on a simulated Uno, which makes the limits on memory and timing part of the lesson.

What comes after this?

A new board, like the ESP32 or STM32, or the firmware route for registers, debugging and testable code.
