Hi pYro_65,
Even I declare the function outside the loop, the error still happen.
my code:
#include <avr/interrupt.h>
#include <stdlib.h>
int led =13;
const int N=100;
float voltageValue[N];
float voltage[N];
int PressStatus;//Pressing flag;
//define Sinewave
char sinetable [32];
int j ;
void ioinit (void)
{
//Initialize output ports
PORTD = B11111111;
DDRD = B11111111;
}
void timer_setup(){
TCCR2A = 0;
TCNT2=455; //455 outputs 1.007khz
TCCR2B = B00000010;
//Timer2 Overflow Interrupt Enable
TIMSK2 = 1<<TOIE2;
}
void setup(){
ioinit();
arraysetup();
cli();
timer_setup();
j = 0;
sei();
//initialize serial communication at 4800bit per second;
Serial.begin(4800);
pinMode (led,OUTPUT);
}
void arraysetup(void){
sinetable[0]=127; // Put 32 step 8 bit sine table into array.
sinetable[1]=152;
sinetable[2]=176;
sinetable[3]=198;
sinetable[4]=217;
sinetable[5]=233;
sinetable[6]=245;
sinetable[7]=252;
sinetable[8]=254;
sinetable[9]=252;
sinetable[10]=245;
sinetable[11]=233;
sinetable[12]=217;
sinetable[13]=198;
sinetable[14]=176;
sinetable[15]=152;
sinetable[16]=128;
sinetable[17]=103;
sinetable[18]=79;
sinetable[19]=57;
sinetable[20]=38;
sinetable[21]=22;
sinetable[22]=10;
sinetable[23]=3;
sinetable[24]=0;
sinetable[25]=3;
sinetable[26]=10;
sinetable[27]=22;
sinetable[28]=38;
sinetable[29]=57;
sinetable[30]=79;
sinetable[31]=103;
}
void loop(){
int i;
for(i=0;i<N;i++){
//read the input on analog pin A0;
voltageValue[i] = analogRead(A0);
voltage[i] = voltageValue[i] * (5.0 / 1023.0);
if (i>0&&voltage[i]-voltage[i-1]>=0.1){
// Serial.println("voltage = ");
PressStatus=1;
digitalWrite(led,HIGH);
}
else {
PressStatus=0;
digitalWrite(led,LOW);
}
[b] //call SineWave generator function[/b]
ISR(TIMER2_OVF_vect) {
if (PressStatus==1){
PORTD=(sinetable[j++]);
TCNT2=455;
if(j==32){
j=0;
}
}
}
Serial.println(voltage[i]);
//Serial.println(Press);
}
}