#include "talkie.h"
Talkie voice;
const uint8_t spALERT[] PROGMEM = {0xA5, 0xCF, 0xC6, 0xAB, 0x55, 0x5B, 0xAF, 0x39, 0xDA, 0xC9, 0x54, 0xDD, 0xBC, 0xC6, 0xC2, 0x3C, 0x27, 0x20, 0xCF, 0x1C, 0xD7, 0x30, 0xB0, 0x45, 0x16, 0x69, 0x1D, 0xC3, 0x11, 0xE4, 0x59, 0x8A, 0x7C, 0xB5, 0x9B, 0x8B, 0xD9, 0x30, 0xB7, 0xD3, 0x76, 0x19, 0x9A, 0x25, 0x59, 0x57, 0x59, 0xEC, 0x11, 0xAF, 0xE8, 0xD9, 0xF9, 0x2A, 0x8A, 0x1D, 0xF0, 0x75, 0x3F, 0x73, 0xAC, 0x87, 0x3B, 0xA2, 0x0B, 0xAA, 0x2B, 0xCF, 0xE4, 0x10, 0xA1, 0xDC, 0x45, 0x64, 0x03, 0x00, 0x80, 0x01, 0x66, 0x36, 0x33, 0xC0, 0xAB, 0xD5, 0x0A, 0x68, 0x25, 0x85, 0x02, 0xFF, 0x0F};
unsigned long ch[10],t[10];
int pulse=0;
void setup(){
PCICR |=(1<<PCIE0);
PCMSK0 |=(1<<PCINT0);
Serial.begin(9600);
}
void loop(){
if (ch[5]>1500){
voice.say(spALERT);
}
}
ISR(PCINT0_vect){
if(PINB & B00000001){
t[pulse]=micros();
switch(pulse){
case 1:
ch[1]=t[1]-t[0];
pulse ++;
if (ch[1]>3000){
t[0]=t[1];
pulse=1;
}
break;
case 2:
ch[2]=t[2]-t[1];
pulse ++;
if (ch[2]>3000){
t[0]=t[2];
pulse=1;
}
break;
case 3:
ch[3]=t[3]-t[2];
pulse ++;
if (ch[3]>3000){
t[0]=t[3];
pulse=1;
}
break;
case 4:
ch[4]=t[4]-t[3];
pulse ++;
if (ch[4]>3000){
t[0]=t[4];
pulse=1;
}
break;
case 5:
ch[5]=t[5]-t[4];
pulse ++;
if (ch[5]>3000){
t[0]=t[5];
pulse=1;
}
break;
case 6:
ch[6]=t[6]-t[5];
pulse ++;
if (ch[6]>3000){
t[0]=t[6];
pulse=1;
}
break;
case 7:
ch[7]=t[7]-t[6];
pulse ++;
if (ch[7]>3000){
t[0]=t[7];
pulse=1;
}
break;
case 8:
ch[8]=t[8]-t[7];
pulse ++;
if (ch[8]>3000){
t[0]=t[8];
pulse=1;
}
break;
case 9:
ch[9]=t[9]-t[8];
pulse ++;
if (ch[9]>3000){
t[0]=t[9];
pulse=1;
}
break;
default:
pulse ++;
break;
}
}}
}
Hi, in the above code I want a speaker to say "alert" only once when ch[5]>1500
(Which is a ppm pulse).But the problem is when the ch[5]>1500 it repeatedly says "alert" .How could I do that ????please help me I am a beginner to Arduino programming.