|
Post by powersoft on Jul 29, 2015 10:38:07 GMT -8
I have programmed a slider, see code below. The slider is not working well. I run this code on Uno. Wat is wrong on this?
Thanks
#================================================== #include <SPI.h> #include <GD2.h>
#define TAG_SLIDER 201
int waarde=180;
void setup() { Serial.begin(115200); GD.begin(); }
void loop() { GD.ClearColorRGB(0x103000); GD.Clear(); //Draw clock GD.cmd_clock(50,50,50,OPT_FLAT,12,33,45,0);
//Draw Slider GD.Tag(TAG_SLIDER); GD.cmd_slider(100,150,100,10,OPT_FLAT,waarde,360); GD.cmd_track( 100,150,100,10,TAG_SLIDER); GD.get_inputs(); switch (GD.inputs.track_tag & 0xff) { case TAG_SLIDER: { waarde=GD.inputs.track_val; Serial.println(waarde); break; } } GD.swap(); }
|
|
|
Post by jamesbowman on Jul 29, 2015 16:41:42 GMT -8
Aha, OK. So the problem here is that there is a difference between the range of the slider 0-360:
GD.cmd_slider(100,150,100,10,OPT_FLAT,waarde,360); and the range of the tracker, because GD.inputs.track_val is always 0-65535:
GD.cmd_track(100,150,100,10,TAG_SLIDER); ... waarde = GD.inputs.track_val;
So the fix is to either (1) make the slider (and waarde) have a range of 0-65535:
GD.cmd_slider(100,150,100,10,OPT_FLAT,waarde,65535); or (2) rescale the result from track_val to the range 0-360:
waarde = GD.inputs.track_val * 360L / 65535; Here is the whole program for option (2):
#include <SPI.h> #include <GD2.h>
#define TAG_SLIDER 201
int waarde=180;
void setup() { Serial.begin(115200); GD.begin(); }
void loop() { GD.ClearColorRGB(0x103000); GD.Clear();
//Draw clock GD.cmd_clock(50,50,50,OPT_FLAT,12,33,45,0);
//Draw Slider GD.Tag(TAG_SLIDER); GD.cmd_slider(100,150,100,10,OPT_FLAT,waarde,360); GD.cmd_track( 100,150,100,10,TAG_SLIDER);
GD.get_inputs(); switch (GD.inputs.track_tag & 0xff) { case TAG_SLIDER: waarde = GD.inputs.track_val * 360L / 65535; Serial.println(waarde); break; } GD.swap(); }
|
|