A device library for Arduino and other -ino's.
The goal with this project is to create a clean and well-coded library for all kinds of devices attachable to Arduinos. By utilizing modern C++ to create an efficient and high-level abstraction compared to vanilla arduino functions.
It's a mess here right now, but work is going on!
Help is always wanted! If you want to write a device driver for the library, or just give a suggestion for a specific device, please open a issue.
Examples for all devices can be found in examples directory.
Following example demonstrate on a ATmega328 (Arduino Uno), how to program the on-circutboard led (pin 13) to turn on when a push-button is pressed.
Two device objects are created, Button
and Light
.
The push-button is connected between pin 3 and ground, and uses the built-in pullup resistor. The light is connected to pin 13.
In the loop the reading of the current state of the button is assigned to the led.
#include <devuino.hpp>
void setup()
{
ATmega328 cpu;
Button button {cpu.digital.input(3), Resistor::PullUp};
Light led {cpu.analog.output(13)};
while (true)
{
led = button;
}
}
void loop() { }
⚫️ = Not supported yet
🔵 = Some support
✅ = Fully supported
Following microcontrollers are supported.
Status | Device | Implemented | Not implemented yet |
---|---|---|---|
🔵 | ATtiny25 | Digital I/O, Analog I/O, Pin iterrupt, Pin change interrupt, EEPROM, SPI controller (via USI) | SPI device (via USI), I2C (via USI), USART (via USI), Low-power mode configuration |
🔵 | ATtiny45 | Digital I/O, Analog I/O, Pin iterrupt, Pin change interrupt, EEPROM, SPI controller (via USI) | SPI device (via USI), I2C (via USI), USART (via USI), Low-power mode configuration |
🔵 | ATtiny85 | Digital I/O, Analog I/O, Pin iterrupt, Pin change interrupt, EEPROM, SPI controller (via USI) | SPI device (via USI), I2C (via USI), USART (via USI), Low-power mode configuration |
🔵 | ATmega328 (ArduinoUno) | Digital I/O, Analog I/O, Pin iterrupt, Pin change interrupt, EEPROM, SPI controller | SPI device, I2C, USART, Low-power mode configuration |
Following devices are supported.
Status | Device | Description |
---|---|---|
✅ | Switch | Digital output between on and off |
✅ | Button | Digital input between on and off |
✅ | Potentiometer | Analog input in selectable range |
✅ | Resistance | Potentiometer with a auto-removed measuring voltage |
✅ | Light | Analog output, supporting independent on/off and brightness control |
✅ | LightRgb | Same as Light but with 3 channels for rgb control |
⚫️ | Neopixel | Neopixel/WS2812 1-wire rgb/rgbw led |
✅ | HCSR04 | HC-SR04 distance sensor |
✅ | MAX7219 segment display | MAX7219 seven segment display |
⚫️ | MAX7219 dotmatrix display | MAX7219 dotmatrix display |
To download the library, use the Arduino IDE Library Manager.
Note that the library requires at least C++17, so editing of the platform.txt
file is required. The file, usually located at ~/.arduino15/packages/arduino/hardware/avr/x.x.x/platform.txt
should be changed on line compiler.cpp.flags
to have the flag -std=gnu++17
instead of the default one.