ciao Romoloman
dunque ho fatto dei nuovi test proprio per lasciare liberi i pin 2 e 3 di Arduino Micro... utilizzando pulseIn con dei pin diversi esattamente 4,5,6,7 ..ottengo prestazioni paragonabili a quelle che si ottengono utilizzando gli interrupt.. evidentemente le librerie sono fatte bene... fatto sta che adesso non mi ritrovo nemmeno il rallentamento dei dati della seriale.. forse perchè non usando i pin 0 e 1 che sono della seriale.. probabilmente non entrano in conflitto lo stesso vale per i due pin I2C pin 3,2... quindi credo che continuo su questa linea.. piuttosto che andare a smanettare su tutti i registri e i bit dei registri ... sfrutto le librerie.. tali risultano veloci ed snelle..
const int pin1 = 4;
const int pin2 = 5;
const int pin3 = 6;
const int pin4 = 7;
volatile byte index =0;
volatile unsigned long results_1;
volatile unsigned long results_2;
volatile unsigned long results_3;
volatile unsigned long results_4;
void setup()
{
pinMode(pin1, INPUT);
pinMode(pin2, INPUT);
pinMode(pin3, INPUT);
pinMode(pin4, INPUT);
Serial.begin(9600);
}
void loop()
{
results_1 = pulseIn(pin1,HIGH,25000);
results_2 = pulseIn(pin2,HIGH,25000);
results_3 = pulseIn(pin3,HIGH,25000);
results_4 = pulseIn(pin4,HIGH,25000);
Serial.println(results_1);
Serial.println(results_2);
Serial.println(results_3);
Serial.println(results_4);
Serial.println("__________________________________ ______");
}
a dopo
Citazione:
Originalmente inviato da romoloman Fausto per miscelare due segnali devi leggerne due...
Farlo in un loop usando pulseIn di fatto dimezza la frequenza di pilotaggio considerato anche il fatto che poi deve anche essere generato il segnale miscelato.
Pertanto l'unico modo è usare gli interrupt per leggere le variazioni dei due ingressi...
O utilizzando gli external interrupt (pin 2 e 3) oppure usando i pin change interrupts. |