the code below is for detecting switch signals from a membrane board and display it on an LCD
everything works fine but the response for the switch pressed is skipped.
i.e when ever a switch is pressed a warning is displayed for certain conditions but these are not activated sometimes, every 2 to 3 presses a switch gives an output. this has to be reduced to every single time the switch is pressed
below is the code:
{
if(WHL==1) //Work head lock clear field
{
lcdcomm(0x97); //Blank message
lcdmsg(" ");
}
if(SPHL==1) //Sphere lock blank
{
lcdcomm(0xA2); //Blank message
lcdmsg(" ");
}
if(WHUL==1) //Work head unlock clear field
{
reg1=0; //Switch status
lcdcomm(0x97); //Blank message
lcdmsg(" ");
}
if(SPHUL==1) //Sphere unlock clear field
{
reg2=0; //Switch status
lcdcomm(0xA2); //Blank message
lcdmsg(" ");
}
if(WHL==0) //Work head lock ON status
{
reg1=0; //Switch status
reg=1; //Switch status
lcdcomm(0x97); //Lock message
lcdmsg("Lock");
}
if(WHUL==0) //Work head unlock ON status
{
reg1=1; //Switch status
reg=1; //Switch status
lcdcomm(0x97); //Unlock message
lcdmsg("UnLock");
}
if(SPHL==0) //Sphere lock ON status
{
reg2=0; //Switch status
reg=1; //Switch status
lcdcomm(0xA2); //Lock message
lcdmsg("Lock");
}
if(SPHUL==0) //Sphere unlock ON status
{
reg2=2; //Switch status
reg=1; //Switch status
lcdcomm(0xA2); //Unlock message
lcdmsg("UnLock");
}
swt=reg1+reg2; //Switch status
if(SPON==0) //Spindle ON status
{
reg=2; //Switch status
this is when the switch has to be detected for the error msg
}
else
if(SPON==1) //Spindle OFF status
{
reg=1; //Switch status
error msg for a different switch }
if(SPJ==0) //Spindle JOG status
{
reg=7; //Switch status
}
if(SPL==0) //Spindle LOCK status
{
reg=8; //Switch status
}
switch(reg) //Switch
{
case 1: //Case 1 of switch
lcdcomm(0xDC);
lcdmsg(" ");
lcdcomm(0xDC); //OFF message
lcdmsg("OFF");
break;
case 2: //Case 2 of switch
lcdcomm(0xDC);
lcdmsg(" ");
lcdcomm(0xDC); //ON message
lcdmsg("ON");
break;
case 3: //Case 3 of switch
buzz(); //Call buzz function
clear(); //Work head warning message with blink and buzz
lcdcomm(0xC6);
lcdmsg("CAUTION!");
lcdcomm(0x99);
lcdmsg("Work Head");
lcdcomm(0xDA);
lcdmsg("UnLocked");
buzz();
Delay10KTCYx(200);
clear();
buzz();
lcdcomm(0xC6);
lcdmsg("CAUTION!");
lcdcomm(0x99);
lcdmsg("Work Head");
lcdcomm(0xDA);
lcdmsg("UnLocked");
buzz();
Delay10KTCYx(200);
clear();
buzz();
lcdcomm(0xC6);
lcdmsg("CAUTION!");
lcdcomm(0x99);
lcdmsg("Work Head");
lcdcomm(0xDA);
lcdmsg("UnLocked");
buzz();
Delay10KTCYx(200);
clear();
buzz();
reg=0; //Switch status
break;
case 4: //Case 4 of switch
buzz(); //Call buzz function
clear(); //Sphere warning message with blink and buzz
lcdcomm(0xC6);
lcdmsg("CAUTION!");
lcdcomm(0x9B);
lcdmsg("Sphere");
lcdcomm(0xDA);
lcdmsg("UnLocked");
buzz();
Delay10KTCYx(200);
clear();
buzz();
lcdcomm(0xC6);
lcdmsg("CAUTION!");
lcdcomm(0x9B);
lcdmsg("Sphere");
lcdcomm(0xDA);
lcdmsg("UnLocked");
buzz();
Delay10KTCYx(200);
clear();
buzz();
lcdcomm(0xC6);
lcdmsg("CAUTION!");
lcdcomm(0x9B);
lcdmsg("Sphere");
lcdcomm(0xDA);
lcdmsg("UnLocked");
buzz();
Delay10KTCYx(200);
clear();
buzz();
reg=0; //Switch status
break;
case 5: //Case 5 of switch
buzz(); //Call buzz function
clear(); //WH & SPH warning message with blink and buzz
lcdcomm(0xC6);
lcdmsg("CAUTION!");
lcdcomm(0x95);
lcdmsg("Work Head & Sphere");
lcdcomm(0xDA);
lcdmsg("UnLocked");
buzz();
Delay10KTCYx(200);
clear();
buzz();
lcdcomm(0xC6);
lcdmsg("CAUTION!");
lcdcomm(0x95);
lcdmsg("Work Head & Sphere");
lcdcomm(0xDA);
lcdmsg("UnLocked");
buzz();
Delay10KTCYx(200);
clear();
buzz();
lcdcomm(0xC6);
lcdmsg("CAUTION!");
lcdcomm(0x95);
lcdmsg("Work Head & Sphere");
lcdcomm(0xDA);
lcdmsg("UnLocked");
buzz();
Delay10KTCYx(200);
clear();
buzz();
reg=0; //Switch status
break;
case 6: //Case 6 of switch
buzz(); //Call buzz function
clear(); //Spindle warning message with blink and buzz
lcdcomm(0xC6);
lcdmsg("CAUTION!");
lcdcomm(0x9A);
lcdmsg("Spindle");
lcdcomm(0xDD);
lcdmsg("ON");
buzz();
Delay10KTCYx(200);
clear();
buzz();
lcdcomm(0xC6);
lcdmsg("CAUTION!");
lcdcomm(0x9A);
lcdmsg("Spindle");
lcdcomm(0xDD);
lcdmsg("ON");
buzz();
Delay10KTCYx(200);
clear();
buzz();
lcdcomm(0xC6);
lcdmsg("CAUTION!");
lcdcomm(0x9A);
lcdmsg("Spindle");
lcdcomm(0xDD);
lcdmsg("ON");
buzz();
Delay10KTCYx(200);
clear();
buzz();
reg=0; //Switch status
break;
case 7:
lcdcomm(0xDC);
lcdmsg(" ");
lcdcomm(0xDC); //Jog message
lcdmsg("JOG");
break;
case 8:
lcdcomm(0xDC);
lcdmsg(" ");
lcdcomm(0xDC); //Lock message
lcdmsg("LOCK");
break;
}
return;
}
switch statement is used for error msg
is this because the switch cannot be detected while the processor is scanning each signal in an order? if so how to over come this error?
everything works fine but the response for the switch pressed is skipped.
i.e when ever a switch is pressed a warning is displayed for certain conditions but these are not activated sometimes, every 2 to 3 presses a switch gives an output. this has to be reduced to every single time the switch is pressed
below is the code:
{
if(WHL==1) //Work head lock clear field
{
lcdcomm(0x97); //Blank message
lcdmsg(" ");
}
if(SPHL==1) //Sphere lock blank
{
lcdcomm(0xA2); //Blank message
lcdmsg(" ");
}
if(WHUL==1) //Work head unlock clear field
{
reg1=0; //Switch status
lcdcomm(0x97); //Blank message
lcdmsg(" ");
}
if(SPHUL==1) //Sphere unlock clear field
{
reg2=0; //Switch status
lcdcomm(0xA2); //Blank message
lcdmsg(" ");
}
if(WHL==0) //Work head lock ON status
{
reg1=0; //Switch status
reg=1; //Switch status
lcdcomm(0x97); //Lock message
lcdmsg("Lock");
}
if(WHUL==0) //Work head unlock ON status
{
reg1=1; //Switch status
reg=1; //Switch status
lcdcomm(0x97); //Unlock message
lcdmsg("UnLock");
}
if(SPHL==0) //Sphere lock ON status
{
reg2=0; //Switch status
reg=1; //Switch status
lcdcomm(0xA2); //Lock message
lcdmsg("Lock");
}
if(SPHUL==0) //Sphere unlock ON status
{
reg2=2; //Switch status
reg=1; //Switch status
lcdcomm(0xA2); //Unlock message
lcdmsg("UnLock");
}
swt=reg1+reg2; //Switch status
if(SPON==0) //Spindle ON status
{
reg=2; //Switch status
Rich (BB code):
if(WH_UL==0 || SPH_UL==0) //Check WH & SPH unlock status
{
reg=6; //Switch status
}
}
else
if(SPON==1) //Spindle OFF status
{
reg=1; //Switch status
Rich (BB code):
if(SP_ON==0) //Check spindle ON status
{
reg=2+swt; //Switch status
}
if(SPJ==0) //Spindle JOG status
{
reg=7; //Switch status
}
if(SPL==0) //Spindle LOCK status
{
reg=8; //Switch status
}
switch(reg) //Switch
{
case 1: //Case 1 of switch
lcdcomm(0xDC);
lcdmsg(" ");
lcdcomm(0xDC); //OFF message
lcdmsg("OFF");
break;
case 2: //Case 2 of switch
lcdcomm(0xDC);
lcdmsg(" ");
lcdcomm(0xDC); //ON message
lcdmsg("ON");
break;
case 3: //Case 3 of switch
buzz(); //Call buzz function
clear(); //Work head warning message with blink and buzz
lcdcomm(0xC6);
lcdmsg("CAUTION!");
lcdcomm(0x99);
lcdmsg("Work Head");
lcdcomm(0xDA);
lcdmsg("UnLocked");
buzz();
Delay10KTCYx(200);
clear();
buzz();
lcdcomm(0xC6);
lcdmsg("CAUTION!");
lcdcomm(0x99);
lcdmsg("Work Head");
lcdcomm(0xDA);
lcdmsg("UnLocked");
buzz();
Delay10KTCYx(200);
clear();
buzz();
lcdcomm(0xC6);
lcdmsg("CAUTION!");
lcdcomm(0x99);
lcdmsg("Work Head");
lcdcomm(0xDA);
lcdmsg("UnLocked");
buzz();
Delay10KTCYx(200);
clear();
buzz();
reg=0; //Switch status
break;
case 4: //Case 4 of switch
buzz(); //Call buzz function
clear(); //Sphere warning message with blink and buzz
lcdcomm(0xC6);
lcdmsg("CAUTION!");
lcdcomm(0x9B);
lcdmsg("Sphere");
lcdcomm(0xDA);
lcdmsg("UnLocked");
buzz();
Delay10KTCYx(200);
clear();
buzz();
lcdcomm(0xC6);
lcdmsg("CAUTION!");
lcdcomm(0x9B);
lcdmsg("Sphere");
lcdcomm(0xDA);
lcdmsg("UnLocked");
buzz();
Delay10KTCYx(200);
clear();
buzz();
lcdcomm(0xC6);
lcdmsg("CAUTION!");
lcdcomm(0x9B);
lcdmsg("Sphere");
lcdcomm(0xDA);
lcdmsg("UnLocked");
buzz();
Delay10KTCYx(200);
clear();
buzz();
reg=0; //Switch status
break;
case 5: //Case 5 of switch
buzz(); //Call buzz function
clear(); //WH & SPH warning message with blink and buzz
lcdcomm(0xC6);
lcdmsg("CAUTION!");
lcdcomm(0x95);
lcdmsg("Work Head & Sphere");
lcdcomm(0xDA);
lcdmsg("UnLocked");
buzz();
Delay10KTCYx(200);
clear();
buzz();
lcdcomm(0xC6);
lcdmsg("CAUTION!");
lcdcomm(0x95);
lcdmsg("Work Head & Sphere");
lcdcomm(0xDA);
lcdmsg("UnLocked");
buzz();
Delay10KTCYx(200);
clear();
buzz();
lcdcomm(0xC6);
lcdmsg("CAUTION!");
lcdcomm(0x95);
lcdmsg("Work Head & Sphere");
lcdcomm(0xDA);
lcdmsg("UnLocked");
buzz();
Delay10KTCYx(200);
clear();
buzz();
reg=0; //Switch status
break;
case 6: //Case 6 of switch
buzz(); //Call buzz function
clear(); //Spindle warning message with blink and buzz
lcdcomm(0xC6);
lcdmsg("CAUTION!");
lcdcomm(0x9A);
lcdmsg("Spindle");
lcdcomm(0xDD);
lcdmsg("ON");
buzz();
Delay10KTCYx(200);
clear();
buzz();
lcdcomm(0xC6);
lcdmsg("CAUTION!");
lcdcomm(0x9A);
lcdmsg("Spindle");
lcdcomm(0xDD);
lcdmsg("ON");
buzz();
Delay10KTCYx(200);
clear();
buzz();
lcdcomm(0xC6);
lcdmsg("CAUTION!");
lcdcomm(0x9A);
lcdmsg("Spindle");
lcdcomm(0xDD);
lcdmsg("ON");
buzz();
Delay10KTCYx(200);
clear();
buzz();
reg=0; //Switch status
break;
case 7:
lcdcomm(0xDC);
lcdmsg(" ");
lcdcomm(0xDC); //Jog message
lcdmsg("JOG");
break;
case 8:
lcdcomm(0xDC);
lcdmsg(" ");
lcdcomm(0xDC); //Lock message
lcdmsg("LOCK");
break;
}
return;
}
switch statement is used for error msg
is this because the switch cannot be detected while the processor is scanning each signal in an order? if so how to over come this error?