Portable implementation of Arduino/Wiring core functions and classes
C++ C
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
docs
inc
src
.gitignore
HOWTO.md
README.md
TODO.md
license.txt

README.md

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.

NOTE:

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

The list is based off of Wiring Framework and Arduino IDE reference pages.

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.

Constants

  • HIGH, LOW
  • INPUT, OUTPUT, INPUT_PULLUP
  • LED_BUILTIN

Data Types

  • String object

Utilities

  • PROGMEM

Digital I/O

  • pinMode()
  • digitalWrite()
  • digitalRead()

Analog I/O

  • analogReference()
  • analogRead()
  • analogWrite() - PWM

Due & Zero only

  • analogReadResolution()
  • analogWriteResolution()

Advanced I/O

  • tone()
  • noTone()
  • shiftOut()
  • shiftIn()
  • pulseIn()

Time

  • millis()
  • micros()
  • delay()
  • delayMicroseconds()

Math

  • min()
  • max()
  • abs()
  • constrain()
  • map()

Characters

  • isAlphaNumeric()
  • isAlpha()
  • isAscii()
  • isWhitespace()
  • isControl()
  • isDigit()
  • isGraph()
  • isLowerCase()
  • isPrintable()
  • isPunct()
  • isSpace()
  • isUpperCase()
  • isHexadecimalDigit()

Random Numbers

  • randomSeed()
  • random()

Bits and Bytes

  • lowByte()
  • highByte()
  • bitRead()
  • bitWrite()
  • bitSet()
  • bitClear()
  • bit()

External Interrupts

  • attachInterrupt()
  • detachInterrupt()

Interrupts

  • interrupts()
  • noInterrupts()

Communication

  • Serial
  • Stream

USB (32u4 based boards and Due/Zero only)

  • Keyboard
  • Mouse

Core Libraries

  • 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