Ciao.
Sto lavorando su un lettore di bar code basato sulla lettura di un fotodiodo messo in moto da un motore stepper e stavo facendo delle prove per controllare il funzionamento dell'interrupt.
Ho creato un circuito con uno stepper e un fotodiodo, il cui segnale è aquisito nell'isr sottoforma di voltaggio, in particolare in caso di luce alta il voltaggio è alto e in caso di buio si ha un valore basso. Nel loop ho inserito uno 'switch case': nel caso di default attende la pressione di un pulsante creato su Processing (interfaccia grafica), nel caso start il motore inizia a girare per un tot e se il fotodiodo ha un segnale inferiore ad una soglia si passa al caso lettura in cui semplicemente vorrei verificare che il valore sia stato letto correttamente.
Quando compilo lo sketch mi da l'errore 'expected unqualified-id before string constant' e mi sottolinea la linea di codice 'void ISR(TIMER1_OVF_vect){'.
Sapreste aiutarmi a risolvere il problema?
Vi scrivo il mio codice di seguito.
#include <avr/io.h>
#include <avr/interrupt.h>
#include <Stepper.h>
#define THRESHOLD 2 //V
#define START 1
#define READING 2
int diode = 3;
int PD = 0;
float sensorValue;
volatile float voltage = 0;
unsigned int state = 0;
int static stepMotore = 2068; //step per fare un giro completo
Stepper myStepper(stepMotore, 8, 9, 10, 11);
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(diode, OUTPUT);
digitalWrite(diode, HIGH);
myStepper.setSpeed(3); // 3 rpm
TIMSK1 &= ~(1<<TOIE1);
TCCR1A &= ~((1<<WGM11) | (1<<WGM10));
TCCR1B &= ~((1<<WGM12) | (1<<WGM13));
TIMSK1 &= ~(1<<OCIE1A);
TCCR1B |= (1<<CS12); //prescaler 256
TCCR1B &= ~(1<<CS11);
TCCR1B &= ~(1<<CS10);
TCNT1H = 0xE7;
TCNT1L = 0x95;
TIMSK1 |= (1<<TOIE1);
}
void loop() {
// put your main code here, to run repeatedly:
switch(state){
case START:
//...//
myStepper.step(1150);
if(voltage < THRESHOLD){
state = READING;
}
break;
case READING:
Serial.println("valore letto");
break;
default: //WAITING
if(Serial.available()){
String command = Serial.readStringUntil('\n');
if (command == "on"){
state = START;
}
}
}
void ISR(TIMER1_OVF_vect){
TCNT1H = 0xE7;
TCNT1L = 0x95;
//lettura fotodiodo
sensorValue = analogRead(PD);
voltage = (sensorValue/1024.0)*5;
//Serial.println(String(voltage,2)+"V"); //avoid serial monitor during interrupt
}