techElder
Well-known member
This is a problem program for me.
I have 3 buttons and 3 values to either increase or decrease.
With one of the values, I can get by with increasing only with a rollover to the minimum value after the maximum value.
There is a "heartbeat" routine that interrupts the program at BPM intervals, so I am trying to avoid commands that are problematic to return to.
What I've implemented here is not working well from a user's perspective. It is clunky at best.
I am seeking a better solution for changing these three values with three switches.
OPERATING METHOD THAT DOESN'T WORK WELL
Change Value DutyCycle: This value is the one most often changed or the default value. Simply press the INCREASE or DECREASE button to change.
Change Value BPM: This value changes sporadically. One must hold down the DUTY_BPM button while pressing either INCREASE or DECREASE button.
Change Value ScriptNumber: This change doesn't happen often. One must hold down BOTH INCREASE AND DECREASE and press DUTY_BPM button to change value.
Values for DutyCycle range from 0 to 1000.
Values for BPM range from 5 to 100.
Values for ScriptNumber range from 1 to 7.
I have 3 buttons and 3 values to either increase or decrease.
With one of the values, I can get by with increasing only with a rollover to the minimum value after the maximum value.
There is a "heartbeat" routine that interrupts the program at BPM intervals, so I am trying to avoid commands that are problematic to return to.
What I've implemented here is not working well from a user's perspective. It is clunky at best.
I am seeking a better solution for changing these three values with three switches.
OPERATING METHOD THAT DOESN'T WORK WELL
Change Value DutyCycle: This value is the one most often changed or the default value. Simply press the INCREASE or DECREASE button to change.
Change Value BPM: This value changes sporadically. One must hold down the DUTY_BPM button while pressing either INCREASE or DECREASE button.
Change Value ScriptNumber: This change doesn't happen often. One must hold down BOTH INCREASE AND DECREASE and press DUTY_BPM button to change value.
Values for DutyCycle range from 0 to 1000.
Values for BPM range from 5 to 100.
Values for ScriptNumber range from 1 to 7.
Code:
[color=Green]'-----------------------------
[PLAIN]'------[ PROGRAM START ]------[/PLAIN]
'-----------------------------[/color]
[color=Blue]do[/color]
[color=Green]' pushbutton change routines here
' Change the BPM
[/color][color=Blue]do while [/color][color=Purple]DUTY_BPM [/color][color=DarkCyan]= [/color][color=Blue]TRUE
if [/color][color=Purple]INCREASE [/color][color=DarkCyan]= [/color][color=Blue]TRUE then
[/color][color=Purple]BPM [/color][color=DarkCyan]= [/color][color=Purple]BPM [/color][color=DarkCyan]+ [/color][color=Blue]BPMCHANGE [/color][color=DarkCyan]MAX [/color][color=Navy]100
[/color][color=Green]'pause KEYPRESSDELAY
[/color][color=Purple]resetPWM [/color][color=DarkCyan]= [/color][color=Blue]TRUE
gosub [/color][color=Black]BeepNoise
[/color][color=Blue]elseif [/color][color=Purple]DECREASE [/color][color=DarkCyan]= [/color][color=Blue]TRUE then
[/color][color=Purple]BPM [/color][color=DarkCyan]= [/color][color=Purple]BPM [/color][color=DarkCyan]- [/color][color=Blue]BPMCHANGE [/color][color=DarkCyan]MIN [/color][color=Navy]5
[/color][color=Green]'pause KEYPRESSDELAY
[/color][color=Purple]resetPWM [/color][color=DarkCyan]= [/color][color=Blue]TRUE
gosub [/color][color=Black]BeepNoise
[/color][color=Blue]endif
do while [/color][color=Purple]INCREASE [/color][color=DarkCyan]= [/color][color=Blue]TRUE [/color][color=DarkCyan]OR [/color][color=Purple]DECREASE [/color][color=DarkCyan]= [/color][color=Blue]TRUE [/color][color=Black]: [/color][color=Blue]loop [/color][color=Green]; until button released
[/color][color=Blue]loop
[/color][color=Green]' Change the DutyCycle
[/color][color=Blue]do while [/color][color=Purple]INCREASE [/color][color=DarkCyan]= [/color][color=Blue]TRUE [/color][color=DarkCyan]AND [/color][color=Purple]DECREASE [/color][color=DarkCyan]= [/color][color=Blue]FALSE
[/color][color=Purple]DutyCycle [/color][color=DarkCyan]= [/color][color=Purple]DutyCycle [/color][color=DarkCyan]+ [/color][color=Blue]DUTYCHANGE [/color][color=DarkCyan]MAX [/color][color=Blue]DUTYMAX
[/color][color=Green]'pause KEYPRESSDELAY
[/color][color=Purple]resetPWM [/color][color=DarkCyan]= [/color][color=Blue]TRUE
gosub [/color][color=Black]BeepNoise
[/color][color=Blue]do while [/color][color=Purple]INCREASE [/color][color=DarkCyan]= [/color][color=Blue]TRUE [/color][color=Black]: [/color][color=Blue]loop [/color][color=Green]; until button released
[/color][color=Blue]loop
do while [/color][color=Purple]INCREASE [/color][color=DarkCyan]= [/color][color=Blue]FALSE [/color][color=DarkCyan]AND [/color][color=Purple]DECREASE [/color][color=DarkCyan]= [/color][color=Blue]TRUE
[/color][color=Purple]DutyCycle [/color][color=DarkCyan]= [/color][color=Purple]DutyCycle [/color][color=DarkCyan]- [/color][color=Blue]DUTYCHANGE [/color][color=DarkCyan]MIN [/color][color=Blue]DUTYMIN
[/color][color=Green]'pause KEYPRESSDELAY
[/color][color=Purple]resetPWM [/color][color=DarkCyan]= [/color][color=Blue]TRUE
gosub [/color][color=Black]BeepNoise
[/color][color=Blue]do while [/color][color=Purple]DECREASE [/color][color=DarkCyan]= [/color][color=Blue]TRUE [/color][color=Black]: [/color][color=Blue]loop [/color][color=Green]; until button released
[/color][color=Blue]loop
if [/color][color=Purple]resetPWM [/color][color=DarkCyan]= [/color][color=Blue]TRUE then gosub [/color][color=Black]AdjustPWMoutput : [/color][color=Purple]resetPWM [/color][color=DarkCyan]= [/color][color=Blue]FALSE
[/color][color=Green]' Change current script 1 - 7
[/color][color=Blue]do while [/color][color=Purple]INCREASE [/color][color=DarkCyan]= [/color][color=Blue]TRUE [/color][color=DarkCyan]AND [/color][color=Purple]DECREASE [/color][color=DarkCyan]= [/color][color=Blue]TRUE
if [/color][color=Purple]DUTY_BPM [/color][color=DarkCyan]= [/color][color=Blue]TRUE then
inc [/color][color=Purple]ScriptNumber
[/color][color=Blue]if [/color][color=Purple]ScriptNumber [/color][color=DarkCyan]> [/color][color=Navy]7 [/color][color=Blue]then [/color][color=Green]; only 7 scripts
[/color][color=Purple]ScriptNumber [/color][color=DarkCyan]= [/color][color=Navy]1
[/color][color=Blue]endif
[/color][color=Purple]resetScript [/color][color=DarkCyan]= [/color][color=Blue]TRUE
gosub [/color][color=Black]BeepNoise
[/color][color=Blue]endif
do while [/color][color=Purple]DUTY_BPM [/color][color=DarkCyan]= [/color][color=Blue]TRUE [/color][color=Black]: [/color][color=Blue]loop [/color][color=Green]; until button released
[/color][color=Blue]loop
if [/color][color=Purple]resetScript [/color][color=DarkCyan]= [/color][color=Blue]TRUE then
gosub [/color][color=Black]StartNewScript
[/color][color=Purple]resetScript [/color][color=DarkCyan]= [/color][color=Blue]FALSE
endif
loop[/color]
[color=Green]'---------------------------
[PLAIN]'------[ PROGRAM END ]------[/PLAIN]
'---------------------------[/color]
[color=Blue]END[/color]