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.

FreeIn your browser3 courses, 20 lessons, about 15 hours
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.

  1. Step 1 路 7 lessons 路 6 h

    C++ that scales

    Code that stays sane as it grows.

    1. ClassesA Blinker class with private state, a constructor and an invariant it enforces itself: three objects, three lamps, one loop, and a bad value refused.
    2. A state machine classThe elevator rebuilt as a Lift class: enum class states, one private go() that every transition passes through, and settings that belong to the constructor.
    3. TemplatesclampTo() 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.
    4. Project: a calculatorThe 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
  2. Step 2 路 6 lessons 路 5 h

    Under the hood

    Exact timing from the registers.

    1. DDR, PORT and PINThe 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.
    2. Timers by handTimer 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
  3. Step 3 路 7 lessons 路 4 h

    Talk to chips: I2C, SPI and UART

    Several devices, three buses, one board.

    1. A BME280 and an SSD1306 sharing the busA 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.
    2. Logging to an SD card, three buses on one boardA 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.
    3. Boss: a weather station on three busesA 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

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.