//Panos Papazoglou, MICRODEV.GR #include #include #include #include #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 #define OLED_DC 8 #define OLED_CS 10 #define OLED_RESET 9 Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &SPI, OLED_DC, OLED_RESET, OLED_CS); String labels[]={"60", "50", "40","30", "20", "10","0"}; int rad=55; int rr=5; void setup() { Serial.begin(9600); if(!oled.begin(SSD1306_SWITCHCAPVCC)) { Serial.println(F("SSD1306 Error")); for(;;); } oled.clearDisplay(); oled.display(); draw_circle(63,63,rad-3,6.28,3.14,-0.02); draw_dots(63,63,rad-3,6.28,3.14,-0.5); draw_labels(63,63,rad+9,6.28,3.14,-0.5); } void loop() { float a=analogRead(0); float topx=map(a,0,1023,314,628); topx=topx/100; oled.drawLine(63,63,63+(rad-rr)*cos(topx), 63+(rad-rr)*sin(topx),WHITE); oled.display(); delay(200); oled.drawLine(63,63,63+(rad-rr)*cos(topx), 63+(rad-rr)*sin(topx),BLACK); oled.display(); } void draw_circle(int x, int y, int rad, float from, float to, float step) { for(float i=from;i>=to;i+=step) { float xx=x+rad*cos(i); float yy=y+rad*sin(i); oled.drawPixel(xx, yy,WHITE); oled.display(); } } void draw_dots(int x, int y, int rad, float from, float to, float step) { for(float i=from;i>=to;i+=step) { float xx=x+rad*cos(i); float yy=y+rad*sin(i); oled.fillCircle(xx,yy,2,WHITE); oled.display(); } } void draw_labels(int x, int y, int rad, float from, float to, float step) { int lab=0; for(float i=from;i>=to;i+=step) { float xx=x+rad*cos(i); float yy=y+rad*sin(i); mytext(labels[lab],1,xx-5,yy); lab++; oled.display(); } } void mytext(String text, int textsize, int x, int y) { oled.setTextSize(textsize); oled.setTextColor(WHITE); oled.setCursor(x,y); oled.print(text); oled.display(); }