ciao, allora sto lavorando a una classe che gestica il PPM in modo "asincrono" su più pin. per ora voglio fare una semplice lettura, però qualcosa non mi torna: una digitalRead fatta in una classe ritorna sempre HIGH, mentre da quella fatta nel loop funziona tutto. Idee??
posto il codice:
InputPin.h
#ifndef InputPin_h
#define InputPin_h
#include "WProgram.h"
class InputPin{
public:
InputPin(int pinNumber);
InputPin(int pinNumber, bool startingSignal);
void update();
unsigned long getDuration();
bool getDurationTipe();
bool lastRead;
private:
bool signal;
int pin;
unsigned long signalStart;
unsigned long signalLenght;
};
#endif
InputPin.cpp
#include "WProgram.h"
#include "InputPin.h"
#define MAXUNSIGNEDLONGCVALUE 4294967295
InputPin::InputPin(int pinNumber){
InputPin(pinNumber, false);
}
InputPin::InputPin(int pinNumber, bool startingSignal){
pin = pinNumber;
signal = startingSignal;
signalLenght=0;
signalStart = micros();
pinMode(pin, INPUT);
lastRead=false;
}
void InputPin::update(){
lastRead=digitalRead(pin);
if ( ( lastRead==LOW && signal ) || ( lastRead==HIGH && !signal ) ){ //quì era if ( lastRead != signal ) ma l'ho cambiato per sicurezza
unsigned long t = micros();
if (t > signalStart){
signalLenght = t-signalStart;
}else{
signalLenght = MAXUNSIGNEDLONGCVALUE-(signalStart-t);
}
signal=!signal;
signalStart=t;
}
}
bool InputPin::getDurationTipe(){
return signal;
}
unsigned long InputPin::getDuration(){
return signalLenght;
}
main
#include "InputPin.h"
InputPin classe(2);
void setup(){
Serial.begin(9600);
pinMode(2, INPUT);
}
unsigned long time = micros(); //calcola la durata del loop
int io = 0; //srcive una volta su 1000 vi seriale, altrimenti il loop diventa troppo lento
void loop(){
classe.update();
io++;
if (io%1000==0 || classe.lastRead==LOW){
Serial.print( digitalRead(2) );
Serial.print(" TIME:");
Serial.print( (micros()-time) );
time = micros();
Serial.print(" ");
Serial.print("Signal status: ");
Serial.print( classe.lastRead );
Serial.print(" ");
Serial.print( classe.getDurationTipe() );
Serial.print(" ");
Serial.println( classe.getDuration() );
io =0;
}
}