oxford
This commit is contained in:
+27
@@ -0,0 +1,27 @@
|
||||
#include <FastTouch.h>
|
||||
|
||||
// Adrian Freed 2018
|
||||
|
||||
void setup()
|
||||
{
|
||||
SerialUSB.begin(9600);
|
||||
}
|
||||
|
||||
|
||||
void loop()
|
||||
{
|
||||
SerialUSB.print(fastTouchRead(A2)); SerialUSB.print(" ");
|
||||
SerialUSB.print(fastTouchRead(A3)); SerialUSB.print(" ");
|
||||
SerialUSB.print(fastTouchRead(A4)); SerialUSB.print(" ");
|
||||
SerialUSB.print(fastTouchRead(A5)); SerialUSB.print(" ");
|
||||
SerialUSB.print(fastTouchRead(2)); SerialUSB.print(" ");
|
||||
SerialUSB.print(fastTouchRead(3)); SerialUSB.print(" ");
|
||||
|
||||
for(int i=9;i<=11;++i)
|
||||
{
|
||||
SerialUSB.print(fastTouchRead(i)); SerialUSB.print(" ");
|
||||
}
|
||||
SerialUSB.println();
|
||||
delay(100);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
#include <FastTouch.h>
|
||||
//
|
||||
// Adrian Freed 2019
|
||||
//
|
||||
// report on whether pins are being touched based on how
|
||||
// slow the pins arrive at HIGH from ground when a PULLUP resistor is enabled
|
||||
// all pin except the built-in LED are probed. Note that each pin will be hard pulled
|
||||
// to ground and that interrupts are briefly stopped during the measurement.
|
||||
//
|
||||
|
||||
void setup()
|
||||
{
|
||||
SerialUSB.begin(9600);
|
||||
}
|
||||
|
||||
|
||||
void loop()
|
||||
{
|
||||
for(int i=0;i<CORE_NUM_DIGITAL;++i)
|
||||
{
|
||||
if(i!=LED_BUILTIN)
|
||||
{
|
||||
SerialUSB.print(fastTouchRead(i)); SerialUSB.print(" ");
|
||||
}
|
||||
else
|
||||
SerialUSB.print("LED ");
|
||||
}
|
||||
SerialUSB.println();
|
||||
delay(200);
|
||||
}
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
#include <FastTouch.h>
|
||||
|
||||
// monotone touch sequencer
|
||||
// Adrian Freed 2018
|
||||
|
||||
void setup()
|
||||
{
|
||||
SerialUSB.begin(9600);
|
||||
}
|
||||
|
||||
|
||||
void loop()
|
||||
{
|
||||
int r;
|
||||
const int tonepin=10;
|
||||
const int notelength=140, notetonote=160;
|
||||
SerialUSB.print(r = fastTouchRead(A2)); SerialUSB.print(" ");
|
||||
if(r>1)
|
||||
{ tone(tonepin, 587, notelength/(r-1)); delay(notetonote); }
|
||||
SerialUSB.print(r = fastTouchRead(A3)); SerialUSB.print(" ");
|
||||
if(r>1)
|
||||
{ tone(tonepin, 440, notelength/(r-1)); delay(notetonote); }
|
||||
SerialUSB.print(r = fastTouchRead(A4)); SerialUSB.print(" ");
|
||||
if(r>1)
|
||||
{ tone(tonepin, 880, notelength/(r-1)); delay(notetonote);}
|
||||
SerialUSB.print(r = fastTouchRead(A5)); SerialUSB.print(" ");
|
||||
if(r>1)
|
||||
{ tone(tonepin, 153, notelength/(r-1)); delay(notetonote); }
|
||||
SerialUSB.print(r = fastTouchRead(2)); SerialUSB.print(" ");
|
||||
if(r>1)
|
||||
{ tone(tonepin, 185, notelength/(r-1)); delay(notetonote);}
|
||||
SerialUSB.print(r = fastTouchRead(3)); SerialUSB.print(" ");
|
||||
if(r>1)
|
||||
{ tone(tonepin, 196, notelength/(r-1)); delay(notetonote);}
|
||||
SerialUSB.print(r = fastTouchRead(9)); SerialUSB.print(" ");
|
||||
if(r>1)
|
||||
{ tone(tonepin, 349, notelength/(r-1)); delay(notetonote);}
|
||||
SerialUSB.print(r = fastTouchRead(11)); SerialUSB.print(" ");
|
||||
if(r>1)
|
||||
{ tone(tonepin, 370, notelength/(r-1)); delay(notetonote);}
|
||||
|
||||
SerialUSB.println();
|
||||
}
|
||||
|
||||
+41
@@ -0,0 +1,41 @@
|
||||
#include <FastTouch.h>
|
||||
|
||||
// monotone touch sequencer
|
||||
// Adrian Freed 2018
|
||||
|
||||
void setup()
|
||||
{
|
||||
SerialUSB.begin(9600);
|
||||
}
|
||||
|
||||
|
||||
void loop()
|
||||
{
|
||||
int r;
|
||||
const int tonepin=A0;
|
||||
const int notelength=140, notetonote=190;
|
||||
SerialUSB.print(r = fastTouchRead(A2)); SerialUSB.print(" ");
|
||||
if(r>1)
|
||||
{ tone(tonepin, 587/2, notelength/(r-1)); delay(notetonote); }
|
||||
SerialUSB.print(r = fastTouchRead(A3)); SerialUSB.print(" ");
|
||||
if(r>1)
|
||||
{ tone(tonepin, 440, notelength/(r-1)); delay(notetonote); }
|
||||
SerialUSB.print(r = fastTouchRead(A4)); SerialUSB.print(" ");
|
||||
if(r>1)
|
||||
{ tone(tonepin, 220, notelength/(r-1)); delay(notetonote);}
|
||||
SerialUSB.print(r = fastTouchRead(A5)); SerialUSB.print(" ");
|
||||
if(r>1)
|
||||
{ tone(tonepin, 153, notelength/(r-1)); delay(notetonote); }
|
||||
SerialUSB.print(r = fastTouchRead(A1)); SerialUSB.print(" ");
|
||||
if(r>1)
|
||||
{ tone(tonepin, 185, notelength/(r-1)); delay(notetonote);}
|
||||
SerialUSB.print(r = fastTouchRead(A6)); SerialUSB.print(" ");
|
||||
if(r>1)
|
||||
{ tone(tonepin, 196, notelength/(r-1)); delay(notetonote);}
|
||||
SerialUSB.print(r = fastTouchRead(A7)); SerialUSB.print(" ");
|
||||
if(r>1)
|
||||
{ tone(tonepin, 349, notelength/(r-1)); delay(notetonote);}
|
||||
|
||||
SerialUSB.println();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
# FastTouch
|
||||
Use this library to detect whether your choice of Arduino pin is being touched.
|
||||
The technique works with any Arduino pin that has an internal pull up resistor that
|
||||
can be enabled. It returns a measure of how long it takes for a pin to rise
|
||||
to a HIGH level after the pull up is enabled. This will be slowed by any
|
||||
capacitive load added.
|
||||
Executable
+2
@@ -0,0 +1,2 @@
|
||||
fastTouchRead KEYWORD1
|
||||
fastTouchMax KEYWORD1
|
||||
@@ -0,0 +1,9 @@
|
||||
name=FastTouch
|
||||
version=0.91
|
||||
author=Adrian Freed <adrian@adrianfreed.com>
|
||||
maintainer=Adrian Freed <adrian@adrianfreed.com>
|
||||
sentence=Fast Touch Library
|
||||
paragraph=Fast Capacitive Touch on any digital pin with a pull up option
|
||||
category=Device Control
|
||||
url=https://github.com/AdrianFreed/FastTouch
|
||||
architectures=*
|
||||
@@ -0,0 +1,803 @@
|
||||
//
|
||||
// FastTouch.cpp
|
||||
//
|
||||
//
|
||||
// Created by AdrianFreed on 3/12/18.
|
||||
//
|
||||
//
|
||||
|
||||
#include "FastTouch.h"
|
||||
|
||||
|
||||
|
||||
|
||||
#if defined(CORE_TEENSY)
|
||||
|
||||
//#if defined(__IMXRT1052__) || defined(__IMXRT10562__)
|
||||
|
||||
#if defined(__IMXRT1052__) || defined(__IMXRT1062__)
|
||||
|
||||
FASTRUN
|
||||
int fastTouchRead(int pin)
|
||||
{
|
||||
int i;
|
||||
const struct digital_pin_bitband_and_config_table_struct *p;
|
||||
if (pin >= CORE_NUM_DIGITAL) return -1;
|
||||
p = digital_pin_to_info_PGM + pin;
|
||||
|
||||
|
||||
pinMode(pin, OUTPUT_OPENDRAIN);
|
||||
digitalWrite(pin, LOW);
|
||||
delayMicroseconds(1);
|
||||
/* disable interrupts */
|
||||
noInterrupts();
|
||||
pinMode(pin, INPUT_PULLUP);
|
||||
i=0;
|
||||
if((*(p->reg + 2) & p->mask)!=0)
|
||||
goto out;
|
||||
if((*(p->reg + 2) & p->mask)!=0)
|
||||
goto out;
|
||||
if((*(p->reg + 2) & p->mask)!=0)
|
||||
goto out;
|
||||
i++;
|
||||
if((*(p->reg + 2) & p->mask)!=0)
|
||||
goto out;
|
||||
i++;
|
||||
if((*(p->reg + 2) & p->mask)!=0)
|
||||
goto out;
|
||||
i++;
|
||||
if((*(p->reg + 2) & p->mask)!=0)
|
||||
goto out;
|
||||
i++;
|
||||
if((*(p->reg + 2) & p->mask)!=0)
|
||||
goto out;
|
||||
i++;
|
||||
if((*(p->reg + 2) & p->mask)!=0)
|
||||
goto out;
|
||||
i++;
|
||||
|
||||
for(;i<64;++i)
|
||||
if((*(p->reg + 2) & p->mask)!=0)
|
||||
break;
|
||||
// v += fastDigitalRead(pin)? 0:1;
|
||||
{
|
||||
|
||||
pinMode(pin, OUTPUT_OPENDRAIN);
|
||||
digitalWrite(pin, LOW);
|
||||
|
||||
|
||||
|
||||
}
|
||||
out:
|
||||
interrupts();
|
||||
return i;
|
||||
}
|
||||
#elif defined(__MKL26Z64__)|| defined(__IMXRT1052__) || defined(__IMXRT1062__) /* Teensy 3LC */
|
||||
FASTRUN
|
||||
int fastTouchRead(int pin)
|
||||
{
|
||||
const unsigned m = digitalPinToBitMask(pin);
|
||||
|
||||
pinMode(pin, OUTPUT_OPENDRAIN);
|
||||
digitalWrite(pin, LOW);
|
||||
delayMicroseconds(50);
|
||||
/* disable interrupts */
|
||||
noInterrupts();
|
||||
pinMode(pin, INPUT_PULLUP);
|
||||
|
||||
// for(int i=0;i<64;++i)
|
||||
// ft_o += *port&x;
|
||||
{
|
||||
register unsigned a,b,c,d,e,f;
|
||||
register unsigned aa,ba,ca,da;
|
||||
#ifdef CONDITIONALAPPROACH
|
||||
register unsigned i=0;
|
||||
|
||||
|
||||
a = *portInputRegister(pin) & m ;
|
||||
a = *portInputRegister(pin) & m ;
|
||||
a = *portInputRegister(pin) & m ;
|
||||
b = *portInputRegister(pin) & m ;
|
||||
c = *portInputRegister(pin) & m ;
|
||||
d = *portInputRegister(pin) & m ;
|
||||
e = *portInputRegister(pin) & m ;
|
||||
f = *portInputRegister(pin) & m ;
|
||||
aa = *portInputRegister(pin) & m;
|
||||
ba = *portInputRegister(pin) & m;
|
||||
ca = *portInputRegister(pin) & m;
|
||||
da = *portInputRegister(pin) & m;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin) & m )
|
||||
goto out;
|
||||
++i;
|
||||
out: ;
|
||||
|
||||
#else
|
||||
register unsigned i;
|
||||
|
||||
i = *portInputRegister(pin) & m;
|
||||
i = *portInputRegister(pin) & m;
|
||||
|
||||
i = *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
i+= *portInputRegister(pin) & m;
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
interrupts();
|
||||
|
||||
// i += ((a & m)?0:1 ) + ((b& m )?0:1 ) +
|
||||
// ((c & m)?0:1 ) + ((d& m)?0:1 ) + ((e & m)?0:1 ) + ((f& m)?0:1 );
|
||||
//i += ((aa & m)?0:1 ) + ((ba& m )?0:1 ) +
|
||||
// ((ca & m)?0:1 ) + ((da & m)?0:1 ) + ((ea & m)?0:1 ) + ((fa& m)?0:1 );
|
||||
{volatile unsigned t = i, mm = m;
|
||||
while(mm >>= 1)
|
||||
t >>= 1;
|
||||
i = 64 -t; } //+(a+b+c+d+e+f+da+ca+ba+aa 10+
|
||||
pinMode(pin, OUTPUT_OPENDRAIN);
|
||||
digitalWrite(pin, LOW);
|
||||
|
||||
return i;
|
||||
|
||||
}
|
||||
}
|
||||
#else
|
||||
FASTRUN
|
||||
int fastTouchRead(int pin)
|
||||
{
|
||||
pinMode(pin, OUTPUT_OPENDRAIN);
|
||||
digitalWriteFast(pin, LOW);
|
||||
delayMicroseconds(50);
|
||||
/* disable interrupts */
|
||||
noInterrupts();
|
||||
pinMode(pin, INPUT_PULLUP);
|
||||
|
||||
// for(int i=0;i<64;++i)
|
||||
// ft_o += *port&x;
|
||||
{
|
||||
register unsigned i=0;
|
||||
register uint8_t a,b,c,d,e,f;
|
||||
register uint8_t aa,ba,ca,da;
|
||||
|
||||
a = *portInputRegister(pin) ;
|
||||
a = *portInputRegister(pin) ;
|
||||
a = *portInputRegister(pin) ;
|
||||
a = *portInputRegister(pin) ;
|
||||
a = *portInputRegister(pin) ;
|
||||
a = *portInputRegister(pin) ;
|
||||
a = *portInputRegister(pin) ;
|
||||
a = *portInputRegister(pin) ;
|
||||
a = *portInputRegister(pin) ;
|
||||
a = *portInputRegister(pin) ;
|
||||
a = *portInputRegister(pin) ;
|
||||
a = *portInputRegister(pin) ;
|
||||
a = *portInputRegister(pin) ;
|
||||
a = *portInputRegister(pin) ;
|
||||
|
||||
|
||||
a = *portInputRegister(pin) ;
|
||||
a = *portInputRegister(pin) ;
|
||||
a = *portInputRegister(pin) ;
|
||||
b = *portInputRegister(pin) ;
|
||||
c = *portInputRegister(pin) ;
|
||||
d = *portInputRegister(pin) ;
|
||||
e = *portInputRegister(pin) ;
|
||||
f = *portInputRegister(pin) ;
|
||||
aa = *portInputRegister(pin) ;
|
||||
ba = *portInputRegister(pin) ;
|
||||
ca = *portInputRegister(pin) ;
|
||||
da = *portInputRegister(pin) ;
|
||||
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
if( *portInputRegister(pin))
|
||||
goto out;
|
||||
++i;
|
||||
out:
|
||||
|
||||
|
||||
|
||||
interrupts();
|
||||
// i += ((a & m)?0:1 ) + ((b& m )?0:1 ) +
|
||||
// ((c & m)?0:1 ) + ((d& m)?0:1 ) + ((e & m)?0:1 ) + ((f& m)?0:1 );
|
||||
//i += ((aa & m)?0:1 ) + ((ba& m )?0:1 ) +
|
||||
// ((ca & m)?0:1 ) + ((da & m)?0:1 ) + ((ea & m)?0:1 ) + ((fa& m)?0:1 );
|
||||
{volatile uint8_t t =10-(a+b+c+d+e+f+da+ca+ba+aa);
|
||||
i+= t; }
|
||||
pinMode(pin, OUTPUT_OPENDRAIN);
|
||||
digitalWriteFast(pin, LOW);
|
||||
|
||||
return i;
|
||||
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
int fastTouchMax()
|
||||
{
|
||||
return 60;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,243 @@
|
||||
//
|
||||
//
|
||||
//FastTouch.h
|
||||
// Fast Touch Sensing for AVR and Teensy 3
|
||||
// Adrian Freed 2006-2018 Copyright. All Rights Reserved.
|
||||
// Tested on Teensy 2.0, Clio, Lilypad, Lilypad USB, Flora, Leonardo, UNO, Micro, BLEpad, PRO Mini,
|
||||
// Teensy 3.2 (more sensitive with optimized compiler settings and higher clock rate)
|
||||
// Teensy 3LC
|
||||
//
|
||||
|
||||
#ifndef FastTouch_h
|
||||
#define FastTouch_h
|
||||
|
||||
#include <Arduino.h>
|
||||
#if defined(CORE_TEENSY)
|
||||
#include "core_pins.h"
|
||||
#endif
|
||||
|
||||
#ifndef BIT_SET
|
||||
# define BIT_SET(value, bit) ((value) |= (1UL << (bit)))
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
//Arduino
|
||||
#if (defined(ARDUINO_AVR_MEGA) || \
|
||||
defined(ARDUINO_AVR_MEGA1280) || \
|
||||
defined(ARDUINO_AVR_MEGA2560) || \
|
||||
defined(__AVR_ATmega1280__) || \
|
||||
defined(__AVR_ATmega1281__) || \
|
||||
defined(__AVR_ATmega2560__) || \
|
||||
defined(__AVR_ATmega2561__))
|
||||
|
||||
#define __digitalPinToPortReg(P) \
|
||||
(((P) >= 22 && (P) <= 29) ? &PORTA : \
|
||||
((((P) >= 10 && (P) <= 13) || ((P) >= 50 && (P) <= 53)) ? &PORTB : \
|
||||
(((P) >= 30 && (P) <= 37) ? &PORTC : \
|
||||
((((P) >= 18 && (P) <= 21) || (P) == 38) ? &PORTD : \
|
||||
((((P) >= 0 && (P) <= 3) || (P) == 5) ? &PORTE : \
|
||||
(((P) >= 54 && (P) <= 61) ? &PORTF : \
|
||||
((((P) >= 39 && (P) <= 41) || (P) == 4) ? &PORTG : \
|
||||
((((P) >= 6 && (P) <= 9) || (P) == 16 || (P) == 17) ? &PORTH : \
|
||||
(((P) == 14 || (P) == 15) ? &PORTJ : \
|
||||
(((P) >= 62 && (P) <= 69) ? &PORTK : &PORTL))))))))))
|
||||
|
||||
#define __digitalPinToDDRReg(P) \
|
||||
(((P) >= 22 && (P) <= 29) ? &DDRA : \
|
||||
((((P) >= 10 && (P) <= 13) || ((P) >= 50 && (P) <= 53)) ? &DDRB : \
|
||||
(((P) >= 30 && (P) <= 37) ? &DDRC : \
|
||||
((((P) >= 18 && (P) <= 21) || (P) == 38) ? &DDRD : \
|
||||
((((P) >= 0 && (P) <= 3) || (P) == 5) ? &DDRE : \
|
||||
(((P) >= 54 && (P) <= 61) ? &DDRF : \
|
||||
((((P) >= 39 && (P) <= 41) || (P) == 4) ? &DDRG : \
|
||||
((((P) >= 6 && (P) <= 9) || (P) == 16 || (P) == 17) ? &DDRH : \
|
||||
(((P) == 14 || (P) == 15) ? &DDRJ : \
|
||||
(((P) >= 62 && (P) <= 69) ? &DDRK : &DDRL))))))))))
|
||||
|
||||
#define __digitalPinToPINReg(P) \
|
||||
(((P) >= 22 && (P) <= 29) ? &PINA : \
|
||||
((((P) >= 10 && (P) <= 13) || ((P) >= 50 && (P) <= 53)) ? &PINB : \
|
||||
(((P) >= 30 && (P) <= 37) ? &PINC : \
|
||||
((((P) >= 18 && (P) <= 21) || (P) == 38) ? &PIND : \
|
||||
((((P) >= 0 && (P) <= 3) || (P) == 5) ? &PINE : \
|
||||
(((P) >= 54 && (P) <= 61) ? &PINF : \
|
||||
((((P) >= 39 && (P) <= 41) || (P) == 4) ? &PING : \
|
||||
((((P) >= 6 && (P) <= 9) || (P) == 16 || (P) == 17) ? &PINH : \
|
||||
(((P) == 14 || (P) == 15) ? &PINJ : \
|
||||
(((P) >= 62 && (P) <= 69) ? &PINK : &PINL))))))))))
|
||||
|
||||
#define __digitalPinToBit(P) \
|
||||
(((P) >= 7 && (P) <= 9) ? (P) - 3 : \
|
||||
(((P) >= 10 && (P) <= 13) ? (P) - 6 : \
|
||||
(((P) >= 22 && (P) <= 29) ? (P) - 22 : \
|
||||
(((P) >= 30 && (P) <= 37) ? 37 - (P) : \
|
||||
(((P) >= 39 && (P) <= 41) ? 41 - (P) : \
|
||||
(((P) >= 42 && (P) <= 49) ? 49 - (P) : \
|
||||
(((P) >= 50 && (P) <= 53) ? 53 - (P) : \
|
||||
(((P) >= 54 && (P) <= 61) ? (P) - 54 : \
|
||||
(((P) >= 62 && (P) <= 69) ? (P) - 62 : \
|
||||
(((P) == 0 || (P) == 15 || (P) == 17 || (P) == 21) ? 0 : \
|
||||
(((P) == 1 || (P) == 14 || (P) == 16 || (P) == 20) ? 1 : \
|
||||
(((P) == 19) ? 2 : \
|
||||
(((P) == 5 || (P) == 6 || (P) == 18) ? 3 : \
|
||||
(((P) == 2) ? 4 : \
|
||||
(((P) == 3 || (P) == 4) ? 5 : 7)))))))))))))))
|
||||
|
||||
|
||||
// --- Arduino 644 ---
|
||||
#elif (defined(__AVR_ATmega644__) || \
|
||||
defined(__AVR_ATmega644P__))
|
||||
|
||||
#define __digitalPinToPortReg(P) \
|
||||
(((P) >= 0 && (P) <= 7) ? &PORTB : (((P) >= 8 && (P) <= 15) ? &PORTD : (((P) >= 16 && (P) <= 23) ? &PORTC : &PORTA)))
|
||||
#define __digitalPinToDDRReg(P) \
|
||||
(((P) >= 0 && (P) <= 7) ? &DDRB : (((P) >= 8 && (P) <= 15) ? &DDRD : (((P) >= 8 && (P) <= 15) ? &DDRC : &DDRA)))
|
||||
#define __digitalPinToPINReg(P) \
|
||||
(((P) >= 0 && (P) <= 7) ? &PINB : (((P) >= 8 && (P) <= 15) ? &PIND : (((P) >= 8 && (P) <= 15) ? &PINC : &PINA)))
|
||||
#define __digitalPinToBit(P) \
|
||||
(((P) >= 0 && (P) <= 7) ? (P) : (((P) >= 8 && (P) <= 15) ? (P) - 8 : (((P) >= 16 && (P) <= 23) ? (P) - 16 : (P) - 24)))
|
||||
|
||||
#elif defined(__AVR_ATmega32U4__) && defined(CORE_TEENSY)
|
||||
#define __digitalPinToPortReg(P) \
|
||||
(((P) == 22 || (P) == 23 || (P) == 5 || (P) == 6 || (P) == 7 || (P) == 8 || (P) == 11 || (P) == 12) ? &PORTD : (((P) == 9 || (P) == 10) ? &PORTC : (((P) >= 17 && (P) <= 21)) ? &PORTF : (((P) == 24) ? &PORTE : &PORTB)))
|
||||
#define __digitalPinToDDRReg(P) \
|
||||
(((P) == 22 || (P) == 23 || (P) == 5 || (P) == 6 || (P) == 7 || (P) == 8 || (P) == 11 || (P) == 12) ? &DDRD : (((P) == 9 || (P) == 10) ? &DDRC : (((P) >= 17 && (P) <= 21)) ? &DDRF : (((P) == 24) ? &DDRE : &DDRB)))
|
||||
#define __digitalPinToPINReg(P) \
|
||||
(((P) == 22 || (P) == 23 || (P) == 5 || (P) == 6 || (P) == 7 || (P) == 8 || (P) == 11 || (P) == 12) ? &PIND : (((P) == 9 || (P) == 10) ? &PINC : (((P) >= 17 && (P) <= 21)) ? &PINF : (((P) == 24) ? &PINE : &PINB)))
|
||||
#define __digitalPinToBit(P) \
|
||||
(((P) >= 0 && (P) <= 3) ? (P) : (((P) >= 5 && (P) < 9) ? (P) - 5 : (((P) == 4) ? 7 : (((P) == 9) ? 6 : (((P) == 10) ? 7 : \
|
||||
(((P) == 11) ? 6 : (((P) == 12) ? 7 : (((P) == 13) ? 4 : (((P) == 14) ? 5 : (((P) == 15) ? 6 : (((P) == 16) ? 7 :\
|
||||
(((P) == 17) ? 6 : (((P) == 18) ? 5 : (((P) == 19) ? 4 : (((P) == 20) ? 1 : (((P) == 21) ? 0 : (((P) == 22) ? 4 : (((P) == 23) ? 5 :\
|
||||
(((P) == 24) ? 6 : 6 )))))))))))))))))))
|
||||
|
||||
// --- Arduino Leonardo ---
|
||||
#elif (defined(ARDUINO_AVR_LEONARDO) || \
|
||||
defined(__AVR_ATmega16U4__) || \
|
||||
defined(__AVR_ATmega32U4__))
|
||||
|
||||
|
||||
#define __digitalPinToPortReg(P) \
|
||||
((((P) >= 0 && (P) <= 4) || (P) == 6 || (P) == 12 || (P) == 24 || (P) == 25 || (P) == 29) ? &PORTD : (((P) == 5 || (P) == 13) ? &PORTC : (((P) >= 18 && (P) <= 23)) ? &PORTF : (((P) == 7) ? &PORTE : &PORTB)))
|
||||
#define __digitalPinToDDRReg(P) \
|
||||
((((P) >= 0 && (P) <= 4) || (P) == 6 || (P) == 12 || (P) == 24 || (P) == 25 || (P) == 29) ? &DDRD : (((P) == 5 || (P) == 13) ? &DDRC : (((P) >= 18 && (P) <= 23)) ? &DDRF : (((P) == 7) ? &DDRE : &DDRB)))
|
||||
#define __digitalPinToPINReg(P) \
|
||||
((((P) >= 0 && (P) <= 4) || (P) == 6 || (P) == 12 || (P) == 24 || (P) == 25 || (P) == 29) ? &PIND : (((P) == 5 || (P) == 13) ? &PINC : (((P) >= 18 && (P) <= 23)) ? &PINF : (((P) == 7) ? &PINE : &PINB)))
|
||||
#define __digitalPinToBit(P) \
|
||||
(((P) >= 8 && (P) <= 11) ? (P) - 4 : (((P) >= 18 && (P) <= 21) ? 25 - (P) : (((P) == 0) ? 2 : (((P) == 1) ? 3 : (((P) == 2) ? 1 : (((P) == 3) ? 0 : (((P) == 4) ? 4 : (((P) == 6) ? 7 : (((P) == 13) ? 7 : (((P) == 14) ? 3 : (((P) == 15) ? 1 : (((P) == 16) ? 2 : (((P) == 17) ? 0 : (((P) == 22) ? 1 : (((P) == 23) ? 0 : (((P) == 24) ? 4 : (((P) == 25) ? 7 : (((P) == 26) ? 4 : (((P) == 27) ? 5 : 6 )))))))))))))))))))
|
||||
|
||||
|
||||
// --- Arduino Uno ---
|
||||
#elif (defined(ARDUINO_AVR_UNO) || \
|
||||
defined(ARDUINO_AVR_DUEMILANOVE) || \
|
||||
defined(__AVR_ATmega328__) || \
|
||||
defined(__AVR_ATmega328P__) || \
|
||||
defined(__AVR_ATmega328PB__))
|
||||
|
||||
|
||||
|
||||
#if defined(__AVR_ATmega328PB__)
|
||||
#define __digitalPinToPortReg(P) \
|
||||
(((P) >= 0 && (P) <= 7) ? &PORTD : (((P) >= 8 && (P) <= 13) ? &PORTB : (((P) >= 14 && (P) <= 19) ? &PORTC : &PORTE)))
|
||||
#define __digitalPinToDDRReg(P) \
|
||||
(((P) >= 0 && (P) <= 7) ? &DDRD : (((P) >= 8 && (P) <= 13) ? &DDRB : (((P) >= 14 && (P) <= 19) ? &DDRC : &DDRE)))
|
||||
#define __digitalPinToPINReg(P) \
|
||||
(((P) >= 0 && (P) <= 7) ? &PIND : (((P) >= 8 && (P) <= 13) ? &PINB : (((P) >= 14 && (P) <= 19) ? &PINC : &PINE)))
|
||||
#define __digitalPinToBit(P) \
|
||||
(((P) >= 0 && (P) <= 7) ? (P) : (((P) >= 8 && (P) <= 13) ? (P) - 8 : (((P) >= 14 && (P) <= 19) ? (P) - 14 : (((P) >= 20 && (P) <= 21) ? (P) - 18 : (P) - 22))))
|
||||
#else
|
||||
#define __digitalPinToPortReg(P) \
|
||||
(((P) >= 0 && (P) <= 7) ? &PORTD : (((P) >= 8 && (P) <= 13) ? &PORTB : &PORTC))
|
||||
#define __digitalPinToDDRReg(P) \
|
||||
(((P) >= 0 && (P) <= 7) ? &DDRD : (((P) >= 8 && (P) <= 13) ? &DDRB : &DDRC))
|
||||
#define __digitalPinToPINReg(P) \
|
||||
(((P) >= 0 && (P) <= 7) ? &PIND : (((P) >= 8 && (P) <= 13) ? &PINB : &PINC))
|
||||
#define __digitalPinToBit(P) \
|
||||
(((P) >= 0 && (P) <= 7) ? (P) : (((P) >= 8 && (P) <= 13) ? (P) - 8 : (P) - 14))
|
||||
#endif
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
#if defined(AVR)
|
||||
static byte ft_o,ft_p,ft_q,ft_r,ft_s,ft_t,ft_u,ft_v,ft_w,ft_x, ft_y, ft_z;
|
||||
#define fastTouchRead(pin) \
|
||||
( digitalWrite(pin, LOW), \
|
||||
pinMode(pin, OUTPUT), \
|
||||
delay(1), \
|
||||
pinMode(pin, INPUT), \
|
||||
/* disable interrupts */ \
|
||||
BIT_SET(*__digitalPinToPortReg(pin), __digitalPinToBit(pin)), \
|
||||
ft_o = *__digitalPinToPINReg(pin), \
|
||||
ft_p = *__digitalPinToPINReg(pin), \
|
||||
ft_q = *__digitalPinToPINReg(pin), \
|
||||
ft_r = *__digitalPinToPINReg(pin), \
|
||||
ft_s = *__digitalPinToPINReg(pin), \
|
||||
ft_t = *__digitalPinToPINReg(pin), \
|
||||
ft_u = *__digitalPinToPINReg(pin), \
|
||||
ft_v = *__digitalPinToPINReg(pin), \
|
||||
ft_w = *__digitalPinToPINReg(pin), \
|
||||
ft_x = *__digitalPinToPINReg(pin), \
|
||||
ft_y = *__digitalPinToPINReg(pin), \
|
||||
ft_z = *__digitalPinToPINReg(pin), \
|
||||
/* enable interrupts */ \
|
||||
!(ft_p & (1<< __digitalPinToBit(pin))) + !(ft_q & (1<< __digitalPinToBit(pin))) + \
|
||||
!(ft_r & (1<< __digitalPinToBit(pin))) + !(ft_s & (1<< __digitalPinToBit(pin))) + \
|
||||
!(ft_t & (1<< __digitalPinToBit(pin)))+ !(ft_u & (1<< __digitalPinToBit(pin)))+ \
|
||||
!(ft_v & (1<< __digitalPinToBit(pin)))+ !(ft_w & (1<< __digitalPinToBit(pin)))+ \
|
||||
!(ft_x & (1<< __digitalPinToBit(pin)))+ !(ft_y & (1<< __digitalPinToBit(pin)))+ \
|
||||
!(ft_z & (1<< __digitalPinToBit(pin))) )
|
||||
#elif defined(_SAMD21_)
|
||||
|
||||
static volatile uint32_t ft_o,ft_p,ft_q,ft_r,ft_s,ft_t,ft_u,ft_v,ft_w,ft_x, ft_y, ft_z;
|
||||
static volatile uint32_t ft_xo,ft_xp,ft_xq,ft_xr,ft_xs,ft_xt,ft_xu,ft_xv,ft_xw,ft_xx, ft_xy, ft_xz;
|
||||
#define fastTouchRead(pin) \
|
||||
( pinMode(pin, OUTPUT), \
|
||||
digitalWrite(pin, LOW), \
|
||||
delay(1), \
|
||||
pinMode(pin, INPUT_PULLUP), \
|
||||
/* disable interrupts */ \
|
||||
ft_p = PORT->Group[g_APinDescription[pin].ulPort].IN.reg, \
|
||||
ft_q = PORT->Group[g_APinDescription[pin].ulPort].IN.reg, \
|
||||
ft_r = PORT->Group[g_APinDescription[pin].ulPort].IN.reg, \
|
||||
ft_s = PORT->Group[g_APinDescription[pin].ulPort].IN.reg, \
|
||||
ft_t = PORT->Group[g_APinDescription[pin].ulPort].IN.reg, \
|
||||
ft_u = PORT->Group[g_APinDescription[pin].ulPort].IN.reg, \
|
||||
ft_v = PORT->Group[g_APinDescription[pin].ulPort].IN.reg, \
|
||||
ft_w = PORT->Group[g_APinDescription[pin].ulPort].IN.reg, \
|
||||
ft_x = PORT->Group[g_APinDescription[pin].ulPort].IN.reg, \
|
||||
ft_y = PORT->Group[g_APinDescription[pin].ulPort].IN.reg, \
|
||||
ft_z = PORT->Group[g_APinDescription[pin].ulPort].IN.reg, \
|
||||
ft_xo = PORT->Group[g_APinDescription[pin].ulPort].IN.reg, \
|
||||
ft_xp = PORT->Group[g_APinDescription[pin].ulPort].IN.reg, \
|
||||
ft_xq = PORT->Group[g_APinDescription[pin].ulPort].IN.reg, \
|
||||
ft_xr = PORT->Group[g_APinDescription[pin].ulPort].IN.reg, \
|
||||
ft_xs = PORT->Group[g_APinDescription[pin].ulPort].IN.reg, \
|
||||
ft_xt = PORT->Group[g_APinDescription[pin].ulPort].IN.reg, \
|
||||
ft_xu = PORT->Group[g_APinDescription[pin].ulPort].IN.reg, \
|
||||
ft_xv = PORT->Group[g_APinDescription[pin].ulPort].IN.reg, \
|
||||
ft_xw = PORT->Group[g_APinDescription[pin].ulPort].IN.reg, \
|
||||
ft_xx = PORT->Group[g_APinDescription[pin].ulPort].IN.reg, \
|
||||
ft_xy = PORT->Group[g_APinDescription[pin].ulPort].IN.reg, \
|
||||
ft_xz = PORT->Group[g_APinDescription[pin].ulPort].IN.reg, \
|
||||
/* enable interrupts */ \
|
||||
!(ft_p & (1ul << g_APinDescription[pin].ulPin)) + !(ft_q & (1ul << g_APinDescription[pin].ulPin)) + \
|
||||
!(ft_r & (1ul << g_APinDescription[pin].ulPin)) + !(ft_s & (1ul << g_APinDescription[pin].ulPin)) + \
|
||||
!(ft_t & (1ul << g_APinDescription[pin].ulPin)) + !(ft_u & (1ul << g_APinDescription[pin].ulPin)) + \
|
||||
!(ft_v & (1ul << g_APinDescription[pin].ulPin)) + !(ft_w & (1ul << g_APinDescription[pin].ulPin)) + \
|
||||
!(ft_x & (1ul << g_APinDescription[pin].ulPin)) + !(ft_y & (1ul << g_APinDescription[pin].ulPin)) + \
|
||||
!(ft_z & (1ul << g_APinDescription[pin].ulPin)) + \
|
||||
!(ft_xo & (1ul << g_APinDescription[pin].ulPin)) + \
|
||||
!(ft_xp & (1ul << g_APinDescription[pin].ulPin)) + !(ft_xq & (1ul << g_APinDescription[pin].ulPin)) + \
|
||||
!(ft_xr & (1ul << g_APinDescription[pin].ulPin)) + !(ft_xs & (1ul << g_APinDescription[pin].ulPin)) + \
|
||||
!(ft_xt & (1ul << g_APinDescription[pin].ulPin)) + !(ft_xu & (1ul << g_APinDescription[pin].ulPin)) + \
|
||||
!(ft_xv & (1ul << g_APinDescription[pin].ulPin)) + !(ft_xw & (1ul << g_APinDescription[pin].ulPin)) + \
|
||||
!(ft_xx & (1ul << g_APinDescription[pin].ulPin)) + !(ft_xy & (1ul << g_APinDescription[pin].ulPin)) + \
|
||||
!(ft_xz & (1ul << g_APinDescription[pin].ulPin)) \
|
||||
)
|
||||
|
||||
#else
|
||||
int fastTouchRead( int );
|
||||
extern int fastTouchMax(void);
|
||||
#endif
|
||||
#endif /* FastTouch_h */
|
||||
Reference in New Issue
Block a user