Arduino touch code не работает в ядре

Привет я нашел код Arduino для сенсорного интерфейса, используя графит и бумагу, но этот код не работает в коде Spark Core, Arduino, как показано ниже

// Pin for the LED
int LEDPin = 7;
// Pin to connect to your drawing
int capSensePin = 0;
// This is how high the sensor needs to read in order
//  to trigger a touch.  You'll find this number
//  by trial and error, or you could take readings at
//  the start of the program to dynamically calculate this.
int touchedCutoff = 60;

void setup(){
Serial.begin(9600);
// Set up the LED
pinMode(LEDPin, OUTPUT);
digitalWrite(LEDPin, LOW);
}

void loop(){
// If the capacitive sensor reads above a certain threshold,
//  turn on the LED
if (readCapacitivePin(capSensePin) > touchedCutoff) {
digitalWrite(LEDPin, HIGH);
}
else {
digitalWrite(LEDPin, LOW);
}

// Every 500 ms, print the value of the capacitive sensor
if ( (millis() % 500) == 0){
Serial.print("Capacitive Sensor on Pin 2 reads: ");
Serial.println(readCapacitivePin(capSensePin));
}
}

// readCapacitivePin
//  Input: Arduino pin number
//  Output: A number, from 0 to 17 expressing
//          how much capacitance is on the pin
//  When you touch the pin, or whatever you have
//  attached to it, the number will get higher
//  In order for this to work now,
// The pin should have a 1+Megaohm resistor pulling
//  it up to +5v.
uint8_t readCapacitivePin(int pinToMeasure){
// This is how you declare a variable which
//  will hold the PORT, PIN, and DDR registers
//  on an AVR
volatile uint8_t* port;
volatile uint8_t* ddr;
volatile uint8_t* pin;
// Here we translate the input pin number from
//  Arduino pin number to the AVR PORT, PIN, DDR,
//  and which bit of those registers we care about.
byte bitmask;
if ((pinToMeasure >= 0) && (pinToMeasure <= 7)){
port = &PORTD;
ddr = &DDRD;
bitmask = 1 << pinToMeasure;
pin = &PIND;
}
if ((pinToMeasure > 7) && (pinToMeasure <= 13)){
port = &PORTB;
ddr = &DDRB;
bitmask = 1 << (pinToMeasure - 8);
pin = &PINB;
}
if ((pinToMeasure > 13) && (pinToMeasure <= 19)){
port = &PORTC;
ddr = &DDRC;
bitmask = 1 << (pinToMeasure - 13);
pin = &PINC;
}
// Discharge the pin first by setting it low and output
*port &= ~(bitmask);
*ddr  |= bitmask;
delay(1);
// Make the pin an input WITHOUT the internal pull-up on
*ddr &= ~(bitmask);
// Now see how long the pin to get pulled up
int cycles = 16000;
for(int i = 0; i < cycles; i++){
if (*pin & bitmask){
cycles = i;
break;
}
}
// Discharge the pin again by setting it low and output
//  It's important to leave the pins low if you want to
//  be able to touch more than 1 sensor at a time - if
//  the sensor is left pulled high, when you touch
//  two sensors, your body will transfer the charge between
//  sensors.
*port &= ~(bitmask);
*ddr  |= bitmask;

return cycles;
}

Spark core выдает следующую ошибку

В файл включен из ../inc/spark_wiring.h:29:0,

from ../inc/application.h:29,
from new_lwed.cpp:3:
../../core-common-lib/SPARK_Firmware_Driver/inc/config.h:12:2: warning: #warning "Defaulting to Release Build" [-Wcpp]
#warning "Defaulting to Release Build"^
new_lwed.cpp: In function 'uint8_t readCapacitivePin(int)':
new_lwed.cpp:57:13: error: 'PORTD' was not declared in this scope
volatile uint8_t* pin;
^
new_lwed.cpp:58:12: error: 'DDRD' was not declared in this scope
// Here we translate the input pin number from
^
new_lwed.cpp:60:12: error: 'PIND' was not declared in this scope
// and which bit of those registers we care about.
^
new_lwed.cpp:63:13: error: 'PORTB' was not declared in this scope
port = &PORTD;
^
new_lwed.cpp:64:12: error: 'DDRB' was not declared in this scope
ddr = &DDRD;
^
new_lwed.cpp:66:12: error: 'PINB' was not declared in this scope
pin = &PIND;
^
new_lwed.cpp:69:13: error: 'PORTC' was not declared in this scope
port = &PORTB;
^
new_lwed.cpp:70:12: error: 'DDRC' was not declared in this scope
ddr = &DDRB;
^
new_lwed.cpp:72:12: error: 'PINC' was not declared in this scope
pin = &PINB;
^
make: *** [new_lwed.o] Error 1

0

Решение

Spark Core использует другой процессор, чем Arduino, поэтому такие константы, как PORTC или же DDRC не доступны Емкостная библиотека уже портирована: https://community.spark.io/t/include-capacitivesensor-library/2965/30 так что вы можете включить CapTouch библиотека и использовать пример.

1

Другие решения


По вопросам рекламы [email protected]