Coder Social home page Coder Social logo

digitalio's Introduction

Restructured for future use of Arduino Library Manager.

PinIO and I2C classes are only supported on AVR.

For detailed documentation see the html files.

The functions in this library do not clear PWM mode for pins.

Clearing PWM mode for each call has a high overhead and does not address the fact that pins can be in other special modes such as Serial, I2C, or SPI.

The DigitalPin class provides very fast in-line functions. DigitalPin is a template base class and pin numbers must be specified at compile time. For 328 pins and low address Mega pins, read() and write() execute in two cycles or 125 ns for a 16 MHz CPU. Fast static functions similar to the Arduino digitalRead and digitalWrite functions are also included.

The PinIO class has runtime pin numbers. It has member variables to store the pin's bit mask and port address so it is slower than the DigitalPin class.

PinIO has two versions of write. PinIO::writeI() must be used with interrupts disabled since it will not be atomic if interrupts are enabled. PinIO::writeI() is faster than the PinIO::write() function.

PinIO::write() can be used with interrupts enabled or disabled.

A software SPI class is included in SoftSPI.h. The only example for SoftSPI is a scope test for development.

Two software I2C classes are included. SoftI2cMaster runs at 100 kHz and FastI2cMaster runs at 400 kHz. The SoftDS1307Utility example demonstrates these classes.

The DigitalIO/examples directory has these programs:

DigitalPinBlink - Create object for pin 13 in output mode and demo toggle().

DigitalPinConfigToggle - Demonstrate the config() and toggle() member functions.

DigitalPinReadWrite - Read pin 12 and write pin 13 using DigitalPin.

DigitalPinShiftOut - Scope test for fast shiftOut function.

GpioPinMap - Generate a GpioPinMap file for a new board.

PinIOBegin - Use begin to assign pin numbers.

PinIOConfigToggle - Test the PinIO config() and toggle() functions.

PinIOReadWrite - Use PinIO to read pin 12 and write the value to pin 13.

ScanI2cBus - Scan I2C bus for devices.

SoftDS1307Utility - Utility sketch to explore DS1307 using software I2C Master.

testArduino - Scope timing test using Arduino digitalWrite function.

testDigitalPin - Scope timing test using DitialPin high()/low() functions.

testFastDigital - Scope test for static fastDigital functions.

testPinIO - Scope test for PinIO class write timing.

testSoftSPI - Scope test for SoftSPI class.

digitalio's People

Contributors

greiman avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

digitalio's Issues

PlatformIO build fails on espressif8266 platform

Build for Wemos D1 Mini (ESP8266) fails with the below output.

> Executing task: platformio run <

