Hi,
I am working on a peizo sensor project:
when I press the sensor, I need to produce a HIGH flag.
Actually I have achieved the goal in previous version code. Now I just want to hold the flag for 1 second if the flag is produced. But the flag didn't work.
I don't know what happen on my code. My Code is as the following:
#include <avr/interrupt.h>
#include <stdlib.h>
#include <LiquidCrystal.h> //LCD Library
int led =13;
const int N=100;
float voltageValue[N];
float voltage[N];
boolean PressStatus;//Pressing flag;
LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2); //define lcd
//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);
//Set Up LCD Display
lcd.begin(16,2); // columns, rows. use 16,2 for a 16x2 LCD, etc.
lcd.clear(); // start with a blank screen
lcd.setCursor(0,0); // set cursor to column 0, row 0 (the first row)
lcd.print("Welcome To SPS!");
delay(3000);
lcd.clear(); // start with a blank screen
lcd.setCursor(0,0); // set cursor to column 0, row 0 (the first row)
lcd.print("Voltage of Sensor:"); // change this text to whatever you like. keep it clean.
}
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.03){
float time=millis();
if (time>500){
PressStatus=0;
digitalWrite(led,LOW);
}
else{
PressStatus=1;
digitalWrite(led,HIGH);
}
}
else {
PressStatus=0;
digitalWrite(led,LOW);
lcd.setCursor(0,1);
lcd.print(voltage[i],3);
}
Serial.println(voltage[i]);
//Serial.println(Press);
}
}
//call SineWave generator function
ISR(TIMER2_OVF_vect) {
if (PressStatus==1){
PORTD=(sinetable[j++]);
TCNT2=455;
if(j==32){
j=0;
}
}
}