A
Hi,
ich hab sowas in der Art mal mit einer Timer-Routine gemacht, in der ich den Status der jeweiligen Schaltfläche abgefragt hab und mit dem vorhergehenden Status dieser Schaltfläche verglichen habe:
UINT XPlusState = m_cXPlus.GetState();
if(XPlusState & 0x0004){
// X-Plus-gedrückt
if(m_XPlusButtonDown || m_pIsel->IsBusy()){
// X-Plus-Button war bereits gedrückt oder Steuerung noch nicht bereit
}
else{
// X-Plus-Knopf erstmals gedrückt
m_XLED.SetOnOff(TRUE);
Command.Format("@0a 800000,%d,0,%d,0,%d,0,%d",GeschwX,GeschwY,GeschwZ,GeschwZ);
m_pIsel->AddCommand(Command); // Fahrt X start
m_XPlusButtonDown = TRUE;
}
}
else{
// X-Plus-nicht-gedrückt
if(!m_XPlusButtonDown || m_pIsel->IsBusy()){
// X-Plus-Knopf war nicht gedrückt oder Steuerung noch nicht bereit
}
else{
// X-Plus-Button war gedrückt, erstmals losgelassen
m_XLED.SetOnOff(FALSE);
m_pIsel->StopBefehl(); // Fahrt X Stop
m_XPlusButtonDown = FALSE;
}
}
Ist zwar bestimmt nicht die sauberste Lösung und auch bei mehreren Schaltflächen (bei mir waren es eine Menge Code, aber es hat funktioniert..
(es ging um eine Schrittmotor-Ansteuerung, bei der eine manuelle Fahrt ausgelöst werden sollte, solange die Schaltfläche gedrückt war)