[Wed Dec  6 16:50:24 2017] Processing d1_mini (monitor_baud: 115200; platform: espressif8266; board: d1_mini; framework: arduino)
----------------------------------------------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
Collected 57 compatible libraries
Looking for dependencies...
Library Dependency Graph ( http://bit.ly/configure-pio-ldf )
|-- <DigitalIO> v1.0.0
|-- <OneButton>
Compiling .pioenvs/d1_mini/src/digitalio-test.o
In file included from /home/ristomatti/.platformio/lib/DigitalIO_ID200/src/DigitalIO.h:31:0,
from src/digitalio-test.cpp:2:
/home/ristomatti/.platformio/lib/DigitalIO_ID200/src/DigitalPin.h:278:25: error: variable or field 'fastPinMode' declared void
inline void fastPinMode(pin, mode) {
^
/home/ristomatti/.platformio/lib/DigitalIO_ID200/src/DigitalPin.h:278:25: error: 'pin' was not declared in this scope
/home/ristomatti/.platformio/lib/DigitalIO_ID200/src/DigitalPin.h:278:30: error: 'mode' was not declared in this scope
inline void fastPinMode(pin, mode) {
^
/home/ristomatti/.platformio/lib/DigitalIO_ID200/src/DigitalPin.h: In member function 'void DigitalPin<PinNumber>::config(uint8_t, bool)':
/home/ristomatti/.platformio/lib/DigitalIO_ID200/src/DigitalPin.h:290:25: error: there are no arguments to 'fastPinMode' that depend on a template parameter, so a declaration of 'fastPinMode' must be available [-fpermissive]
{fastPinMode(pin, mode); fastDigitalWrite(pin, level);}
^
/home/ristomatti/.platformio/lib/DigitalIO_ID200/src/DigitalPin.h:328:5: note: in expansion of macro 'fastPinConfig'
fastPinConfig(PinNumber, mode, level);
^
/home/ristomatti/.platformio/lib/DigitalIO_ID200/src/DigitalPin.h:290:25: note: (if you use '-fpermissive', G++ will accept your code, but allowing the use of an undeclared name is deprecated)
{fastPinMode(pin, mode); fastDigitalWrite(pin, level);}
^
/home/ristomatti/.platformio/lib/DigitalIO_ID200/src/DigitalPin.h:328:5: note: in expansion of macro 'fastPinConfig'
fastPinConfig(PinNumber, mode, level);
^
/home/ristomatti/.platformio/lib/DigitalIO_ID200/src/DigitalPin.h: In member function 'void DigitalPin<PinNumber>::mode(uint8_t)':
/home/ristomatti/.platformio/lib/DigitalIO_ID200/src/DigitalPin.h:352:32: error: there are no arguments to 'fastPinMode' that depend on a template parameter, so a declaration of 'fastPinMode' must be available [-fpermissive]
fastPinMode(PinNumber, mode);
^
/home/ristomatti/.platformio/lib/DigitalIO_ID200/src/SoftSPI.h: In member function 'void SoftSPI<MisoPin, MosiPin, SckPin, Mode>::begin()':
/home/ristomatti/.platformio/lib/DigitalIO_ID200/src/DigitalPin.h:290:25: error: there are no arguments to 'fastPinMode' that depend on a template parameter, so a declaration of 'fastPinMode' must be available [-fpermissive]
{fastPinMode(pin, mode); fastDigitalWrite(pin, level);}
^
/home/ristomatti/.platformio/lib/DigitalIO_ID200/src/SoftSPI.h:55:5: note: in expansion of macro 'fastPinConfig'
fastPinConfig(MisoPin, MISO_MODE, MISO_LEVEL);
^
/home/ristomatti/.platformio/lib/DigitalIO_ID200/src/DigitalPin.h:290:25: error: there are no arguments to 'fastPinMode' that depend on a template parameter, so a declaration of 'fastPinMode' must be available [-fpermissive]
{fastPinMode(pin, mode); fastDigitalWrite(pin, level);}
^
/home/ristomatti/.platformio/lib/DigitalIO_ID200/src/SoftSPI.h:56:5: note: in expansion of macro 'fastPinConfig'
fastPinConfig(MosiPin, MOSI_MODE, !MODE_CPHA(Mode));
^
/home/ristomatti/.platformio/lib/DigitalIO_ID200/src/DigitalPin.h:290:25: error: there are no arguments to 'fastPinMode' that depend on a template parameter, so a declaration of 'fastPinMode' must be available [-fpermissive]
{fastPinMode(pin, mode); fastDigitalWrite(pin, level);}
^
/home/ristomatti/.platformio/lib/DigitalIO_ID200/src/SoftSPI.h:57:5: note: in expansion of macro 'fastPinConfig'
fastPinConfig(SckPin, SCK_MODE, MODE_CPOL(Mode));
^
*** [.pioenvs/d1_mini/src/digitalio-test.o] Error 1
============================================= [ERROR] Took 0.93 seconds =============================================
The terminal process terminated with exit code: 1

Terminal will be reused by tasks, press any key to close it.

> Executing task: platformio run <

[Wed Dec  6 16:50:30 2017] Processing d1_mini (monitor_baud: 115200; platform: espressif8266; board: d1_mini; framework: arduino)
----------------------------------------------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
Collected 57 compatible libraries
Looking for dependencies...
Library Dependency Graph ( http://bit.ly/configure-pio-ldf )
|-- <DigitalIO> v1.0.0
|-- <OneButton>
Compiling .pioenvs/d1_mini/src/digitalio-test.o
In file included from /home/ristomatti/.platformio/lib/DigitalIO_ID200/src/DigitalIO.h:31:0,
from src/digitalio-test.cpp:2:
/home/ristomatti/.platformio/lib/DigitalIO_ID200/src/DigitalPin.h:278:25: error: variable or field 'fastPinMode' declared void
inline void fastPinMode(pin, mode) {
^
/home/ristomatti/.platformio/lib/DigitalIO_ID200/src/DigitalPin.h:278:25: error: 'pin' was not declared in this scope
/home/ristomatti/.platformio/lib/DigitalIO_ID200/src/DigitalPin.h:278:30: error: 'mode' was not declared in this scope
inline void fastPinMode(pin, mode) {
^
/home/ristomatti/.platformio/lib/DigitalIO_ID200/src/DigitalPin.h: In member function 'void DigitalPin<PinNumber>::config(uint8_t, bool)':
/home/ristomatti/.platformio/lib/DigitalIO_ID200/src/DigitalPin.h:290:25: error: there are no arguments to 'fastPinMode' that depend on a template parameter, so a declaration of 'fastPinMode' must be available [-fpermissive]
{fastPinMode(pin, mode); fastDigitalWrite(pin, level);}
^
/home/ristomatti/.platformio/lib/DigitalIO_ID200/src/DigitalPin.h:328:5: note: in expansion of macro 'fastPinConfig'
fastPinConfig(PinNumber, mode, level);
^
/home/ristomatti/.platformio/lib/DigitalIO_ID200/src/DigitalPin.h:290:25: note: (if you use '-fpermissive', G++ will accept your code, but allowing the use of an undeclared name is deprecated)
{fastPinMode(pin, mode); fastDigitalWrite(pin, level);}
^
/home/ristomatti/.platformio/lib/DigitalIO_ID200/src/DigitalPin.h:328:5: note: in expansion of macro 'fastPinConfig'
fastPinConfig(PinNumber, mode, level);
^
/home/ristomatti/.platformio/lib/DigitalIO_ID200/src/DigitalPin.h: In member function 'void DigitalPin<PinNumber>::mode(uint8_t)':
/home/ristomatti/.platformio/lib/DigitalIO_ID200/src/DigitalPin.h:352:32: error: there are no arguments to 'fastPinMode' that depend on a template parameter, so a declaration of 'fastPinMode' must be available [-fpermissive]
fastPinMode(PinNumber, mode);
^
/home/ristomatti/.platformio/lib/DigitalIO_ID200/src/SoftSPI.h: In member function 'void SoftSPI<MisoPin, MosiPin, SckPin, Mode>::begin()':
/home/ristomatti/.platformio/lib/DigitalIO_ID200/src/DigitalPin.h:290:25: error: there are no arguments to 'fastPinMode' that depend on a template parameter, so a declaration of 'fastPinMode' must be available [-fpermissive]
{fastPinMode(pin, mode); fastDigitalWrite(pin, level);}
^
/home/ristomatti/.platformio/lib/DigitalIO_ID200/src/SoftSPI.h:55:5: note: in expansion of macro 'fastPinConfig'
fastPinConfig(MisoPin, MISO_MODE, MISO_LEVEL);
^
/home/ristomatti/.platformio/lib/DigitalIO_ID200/src/DigitalPin.h:290:25: error: there are no arguments to 'fastPinMode' that depend on a template parameter, so a declaration of 'fastPinMode' must be available [-fpermissive]
{fastPinMode(pin, mode); fastDigitalWrite(pin, level);}
^
/home/ristomatti/.platformio/lib/DigitalIO_ID200/src/SoftSPI.h:56:5: note: in expansion of macro 'fastPinConfig'
fastPinConfig(MosiPin, MOSI_MODE, !MODE_CPHA(Mode));
^
/home/ristomatti/.platformio/lib/DigitalIO_ID200/src/DigitalPin.h:290:25: error: there are no arguments to 'fastPinMode' that depend on a template parameter, so a declaration of 'fastPinMode' must be available [-fpermissive]
{fastPinMode(pin, mode); fastDigitalWrite(pin, level);}
^
/home/ristomatti/.platformio/lib/DigitalIO_ID200/src/SoftSPI.h:57:5: note: in expansion of macro 'fastPinConfig'
fastPinConfig(SckPin, SCK_MODE, MODE_CPOL(Mode));
^
*** [.pioenvs/d1_mini/src/digitalio-test.o] Error 1

QUESTION on using SoftSPI

In looking through the code I noticed you are not setting a CS pin anyway. Am I assuming it is in effect always selected for that group of pins? Also if there is no CS function then am I assuming correctly you can only have I device attached for the set of pins selected?

Another question is I am trying to attach a 9250 to a new board and use the lib to read say the whoami register. Do I use the send/receive combo or use transfer (the first to send the addr and the second to read the data).

Thanks
Mike

compile failure for rp2040

Arduino: 1.8.19 (Linux), Board: "Raspberry Pi Pico, 2MB (Sketch: 1536KB, FS: 512KB), 133 MHz, Fast (-Ofast) (maybe slower), Disabled, Disabled, Disabled, Disabled, None, Pico SDK"











In file included from /home/t/Arduino/libraries/DigitalIO/src/DigitalIO.h:31,
                 from /home/t/Arduino/RoboRemotev3v1-tt/RoboRemotev3v1-tt.ino:5:
/home/t/Arduino/libraries/DigitalIO/src/DigitalPin.h:278:13: error: variable or field 'fastPinMode' declared void
  278 | inline void fastPinMode(pin, mode) {
      |             ^~~~~~~~~~~
/home/t/Arduino/libraries/DigitalIO/src/DigitalPin.h:278:25: error: 'pin' was not declared in this scope; did you mean 'min'?
  278 | inline void fastPinMode(pin, mode) {
      |                         ^~~
      |                         min
/home/t/Arduino/libraries/DigitalIO/src/DigitalPin.h:278:30: error: 'mode' was not declared in this scope; did you mean 'modf'?
  278 | inline void fastPinMode(pin, mode) {
      |                              ^~~~
      |                              modf
/home/t/Arduino/libraries/DigitalIO/src/DigitalPin.h: In member function 'void DigitalPin<PinNumber>::config(uint8_t, bool)':
/home/t/Arduino/libraries/DigitalIO/src/DigitalPin.h:290:4: error: there are no arguments to 'fastPinMode' that depend on a template parameter, so a declaration of 'fastPinMode' must be available [-fpermissive]
  290 |   {fastPinMode(pin, mode); fastDigitalWrite(pin, level);}
      |    ^~~~~~~~~~~
/home/t/Arduino/libraries/DigitalIO/src/DigitalPin.h:328:5: note: in expansion of macro 'fastPinConfig'
  328 |     fastPinConfig(PinNumber, mode, level);
      |     ^~~~~~~~~~~~~
/home/t/Arduino/libraries/DigitalIO/src/DigitalPin.h:290:4: note: (if you use '-fpermissive', G++ will accept your code, but allowing the use of an undeclared name is deprecated)
  290 |   {fastPinMode(pin, mode); fastDigitalWrite(pin, level);}
      |    ^~~~~~~~~~~
/home/t/Arduino/libraries/DigitalIO/src/DigitalPin.h:328:5: note: in expansion of macro 'fastPinConfig'
  328 |     fastPinConfig(PinNumber, mode, level);
      |     ^~~~~~~~~~~~~
/home/t/Arduino/libraries/DigitalIO/src/DigitalPin.h: In member function 'void DigitalPin<PinNumber>::mode(uint8_t)':
/home/t/Arduino/libraries/DigitalIO/src/DigitalPin.h:352:5: error: there are no arguments to 'fastPinMode' that depend on a template parameter, so a declaration of 'fastPinMode' must be available [-fpermissive]
  352 |     fastPinMode(PinNumber, mode);
      |     ^~~~~~~~~~~
/home/t/Arduino/libraries/DigitalIO/src/SoftSPI.h: In member function 'void SoftSPI<MisoPin, MosiPin, SckPin, Mode>::begin()':
/home/t/Arduino/libraries/DigitalIO/src/DigitalPin.h:290:4: error: there are no arguments to 'fastPinMode' that depend on a template parameter, so a declaration of 'fastPinMode' must be available [-fpermissive]
  290 |   {fastPinMode(pin, mode); fastDigitalWrite(pin, level);}
      |    ^~~~~~~~~~~
/home/t/Arduino/libraries/DigitalIO/src/SoftSPI.h:55:5: note: in expansion of macro 'fastPinConfig'
   55 |     fastPinConfig(MisoPin, MISO_MODE, MISO_LEVEL);
      |     ^~~~~~~~~~~~~
/home/t/Arduino/libraries/DigitalIO/src/DigitalPin.h:290:4: error: there are no arguments to 'fastPinMode' that depend on a template parameter, so a declaration of 'fastPinMode' must be available [-fpermissive]
  290 |   {fastPinMode(pin, mode); fastDigitalWrite(pin, level);}
      |    ^~~~~~~~~~~
/home/t/Arduino/libraries/DigitalIO/src/SoftSPI.h:56:5: note: in expansion of macro 'fastPinConfig'
   56 |     fastPinConfig(MosiPin, MOSI_MODE, !MODE_CPHA(Mode));
      |     ^~~~~~~~~~~~~
/home/t/Arduino/libraries/DigitalIO/src/DigitalPin.h:290:4: error: there are no arguments to 'fastPinMode' that depend on a template parameter, so a declaration of 'fastPinMode' must be available [-fpermissive]
  290 |   {fastPinMode(pin, mode); fastDigitalWrite(pin, level);}
      |    ^~~~~~~~~~~
/home/t/Arduino/libraries/DigitalIO/src/SoftSPI.h:57:5: note: in expansion of macro 'fastPinConfig'
   57 |     fastPinConfig(SckPin, SCK_MODE, MODE_CPOL(Mode));
      |     ^~~~~~~~~~~~~
/home/t/Arduino/libraries/DigitalIO/src/DigitalPin.h: In instantiation of 'void DigitalPin<PinNumber>::config(uint8_t, bool) [with unsigned char PinNumber = 5; uint8_t = unsigned char]':
/home/t/Arduino/libraries/PsxNewLib/src/PsxControllerBitBang.h:82:14:   required from 'boolean PsxControllerBitBang<PIN_ATT, PIN_CMD, PIN_DAT, PIN_CLK>::begin() [with unsigned char PIN_ATT = 5; unsigned char PIN_CMD = 4; unsigned char PIN_DAT = 3; unsigned char PIN_CLK = 2; boolean = bool]'
/home/t/Arduino/RoboRemotev3v1-tt/RoboRemotev3v1-tt.ino:251:21:   required from here
/home/t/Arduino/libraries/DigitalIO/src/DigitalPin.h:290:15: error: 'fastPinMode' was not declared in this scope; did you mean 'PinMode'?
  290 |   {fastPinMode(pin, mode); fastDigitalWrite(pin, level);}
      |    ~~~~~~~~~~~^~~~~~~~~~~
/home/t/Arduino/libraries/DigitalIO/src/DigitalPin.h:328:5: note: in expansion of macro 'fastPinConfig'
  328 |     fastPinConfig(PinNumber, mode, level);
      |     ^~~~~~~~~~~~~
/home/t/Arduino/libraries/DigitalIO/src/DigitalPin.h: In instantiation of 'void DigitalPin<PinNumber>::config(uint8_t, bool) [with unsigned char PinNumber = 4; uint8_t = unsigned char]':
/home/t/Arduino/libraries/PsxNewLib/src/PsxControllerBitBang.h:83:14:   required from 'boolean PsxControllerBitBang<PIN_ATT, PIN_CMD, PIN_DAT, PIN_CLK>::begin() [with unsigned char PIN_ATT = 5; unsigned char PIN_CMD = 4; unsigned char PIN_DAT = 3; unsigned char PIN_CLK = 2; boolean = bool]'
/home/t/Arduino/RoboRemotev3v1-tt/RoboRemotev3v1-tt.ino:251:21:   required from here
/home/t/Arduino/libraries/DigitalIO/src/DigitalPin.h:290:15: error: 'fastPinMode' was not declared in this scope; did you mean 'PinMode'?
  290 |   {fastPinMode(pin, mode); fastDigitalWrite(pin, level);}
      |    ~~~~~~~~~~~^~~~~~~~~~~
/home/t/Arduino/libraries/DigitalIO/src/DigitalPin.h:328:5: note: in expansion of macro 'fastPinConfig'
  328 |     fastPinConfig(PinNumber, mode, level);
      |     ^~~~~~~~~~~~~
/home/t/Arduino/libraries/DigitalIO/src/DigitalPin.h: In instantiation of 'void DigitalPin<PinNumber>::config(uint8_t, bool) [with unsigned char PinNumber = 2; uint8_t = unsigned char]':
/home/t/Arduino/libraries/PsxNewLib/src/PsxControllerBitBang.h:84:14:   required from 'boolean PsxControllerBitBang<PIN_ATT, PIN_CMD, PIN_DAT, PIN_CLK>::begin() [with unsigned char PIN_ATT = 5; unsigned char PIN_CMD = 4; unsigned char PIN_DAT = 3; unsigned char PIN_CLK = 2; boolean = bool]'
/home/t/Arduino/RoboRemotev3v1-tt/RoboRemotev3v1-tt.ino:251:21:   required from here
/home/t/Arduino/libraries/DigitalIO/src/DigitalPin.h:290:15: error: 'fastPinMode' was not declared in this scope; did you mean 'PinMode'?
  290 |   {fastPinMode(pin, mode); fastDigitalWrite(pin, level);}
      |    ~~~~~~~~~~~^~~~~~~~~~~
/home/t/Arduino/libraries/DigitalIO/src/DigitalPin.h:328:5: note: in expansion of macro 'fastPinConfig'
  328 |     fastPinConfig(PinNumber, mode, level);
      |     ^~~~~~~~~~~~~
/home/t/Arduino/libraries/DigitalIO/src/DigitalPin.h: In instantiation of 'void DigitalPin<PinNumber>::config(uint8_t, bool) [with unsigned char PinNumber = 3; uint8_t = unsigned char]':
/home/t/Arduino/libraries/PsxNewLib/src/PsxControllerBitBang.h:85:14:   required from 'boolean PsxControllerBitBang<PIN_ATT, PIN_CMD, PIN_DAT, PIN_CLK>::begin() [with unsigned char PIN_ATT = 5; unsigned char PIN_CMD = 4; unsigned char PIN_DAT = 3; unsigned char PIN_CLK = 2; boolean = bool]'
/home/t/Arduino/RoboRemotev3v1-tt/RoboRemotev3v1-tt.ino:251:21:   required from here
/home/t/Arduino/libraries/DigitalIO/src/DigitalPin.h:290:15: error: 'fastPinMode' was not declared in this scope; did you mean 'PinMode'?
  290 |   {fastPinMode(pin, mode); fastDigitalWrite(pin, level);}
      |    ~~~~~~~~~~~^~~~~~~~~~~
/home/t/Arduino/libraries/DigitalIO/src/DigitalPin.h:328:5: note: in expansion of macro 'fastPinConfig'
  328 |     fastPinConfig(PinNumber, mode, level);
      |     ^~~~~~~~~~~~~
exit status 1
Error compiling for board Raspberry Pi Pico.


This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.

will not compile for any rp2040 and unfortunately i need this to work as it is a dependency for the library i need,

Arduino - DigitalIO Library conflicts with SD Library

Apparently some functions and constants have the same name in digitalIO and in the SD libraries (as of 12/2019).

The functions having problems are:
badPinNumber(
fastDigitalRead(
fastDigitalWrite(
Please rename in the DigitalIO library.

Also SDA_PIN and SCL_PIN are used in the examples in DigitalIO, and are defined as constants in the SD library.
Please rename in the DigitalIO library.

I will test the above changes.

Library manager support.

Hi Bill,

As your repo layout is very specific, and seems tailored for doxygen and such, would you be happy with me forking this, modifying the directory structure, and adding it to the Arduino IDE library manager?

I know we are free to fork it, but I have seen authors get cranky at others when they have tried to add their fork to the lib manager.

Great lib by the way, I have been using it for years.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.