Hello!
I am writing a small library for reading the pulse width from a RC receiver. I have manage to do this in a normal sketch, but I am having some trouble transferring it to C++.
I can't get my code to compile and I am currently getting this error:
C:\Users\Michael Marne\Desktop\Arduino\arduino-1.0.5\libraries\ReadReceiver\ReadReceiver.cpp: In member function 'void Receiver::attach(uint8_t)':
C:\Users\Michael Marne\Desktop\Arduino\arduino-1.0.5\libraries\ReadReceiver\ReadReceiver.cpp:39: error: no matching function for call to 'PCintPort::attachInterrupt(uint8_t&, void (Receiver::*)(), int)'
C:\Users\Michael Marne\Desktop\Arduino\arduino-1.0.5\libraries\ReadReceiver\/PinChangeInt.h:421: note: candidates are: static int8_t PCintPort::attachInterrupt(uint8_t, void (*)(), int)
C:\Users\Michael Marne\Desktop\Arduino\arduino-1.0.5\libraries\ReadReceiver\ReadReceiver.cpp: In member function 'void Receiver::read(uint8_t, int*)':
C:\Users\Michael Marne\Desktop\Arduino\arduino-1.0.5\libraries\ReadReceiver\ReadReceiver.cpp:51: error: lvalue required as left operand of assignment
Any help is very appriciated,
Thanks in advance,
Kalveo
EDIT: Forgot to attach code ![]()
ReadReceiver.cpp
#include "ReadReceiver.h"
// <<Constructor>>
Receiver::Receiver(){
}
// <<Destructor>>
Receiver::~Receiver(){}
boolean interruptPins[20] = {0};
int startRise[20] = {0};
int durationRise[20] = {0};
boolean typeOfInterrupt[20] = {0};
// Handle interrupts
void Receiver::onInterrupt(){
uint8_t intPin = PCintPort::arduinoPin; // Pin on which the interrupt occurred
if (interruptPins[intPin]) {
// Rising edge detected, save start time
if (!typeOfInterrupt[intPin]){
startRise[intPin] = micros();
typeOfInterrupt[intPin] = true;
}
// Falling edge detected, calculate duration of "HIGH"
else {
durationRise[intPin] = micros() - startRise[intPin];
typeOfInterrupt[intPin] = false;
}
}
}
// Attach to a pin
void Receiver::attach(uint8_t pin){
interruptPins[pin] = true;
PCintPort::attachInterrupt(pin, (void*)&Receiver::onInterrupt, CHANGE);
}
// Detach from a pin
void Receiver::detach(uint8_t pin){
interruptPins[pin] = false;
PCintPort::detachInterrupt(pin);
}
// Read status of pin
void Receiver::read(uint8_t pin, int *result){
if (interruptPins[pin]){
&result = &durationRise[pin];
}
}
ReadReceiver.h
#include "PinChangeInt.h"
#ifndef ReadReceiver_H
#define ReadReceiver_H
#include <Arduino.h>
class Receiver {
public:
Receiver();
~Receiver();
void attach(uint8_t pin);
void detach(uint8_t pin);
void read(uint8_t pin, int *result);
private:
void onInterrupt();
};
#endif
ReadReceiver.h (313 Bytes)
ReadReceiver.cpp (1.18 KB)