sbit RLY_1 at RC4_bit;
sbit RLY_2 at RC5_bit;
sbit RLY_3 at RA4_bit;
sbit RLY_4 at RA5_bit;
sbit null at RA0_bit;
volatile unsigned char testflag;
sbit normal at testflag.B1;
# define INTAP_LOW 0
# define INTAP_MED 1
# define INTAP_HIGH 2
#define OUTTAP_LOW 0
# define OUTTAP_HIGH 1
unsigned char INPUT_TAPPING;
unsigned char OUTPUT_TAPPING;
void Init(void){
PORTA = 0x0;
TRISA = 0x1;
PORTC = 0x0;
TRISC = 0x2;
ANSEL = 0x20;
CMCON = 0x7;
}
void StabilizeVoltage(void) {
unsigned int adv, new_adv,adv_old, hysteriasis, count;
adv = ADC_Read (5);
if (adv < 300) {
normal = 0;
INPUT_TAPPING = INTAP_LOW;
OUTPUT_TAPPING = OUTTAP_LOW;
adv_old = adv;
}
else if (adv > 1020) {
normal = 0;
INPUT_TAPPING = INTAP_HIGH;
OUTPUT_TAPPING = OUTTAP_HIGH;
adv_old = adv;
}
else {
normal =1;
if (adv < adv_old) {
hysteriasis = adv_old - adv;
}
else
hysteriasis = adv - adv_old;
if (hysteriasis >= 25){
if (adv < 360) {
INPUT_TAPPING = INTAP_LOW;
OUTPUT_TAPPING = OUTTAP_LOW;
adv_old = adv;
}
else if (adv<490 ) {
INPUT_TAPPING = INTAP_LOW;
OUTPUT_TAPPING = OUTTAP_HIGH;
adv_old = adv;
}
else if (adv<649 ) {
INPUT_TAPPING = INTAP_MED;
OUTPUT_TAPPING = OUTTAP_LOW;
adv_old = adv;
}
else if (adv<969 ) {
INPUT_TAPPING = INTAP_MED;
OUTPUT_TAPPING = OUTTAP_HIGH;
adv_old = adv;
}
else if (adv<1020 ) {
INPUT_TAPPING = INTAP_HIGH;
OUTPUT_TAPPING = OUTTAP_LOW;
adv_old = adv;
}
else {
INPUT_TAPPING = INTAP_HIGH;
OUTPUT_TAPPING = OUTTAP_HIGH;
adv_old = adv;
}
}
}
[COLOR="#FF0000"]while (null);
while (!null);
delay_us(5000);[/COLOR]
if (INPUT_TAPPING == INTAP_LOW ){
RLY_1 =0;
RLY_2 =0;
}
else if ( INPUT_TAPPING == INTAP_MED) {
RLY_1 =0;
RLY_2 =1;
}
else {
RLY_1 =1;
RLY_2 =1;
}
if (OUTPUT_TAPPING == OUTTAP_HIGH) {
RLY_3 = 1;
}
else {
RLY_3 = 0;
}
if (normal == 1) {
RLY_4 = 1;
}
else {
RLY_4 = 0;
}
}
void main() {
Init();
while(1){
StabilizeVoltage();
}
}