Zeeduino-XC - portable implementation of Arduino/Wiring core functions and classes
Main goal of this project is to bring to your favourite microcontroller that ease of setting up, coding and building electronics gadgets which is a hallmark of Wiring and Arduino projects.
It essentialy makes available for any microcontroller:
- the ease of:
- setting up an electronics board in the code
- writing code for it and getting it to work quickly
- so you can spend your time focusing on what is crucial for your project
- in order to quickly get that proof-of-concept working
- (those are some weird bullet points, eh?)
- a lot of Arduino libraries for various chips, sensors, boards etc.
Once you are over that first bump/hill of implementing and setting up the hardware abstraction layer for your favourite microcontroller, Zeeduino-XC will have you writing Arduino/Wiring-compatible code in no time and using well-written Arduino/Wiring libraries in your projects with ease.
This is NOT an Arduino IDE, Wiring IDE, Arduino or Wiring IDE plugin.
Zeeduino-XC - the concept
Wiring and Arduino are originally written for Atmel microcontrollers and there are more than few places in it's code-base where Atmel-specific code is used. However, the core code is essentially a bunch of C++ classes which, it turns out, can be compiled for any microcontroller if their compiler/development environment supports C++.
The only thing that needs to be moved out of the way are those Atmel specific pieces of code. The way to do that is to use HAL. Not the computer from 2001 Odissey, but an ancient design pattern: Hardware Abstraction Layer.
Zeeduino-XC does exactly that.
Hours and hours have been invested into:
- replacing Atmel specific pieces of code with HAL API functions
- restructuring some parts of the Arduino code base so it becomes a bit more generic and easier to port to a different microcontroller (i.e. pin handling)
- re-implementing some other parts of the code base to make it more portable-friendly (i.e. parts of Serial and Wire classes )
How to use it with your controller
Check the Howto doc
Implemented core Arduino functions
If a structure/variable/function is not listed here, that means it is implemented as a part of the C++ language or the standard C library.
- HIGH, LOW
- INPUT, OUTPUT, INPUT_PULLUP
- String object
- analogWrite() - PWM
Due & Zero only
Bits and Bytes
USB (32u4 based boards and Due/Zero only)
EEPROM - reading and writing to "permanent" storage
SPI - for communicating with devices using the Serial Peripheral Interface (SPI) Bus
Wire - Two Wire Interface (TWI/I2C) for sending and receiving data over a net of devices or sensors.
SoftwareSerial - for serial communication on any digital pins. Version 1.0 and later of Arduino incorporate Mikal Hart's NewSoftSerial library as SoftwareSerial.
Ethernet - for connecting to the internet using the Arduino Ethernet Shield
Firmata - for communicating with applications on the computer using a standard serial protocol.
GSM - for connecting to a GSM/GRPS network with the GSM shield.
LiquidCrystal - for controlling liquid crystal displays (LCDs)
SD - for reading and writing SD cards
Servo - for controlling servo motors
Stepper - for controlling stepper motors
TFT - for drawing text , images, and shapes on the Arduino TFT screen
WiFi - for connecting to the internet using the Arduino WiFi shield