1.3''OLED

Dependencies:   mbed QEI OLED_SSD1306_SH1106 I2C_SSD1306_nucleo_l432KC

Revision:
16:a72f4818d591
Parent:
14:d7bc532b2133
diff -r 6396392fd424 -r a72f4818d591 main.cpp
--- a/main.cpp	Fri Sep 21 08:27:41 2018 +0000
+++ b/main.cpp	Fri May 27 00:41:07 2022 +0000
@@ -1,346 +1,42 @@
 #include "mbed.h"
 #include "Adafruit_SSD1306.h"
-
-#define NUMFLAKES 10
-#define XPOS 0
-#define YPOS 1
-#define DELTAY 2
-
-
-#define LOGO16_GLCD_HEIGHT 16 
-#define LOGO16_GLCD_WIDTH  16 
-//static const unsigned char PROGMEM logo16_glcd_bmp[] ={        B00000000, B00110000 };
-    uint8_t logo16_glcd_bmp[32] =
-    { 
-        0x00, 0xC0, 0x01, 0xC0, 0x01, 0xC0, 0x03, 0xE0, 0xE3, 0xE0, 0xFE, 0xF8, 0xFE, 0xFF, 0x33, 0x9F, 0x1F, 0xFC, 0x0D, 0x70, 0x1B, 0xA0, 0x3F, 0xE0, 0x3F, 0xF0, 0x7C, 0xF0, 0x70, 0x70, 0x00, 0x30
-    };
-DigitalOut myled_R(LED1);
-
-I2C i2c(PA_10,PA_9);//sda,scl(PA_10,PA_9)
-
-Adafruit_SSD1306_I2c myOled(i2c,PB_7,0x7A,64,128);//0x3D+SA0+RW
-Serial pc(SERIAL_TX, SERIAL_RX);
-
-void testdrawbitmap(const uint8_t *bitmap, uint8_t w, uint8_t h) {
-  uint8_t icons[NUMFLAKES][3];
- 
-  // initialize
-  for (uint8_t f=0; f< NUMFLAKES; f++) {
-    icons[f][XPOS] = rand()%myOled.width();
-    icons[f][YPOS] = 0;
-    icons[f][DELTAY] = rand()%5 + 1;
-    
-     pc.printf("x: %d",icons[f][XPOS]);
-    // pc.printf(icons[f][XPOS], DEC);
-     pc.printf(" y: %d",icons[f][YPOS]);
-     //pc.printf(icons[f][YPOS], DEC);
-     pc.printf(" dy: %d",icons[f][DELTAY]);
-     //pc.printfln(icons[f][DELTAY], DEC);
-  }
+#include "QEI.h"
 
-  while (1) {
-    // draw each icon
-    for (uint8_t f=0; f< NUMFLAKES; f++) {
-      myOled.drawBitmap(icons[f][XPOS], icons[f][YPOS], bitmap, w, h, WHITE);
-    }
-    myOled.display();
-    wait(0.5);
-    
-    // then erase it + move it
-    for (uint8_t f=0; f< NUMFLAKES; f++) {
-      myOled.drawBitmap(icons[f][XPOS], icons[f][YPOS], bitmap, w, h, BLACK);
-      // move it
-      icons[f][YPOS] += icons[f][DELTAY];
-      // if its gone, reinit
-      if (icons[f][YPOS] > myOled.height()) {
-        icons[f][XPOS] = rand()%myOled.width();
-        icons[f][YPOS] = 0;
-        icons[f][DELTAY] = rand()%5 + 1;
-      }
-    }
-   }
-}
-
-
-void testdrawchar(void) {
-  myOled.setTextSize(1);
-  myOled.setTextColor(WHITE);
-  myOled.setTextCursor(0,0);
-  for (uint8_t i=0; i < 168; i++) {
-    if (i == '\n') continue;
-    myOled.writeChar(i);
-    if ((i > 0) && (i % 21 == 0))
-      myOled.printf("\n");
-  }    
-  myOled.display();
-  wait(0.5);
-}
+I2C i2c(PA_10,PA_9);
+Adafruit_SH1106_I2c myOled(i2c,NC,0x78,64,128);
 
