User`s manual

78 www.rabbit.com Applications Programming
else if (flexDigIn(&flex_digin35)) {
switch_pressed = &flex_digin35;
led = &flex_digout36;
switchnum = 3;
}
else if (flexDigIn(&flex_digin37)) {
switch_pressed = &flex_digin37;
led = &flex_digout38;
switchnum = 4;
}
} // end while loop
Similarly, we check each of the other three switches.
// Wait 50 ms to make sure the switch stays pressed (debouncing)
waitfor(DelayMs(50));
// Check if the switch is still pressed
if (flexDigIn(switch_pressed) == 1) {
To make sure that the signal from the switch has settled, we wait 50 ms and recheck the digital input. Note
that there is no ‘&’ before switch_pressed. This is because switch_pressed is already a
pointer—it is used to point to which switch has been pressed.
If this debouncing check fails, then we will reach the end of the costatement, which means that the costate-
ment starts over again from the top. Thus, we once again start monitoring all of the switches.
// Light the corresponding output LED
flexDigOut(led, 0);
We have now accepted the switch press. Recall that led is also already a pointer, and thus it is also not
preceded by an “&.” This line simply turns on the LED to indicate that the switch has been pressed.
// Play the tone
flexToneLoad(tones[switchnum], tone_len[switchnum], REPEAT_TONE);