Il presente esempio mette in evidenza le grandi capacità di Arduino nel gestire gli interrupts.
In questo esempio una variabile di uscita segue una variabile di ingresso con un ritardo di pochissimi microsecondi
UN ESEMPIO FUNZIONANTE CON INTERRUPT E COMUNICAZIONE SERIALE
Con il presente programma, l’Arduino genera dalla funzione loop un impulso di 20us. Questo impulso entra in un altro ingresso dell’Arduino. Tramite un interrupt da questo secondo ingresso viene generato un comando seriale e viene ricavata una nuova uscita. Dalla seriale si ottiene un 1 per ogni impulso e la nuova uscita rappresenta un’onda quadra i cui fronti sono gli istanti degli impulsi.
// A simple sketch to read GPS data and parse the $GPRMC string
// see http://www.ladyada.net/make/gpsshield for more info
#include <NewSoftSerial.h>
NewSoftSerial mySerial = NewSoftSerial(2, 3);
#define GPSRATE 4800
//#define GPSRATE 38400
int pbIn = 0; // Interrupt 0 is on DIGITAL PIN 2!
int ledOut = 13; // The output LED pin
volatile int state = LOW; // The input state toggle
int ledPin = 8;
void setup() {
pinMode(ledPin, OUTPUT); // sets the digital pin as output
// Set up the digital pin 2 to an Interrupt and Pin 4 to an Output
pinMode(ledOut, OUTPUT);
//Attach the interrupt to the input pin and monitor for ANY Change
attachInterrupt(pbIn, stateChange, RISING);
Serial.begin(GPSRATE);
mySerial.begin(GPSRATE);
}
void loop() {
digitalWrite(ledPin, HIGH); // sets the LED on
delayMicroseconds(17); // waits for 17ms
digitalWrite(ledPin, LOW); // sets the LED off
delay(1000); // wait for 1s with tune
}
void stateChange() {
Serial.print("1");
state = !state;
digitalWrite(ledOut, state);
}
Applicazioni
Arduino con questo codice può essere utilizzato come generatore di impulsi tramite un cavo coassiale e nello stesso tempo inoltrare verso la seriale (USB) un messaggio di flag verso un PC. Questo flag può essere letto da un SW creato nel PC (per esempio con C++) che invia verso una diversa porta seriale un apposito segnale sincronizzato con gli impulsi.
Questo e’ il tipico esempio di un simulatore di un ricevitore GPS che fornisce coordinate posizione e tempo tramite la seriale associati all’instante del impulso 1PPS.
AMPLIFICATORE DI ONDE QUADRE DA 5 A 10V AD ALTA FREQUENZA
Spesso il segnale di impulso del ricevitore GPS è di 10 V: 10V 1pps invece l’output del Arduino è di 5V pertanto è necessario anche sviluppare un piccolo amplificatore da 5V a 10V descritto in questo post