@@ -655,14 +655,14 @@ size_t MicroView::write(uint8_t c) {
655
655
setX (newx);
656
656
setY (newy);
657
657
value=0 ;
658
- // if (min>max) {
659
- // setMinValue(max);
660
- // setMaxValue(min);
661
- // }
662
- // else {
663
- setMinValue (min);
664
- setMaxValue (max);
665
- // }
658
+ // if (min>max) {
659
+ // setMinValue(max);
660
+ // setMaxValue(min);
661
+ // }
662
+ // else {
663
+ setMinValue (min);
664
+ setMaxValue (max);
665
+ // }
666
666
// drawFace();
667
667
// setValue(min);
668
668
}
@@ -686,18 +686,20 @@ size_t MicroView::write(uint8_t c) {
686
686
}
687
687
}
688
688
689
+ // -------------------------------------------------------------------------------------
690
+ // Slider Widget - start
691
+ // -------------------------------------------------------------------------------------
689
692
690
693
MicroViewSlider::MicroViewSlider (uint8_t newx, uint8_t newy, int16_t min, int16_t max):MicroViewWidget (newx, newy, min, max) {
691
694
style=0 ;
692
695
totalTicks=30 ;
693
-
694
696
needFirstDraw=true ;
695
697
prevValue=getMinValue ();
696
698
drawFace ();
697
699
draw ();
698
700
}
699
701
700
- MicroViewSlider::MicroViewSlider (uint8_t newx, uint8_t newy, int16_t min, int16_t max, uint8_t sty):MicroViewWidget (newx, newy, min, max) {
702
+ MicroViewSlider::MicroViewSlider (uint8_t newx, uint8_t newy, int16_t min, int16_t max, uint8_t sty):MicroViewWidget (newx, newy, min, max) {
701
703
if (sty==WIDGETSTYLE0) {
702
704
style=0 ;
703
705
totalTicks=30 ;
@@ -720,10 +722,10 @@ MicroViewSlider::MicroViewSlider(uint8_t newx, uint8_t newy, int16_t min, int16_
720
722
offsetY=getY ();
721
723
722
724
if (style>0 )
723
- majorLine=7 ;
725
+ majorLine=7 ;
724
726
else
725
- majorLine=4 ;
726
-
727
+ majorLine=4 ;
728
+
727
729
// Draw major tickers
728
730
for (uint8_t i=0 ; i<majorLine;i++) {
729
731
uView.lineV (offsetX+1 +(i*10 ), offsetY+3 , 5 );
@@ -740,18 +742,18 @@ MicroViewSlider::MicroViewSlider(uint8_t newx, uint8_t newy, int16_t min, int16_
740
742
}
741
743
742
744
if (style>0 ) {
743
- for (uint8_t i=0 ; i<4 ;i++) {
744
- uView.lineV (offsetX+33 +(i*2 ), offsetY+5 , 3 );
745
- }
746
- if (style>0 ) {
747
745
for (uint8_t i=0 ; i<4 ;i++) {
748
- uView.lineV (offsetX+43 +(i*2 ), offsetY+5 , 3 );
746
+ uView.lineV (offsetX+33 +(i*2 ), offsetY+5 , 3 );
749
747
}
750
- for (uint8_t i=0 ; i<4 ;i++) {
751
- uView.lineV (offsetX+53 +(i*2 ), offsetY+5 , 3 );
748
+ if (style>0 ) {
749
+ for (uint8_t i=0 ; i<4 ;i++) {
750
+ uView.lineV (offsetX+43 +(i*2 ), offsetY+5 , 3 );
751
+ }
752
+ for (uint8_t i=0 ; i<4 ;i++) {
753
+ uView.lineV (offsetX+53 +(i*2 ), offsetY+5 , 3 );
754
+ }
752
755
}
753
756
}
754
- }
755
757
756
758
}
757
759
@@ -789,6 +791,118 @@ MicroViewSlider::MicroViewSlider(uint8_t newx, uint8_t newy, int16_t min, int16_
789
791
uView.print (strBuffer);
790
792
}
791
793
794
+ // -------------------------------------------------------------------------------------
795
+ // Slider Widget - end
796
+ // -------------------------------------------------------------------------------------
797
+
798
+ // -------------------------------------------------------------------------------------
799
+ // Gauge Widget - start
800
+ // -------------------------------------------------------------------------------------
801
+
802
+ MicroViewGauge::MicroViewGauge (uint8_t newx, uint8_t newy, int16_t min, int16_t max):MicroViewWidget (newx, newy, min, max) {
803
+ style=0 ;
804
+ radius=15 ;
805
+ needFirstDraw=true ;
806
+ prevValue=getMinValue ();
807
+ drawFace ();
808
+ draw ();
809
+ }
810
+
811
+ MicroViewGauge::MicroViewGauge (uint8_t newx, uint8_t newy, int16_t min, int16_t max, uint8_t sty):MicroViewWidget (newx, newy, min, max) {
812
+ if (sty==WIDGETSTYLE0) {
813
+ style=0 ;
814
+ radius=15 ;
815
+ }
816
+ else {
817
+ style=1 ;
818
+ radius=23 ;
819
+ }
820
+ needFirstDraw=true ;
821
+ prevValue=getMinValue ();
822
+ drawFace ();
823
+ draw ();
824
+ }
825
+
826
+
827
+ void MicroViewGauge::drawFace () {
828
+ uint8_t offsetX, offsetY, majorLine;
829
+ float degreeSec, fromSecX, fromSecY, toSecX, toSecY;
830
+ offsetX=getX ();
831
+ offsetY=getY ();
832
+
833
+ uView.circle (offsetX,offsetY,radius);
834
+
835
+ for (int i=150 ;i<=390 ;i+=30 ) { // Major tick from 150 degree to 390 degree
836
+ degreeSec=i*(PI/180 );
837
+ fromSecX = cos (degreeSec) * (radius / 1.5 );
838
+ fromSecY = sin (degreeSec) * (radius / 1.5 );
839
+ toSecX = cos (degreeSec) * (radius / 1 );
840
+ toSecY = sin (degreeSec) * (radius / 1 );
841
+ uView.line (1 +offsetX+fromSecX,1 +offsetY+fromSecY,1 +offsetX+toSecX,1 +offsetY+toSecY);
842
+ }
843
+
844
+ if (radius>15 ) {
845
+ for (int i=150 ;i<=390 ;i+=15 ) { // Minor tick from 150 degree to 390 degree
846
+ degreeSec=i*(PI/180 );
847
+ fromSecX = cos (degreeSec) * (radius / 1.3 );
848
+ fromSecY = sin (degreeSec) * (radius / 1.3 );
849
+ toSecX = cos (degreeSec) * (radius / 1 );
850
+ toSecY = sin (degreeSec) * (radius / 1 );
851
+ uView.line (1 +offsetX+fromSecX,1 +offsetY+fromSecY,1 +offsetX+toSecX,1 +offsetY+toSecY);
852
+ }
853
+ }
854
+ }
855
+
856
+ void MicroViewGauge::draw () {
857
+ uint8_t offsetX, offsetY;
858
+ uint8_t tickPosition=0 ;
859
+ float degreeSec, fromSecX, fromSecY, toSecX, toSecY;
860
+
861
+ char strBuffer[5 ];
862
+ offsetX=getX ();
863
+ offsetY=getY ();
864
+
865
+ if (needFirstDraw) {
866
+ degreeSec = (((float )(prevValue-getMinValue ())/(float )(getMaxValue ()-getMinValue ()))*240 ); // total 240 degree in the widget
867
+ degreeSec = (degreeSec+150 ) * (PI/180 ); // 150 degree starting point
868
+ toSecX = cos (degreeSec) * (radius / 1.2 );
869
+ toSecY = sin (degreeSec) * (radius / 1.2 );
870
+ uView.line (offsetX,offsetY,1 +offsetX+toSecX,1 +offsetY+toSecY, WHITE,XOR);
871
+ sprintf (strBuffer," %4d" , prevValue); // we need to force 4 digit so that blank space will cover larger value
872
+ needFirstDraw=false ;
873
+ }
874
+ else {
875
+ // Draw previous pointer in XOR mode to erase it
876
+ degreeSec = (((float )(prevValue-getMinValue ())/(float )(getMaxValue ()-getMinValue ()))*240 ); // total 240 degree in the widget
877
+ degreeSec = (degreeSec+150 ) * (PI/180 );
878
+ toSecX = cos (degreeSec) * (radius / 1.2 );
879
+ toSecY = sin (degreeSec) * (radius / 1.2 );
880
+ uView.line (offsetX,offsetY,1 +offsetX+toSecX,1 +offsetY+toSecY, WHITE,XOR);
881
+
882
+ degreeSec = (((float )(getValue ()-getMinValue ())/(float )(getMaxValue ()-getMinValue ()))*240 ); // total 240 degree in the widget
883
+ degreeSec = (degreeSec+150 ) * (PI/180 ); // 150 degree starting point
884
+ toSecX = cos (degreeSec) * (radius / 1.2 );
885
+ toSecY = sin (degreeSec) * (radius / 1.2 );
886
+ uView.line (offsetX,offsetY,1 +offsetX+toSecX,1 +offsetY+toSecY, WHITE,XOR);
887
+
888
+ sprintf (strBuffer," %4d" , getValue ()); // we need to force 4 digit so that blank space will cover larger value
889
+ prevValue=getValue ();
890
+ }
891
+
892
+ // Draw value
893
+ if (style>0 )
894
+ uView.setCursor (offsetX-10 ,offsetY+10 );
895
+ else
896
+ uView.setCursor (offsetX-11 ,offsetY+11 );
897
+
898
+ uView.print (strBuffer);
899
+ }
900
+
901
+ // -------------------------------------------------------------------------------------
902
+ // Slider Widget - end
903
+ // -------------------------------------------------------------------------------------
904
+
905
+
792
906
void MVSPIClass::begin () {
793
907
// Set SS to high so a connected chip will be "deselected" by default
794
908
digitalWrite (SS, HIGH);
0 commit comments