-void testdrawcircle(void) {
-  for (int16_t i=0; i<myOled.height(); i+=2) {
-    myOled.drawCircle(myOled.width()/2, myOled.height()/2, i, WHITE);
-    myOled.display();
-    wait(0.5);
-  }
-}
-
-void testfillrect(void) {
-  uint8_t color = 1;
-  for (int16_t i=0; i<myOled.height()/2; i+=3) {
-    // alternate colors
-    myOled.fillRect(i, i, myOled.width()-i*2, myOled.height()-i*2, color%2);
-    myOled.display();
-    wait(0.5);
-    color++;
-  }
-}
-
-void testdrawtriangle(void) {
-  for (int16_t i=0; i<min(myOled.width(),myOled.height())/2; i+=5) {
-    myOled.drawTriangle(myOled.width()/2, myOled.height()/2-i,
-                     myOled.width()/2-i, myOled.height()/2+i,
-                     myOled.width()/2+i, myOled.height()/2+i, WHITE);
-    myOled.display();
-    wait(0.5);
-  }
-}
-
-void testfilltriangle(void) {
-  uint8_t color = WHITE;
-  for (int16_t i=min(myOled.width(),myOled.height())/2; i>0; i-=5) {
-    myOled.fillTriangle(myOled.width()/2, myOled.height()/2-i,
-                     myOled.width()/2-i, myOled.height()/2+i,
-                     myOled.width()/2+i, myOled.height()/2+i, WHITE);
-    if (color == WHITE) color = BLACK;
-    else color = WHITE;
-    myOled.display();
-    wait(0.5);
-  }
-}
-
-void testdrawroundrect(void) {
-  for (int16_t i=0; i<myOled.height()/2-2; i+=2) {
-    myOled.drawRoundRect(i, i, myOled.width()-2*i, myOled.height()-2*i, myOled.height()/4, WHITE);
-    myOled.display();
-    wait(0.5);
-  }
-}
-
-void testfillroundrect(void) {
-  uint8_t color = WHITE;
-  for (int16_t i=0; i<myOled.height()/2-2; i+=2) {
-    myOled.fillRoundRect(i, i, myOled.width()-2*i, myOled.height()-2*i, myOled.height()/4, color);
-    if (color == WHITE) color = BLACK;
-    else color = WHITE;
-    myOled.display();
-    wait(0.5);
-  }
-}
-   
-void testdrawrect(void) {
-  for (int16_t i=0; i<myOled.height()/2; i+=2) {
-    myOled.drawRect(i, i, myOled.width()-2*i, myOled.height()-2*i, WHITE);
-    myOled.display();
-    wait(0.5);
-  }
-}
-
-void testdrawline() {  
-  for (int16_t i=0; i<myOled.width(); i+=4) {
-    myOled.drawLine(0, 0, i, myOled.height()-1, WHITE);
-    myOled.display();
-    wait(0.5);
-  }
-  for (int16_t i=0; i<myOled.height(); i+=4) {
-    myOled.drawLine(0, 0, myOled.width()-1, i, WHITE);
-    myOled.display();
-    wait(0.5);
-  }
-  wait(0.25);
-  
-  myOled.clearDisplay();
-  for (int16_t i=0; i<myOled.width(); i+=4) {
-    myOled.drawLine(0, myOled.height()-1, i, 0, WHITE);
-    myOled.display();
-    wait(0.5);
-  }
-  for (int16_t i=myOled.height()-1; i>=0; i-=4) {
-    myOled.drawLine(0, myOled.height()-1, myOled.width()-1, i, WHITE);
+QEI EnB(D5,D6,NC,500,QEI::X4_ENCODING);//4倍编码器
+//QEI EnB(PA_5,PA_6,NC,500);//2倍编码器
+int main()
+{
+//i2c.frequency(100000);
+    i2c.start();
+    myOled.begin();
     myOled.display();
     wait(0.5);
-  }
-  wait(0.25);
-  
-  myOled.clearDisplay();
-  for (int16_t i=myOled.width()-1; i>=0; i-=4) {
-    myOled.drawLine(myOled.width()-1, myOled.height()-1, i, 0, WHITE);
-    myOled.display();
-    wait(0.5);
-  }
-  for (int16_t i=myOled.height()-1; i>=0; i-=4) {
-    myOled.drawLine(myOled.width()-1, myOled.height()-1, 0, i, WHITE);
-    myOled.display();
-    wait(0.5);
-  }
-  wait(0.25);
-
-  myOled.clearDisplay();
-  for (int16_t i=0; i<myOled.height(); i+=4) {
-    myOled.drawLine(myOled.width()-1, 0, 0, i, WHITE);
-    myOled.display();
-    wait(0.5);
-  }
-  for (int16_t i=0; i<myOled.width(); i+=4) {
-    myOled.drawLine(myOled.width()-1, 0, i, myOled.height()-1, WHITE); 
-    myOled.display();
-    wait(0.5);
-  }
-  wait(0.25);
-}
-
-void testscrolltext(void) {
-  myOled.setTextSize(2);
-  myOled.setTextColor(WHITE);
-  myOled.setTextCursor(10,0);
-  myOled.clearDisplay();
-  myOled.printf("scroll");
-  myOled.display();
-  wait(0.5);
- 
-  myOled.startscrollright(0x00, 0x0F);
-  wait(0.5);
-  myOled.stopscroll();
-  wait(0.5);
-  myOled.startscrollleft(0x00, 0x0F);
-  wait(0.5);
-  myOled.stopscroll();
-  wait(0.5);    
-  myOled.startscrolldiagright(0x00, 0x07);
-  wait(0.5);
-  myOled.startscrolldiagleft(0x00, 0x07);
-  wait(0.5);
-  myOled.stopscroll();
-}
-
-int main()
-{   
-  //  uint16_t x=0;
-   // pc.printf("Hello World !\n");
-    //pc.printf("%ux%u \nHellow World\r\n", myOled.width(), myOled.SD_I2C_ADDRESS());
-    myOled.begin();
-    // Show image buffer on the display hardware.
-  // Since the buffer is intialized with an Adafruit splashscreen
-  // internally, this will display the splashscreen.
-  myOled.display();
-  wait(2);
-
-  // Clear the buffer.
-  myOled.clearDisplay();
-
-  // draw a single pixel
-  myOled.drawPixel(10, 10, WHITE);
-  // Show the display buffer on the hardware.
-  // NOTE: You _must_ call display after making any drawing commands
-  // to make them visible on the display hardware!
-  myOled.display();
-  wait(2);
-  myOled.clearDisplay();
-
-  // draw many lines
-  testdrawline();
-  myOled.display();
-  wait(2);
-  myOled.clearDisplay();
-
-  // draw rectangles
-  testdrawrect();
-  myOled.display();
-  wait(1);
-  myOled.clearDisplay();
-
-  // draw multiple rectangles
-  testfillrect();
-  myOled.display();
-  wait(1);
-  myOled.clearDisplay();
-
-  // draw mulitple circles
-  testdrawcircle();
-  myOled.display();
-  wait(2);
-  myOled.clearDisplay();
-
-  // draw a white circle, 10 pixel radius
-  myOled.fillCircle(myOled.width()/2, myOled.height()/2, 10, WHITE);
-  myOled.display();
-  wait(2);
-  myOled.clearDisplay();
-
-  testdrawroundrect();
-  wait(2);
-  myOled.clearDisplay();
-
-  testfillroundrect();
-  wait(2);
-  myOled.clearDisplay();
-
-  testdrawtriangle();
-  wait(2);
-  myOled.clearDisplay();
-   
-  testfilltriangle();
-  wait(2);
-  myOled.clearDisplay();
-
-  // draw the first ~12 characters in the font
-  testdrawchar();
-  myOled.display();
-  wait(2);
-  myOled.clearDisplay();
-
-  // draw scrolling text
-  testscrolltext();
-  wait(2);
-  myOled.clearDisplay();
-
-  // text display tests
-  myOled.setTextSize(1);
-  myOled.setTextColor(WHITE);
-  myOled.setTextCursor(0,0);
-  //myOled.setCursor(0,0);
-  myOled.printf("Hello, world!");
-  myOled.setTextColor(BLACK, WHITE); // 'inverted' text
-  myOled.printf("3.141592");
-  myOled.setTextSize(2);
-  myOled.setTextColor(WHITE);
-  myOled.printf("0x",0xDEADBEEF);// myOled.printf(0xDEADBEEF, HEX);
-  myOled.display();
-  wait(0.5);
-  myOled.clearDisplay();
-
-  // miniature bitmap display
-  //myOled.drawBitmap(30, 16,  logo16_glcd_bmp, 16, 16, 1);
-  myOled.display();
-  wait(0.5);
-
-  // invert the display
-  myOled.invertDisplay(true);
-  wait(0.5);
-  myOled.invertDisplay(false);
-  wait(0.5);
-  myOled.clearDisplay();
-
-  // draw a bitmap icon and 'animate' movement
-  testdrawbitmap(logo16_glcd_bmp, LOGO16_GLCD_HEIGHT, LOGO16_GLCD_WIDTH);
-   /* while(1)
-    {
-        //myOled.drawPixel(x, 32, 1);
-       // myOled.drawCircle(64,32,20,1);
-       // myOled.drawFastVLine(125,2,50,1);
-        //myled_R = !myled_R;
-        //myOled.printf("%u\r",x);
-        //myOled.display();
-        //x = x + 1;                  
-        //wait(0.5);
-    }*/
-}
+    myOled.clearDisplay();
+    //myOled.setTextColor(1);
+    myOled.setTextSize(3);
+    myOled.printf("Du long\r");
+    int oldPosition  = -1;
+    int newposition;
+    while(1) {
+        newposition = EnB.getPulses();
+        if (oldPosition == -1) {
+            myOled.setTextCursor(40,32);
+            myOled.setTextSize(2);
+            myOled.printf("ready!\r");
+            myOled.display();
+        }
+        if (newposition < 0)
+            newposition = -newposition;
+        if (newposition > oldPosition) {
+            myOled.clearDisplay();
+            oldPosition = newposition;
+            myOled.setTextCursor(40,32);
+            myOled.setTextSize(3);
+            myOled.printf("%d\r",oldPosition);
+            myOled.display();
+        }
+    }
+}
\ No newline at end of file