Guide program for display oled I2C 128x64

Dependencies:   mbed Adafruit_GFX

Revision:
15:bbac8ecd8bd7
diff -r 2fc2f14f5f86 -r bbac8ecd8bd7 funsiones_pantalla_oled.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/funsiones_pantalla_oled.cpp	Fri Jul 09 01:44:09 2021 +0000
@@ -0,0 +1,611 @@
+
+ 
+/**********************************************************************
+Nota:
+
+este progra es realizado por julian camilo portela gonzalez de la universidad distrital
+fransisco jose de caldas de bogota colombia. identificado con codigo estudiantil 20192573046
+
+en este proyecto procurare hacer uso de todas las funsiones de una pantalla oled monocromatica 
+usando la libreria Adafruit_GFX y Adafruit_SSD1306_I2C para la pantalla de oled de direccion 0x78 con conexion I2C con dimensiones 128 de largo y 64 de ancho
+este trabajo sera una contribucion para la comunidad de MBED y su uso libre.
+solo hare uso de las funsiones para dar una brebe explicacion de estas.
+
+para el uso de esta pantalla se uso el micro controlador STM32F411  Nucleo-64
+**************************************************************************/
+
+// inclujsion de librerias
+#include "mbed.h"
+#include "Adafruit_GFX.h"
+#include "Adafruit_GFX_Config.h"
+#include "Adafruit_SSD1306.h"
+#include "imagen.h"
+#include "time.h"
+
+       
+           
+DigitalOut myled_R(LED3); //led de HMC
+
+I2C i2c(D14,D15); // puerto de source data y puerto source cloke para el formato de coneccion I2C
+
+Adafruit_SSD1306_I2c myOled(i2c,NC,0x78,64,128); // puertos I2C, reset, nombre de la pantalla en este caso puede ser 0x78 o 0x7A, alto y ancho
+
+
+
+/* Nota:
+* el tamaño de la letra 1 da para 8 pixeles por caracter 
+* el tamaño de la letra 2 da para 16 pixeles por caracter
+*/
+
+/***********************
+ nota: siempre que halla un virtual void es necesario hacer la declaracion de 
+   #ifdef GFX_WANT_ABSTRACTS    esto en caso de ser sizetext es decir tamaño de texto
+   #define GFX_SIZEABLE_TEXT  
+    #end if 
+    
+     
+           #ifdef GFX_WANT_ABSTRACTS
+           #define GFX_WANT_ABSTRACTS   en la malloria de funsiones esta es la declaracion indicada
+           #define BLACK 0
+           #define WHITE 1
+           #endif
+****************/
+
+// nota: para la explicacion del bitmap ubicarse en el archivo imagen
+
+
+
+int main()
+{   
+
+// variables que se imprimen en la pantalla no necesitan convertirse a 16+ bits.
+    uint16_t x=0;
+    uint16_t z=0;
+    uint16_t RAN=0;
+    
+    uint8_t pos=60; //variable para localizacion de una caracter especifico que nosotros declaremos 
+
+    bool af=true;  //variable buleana para el uso de while
+    bool tx=true;  // variable buleana para el uso del texto
+    int y=0;       // varuiable de cambio para los if
+    int w=1;     // tiempo de espera general 
+    int w1=1;      // tiempo de espera para imagenes
+    
+    
+    // estas variables usan la funsion rand para obtener un numero alaetoreo
+
+    srand (time(NULL));   // inicializa la velociadad del conteo
+
+  
+    int v1= (rand() % 100)/10;         // v1 esta en un rango de 0 to 99 y si se divide en 10 esat a un rango de 0 a 9
+    int v2= (rand() % 100)/10;
+    int v3= (rand() % 100)/10;
+    int v4= v1+v2+v3; // un numero emntre 0 y 27
+         
+    char C;  // variable usada para dibujar una letra u numero
+    
+    //vector con las contantes CHAR para la funsion de DrawChar        
+    char L[26]={'A', 'B', 'C', 'D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};    
+         
+    myOled.begin(); // inicializo la pantalla oled
+    myOled.setTextCursor (0,1); //ubicar el cursor para los textos
+    
+   #ifdef GFX_WANT_ABSTRACTS
+   #define GFX_SIZEABLE_TEXT  
+    myOled.setTextSize(2);//establece el tamaño del texto. nota explicativa al comienzo
+
+     
+    //imprime %u para el ancho (width) y el segundo imprime %u alto (height)
+    myOled.printf("%u %u \ncuenta by julian\r\n", myOled.width(), myOled.height());
+    
+    myOled.display();  //dibuja en la pantalla todas las ordenes que le hallamos otorgado
+    wait(0.8);   // funcion de espera o retraso
+     #endif
+    myOled.clearDisplay(); /// limpia la pantalla
+     
+     
+    #ifdef GFX_WANT_ABSTRACTS
+   #define GFX_SIZEABLE_TEXT 
+     
+     myOled.setTextSize(1);
+     
+      #endif
+     
+    while(af)
+    {
+         
+        
+        //inicia el ciclo de tiempos para trabajar 
+        x=0;
+        RAN = v4;
+        
+        myOled.writeChar(pos); // se uso para indicar una posicion especifica de la pantalla oled y escribir algo concreto
+        myOled.printf(" \r :3 \r");
+        myOled.display();
+        
+        for(int i=0; i<20; i++){ //cantidad de veces q cuenta antes de hacer alguna accion
+        
+        myled_R = !myled_R;  //led de la placa ST
+        myOled.setTextWrap(tx); // establece el modo de texto como verdadero o falso 
+        myOled.setTextCursor (54,20);//alinea el texto
+        myOled.printf("%u\r",x);//imprime el conteo 
+        myOled.setTextCursor (2,2);
+        myOled.setTextColor(0,1);// se usa para resaltar el texto y sus componentes son color del texto y fondo repectivamente
+        // myOled.setTextColor(0);  se usa para dar un color especifico al texto 1 blanco, 0 negro el cual puede confundirse tanto el texto como el fondo con este comando 
+        myOled.printf(" \n el numero aleatoreo es: %u\r",RAN);// imprime el numero random que carga anteriormente 
+        myOled.display();//imprime todas las intrucciones de la pantalla
+        x = x + 1;        // variable para la cuenta en pantalla          
+        wait(0.001);
+        myOled.setTextColor(1,0);
+        
+      
+        
+        
+        if(x==5){
+            myOled.clearDisplay();
+            myOled.setTextCursor (0,1);  // indicamos a la pantalla donde iniciar a dibujar 
+            myOled.printf(" \nla cuenta es %u\r",z); //inicia una cuenta de ciclos
+            myOled.display();
+            z=z+1; // variable q se suma en pantalla cada vez que la cuanta alcanza el numero 5
+            x=0;  // reinicia la varible de la cuenta a 0
+            y=y+1;
+            }
+            if(y==3){
+              
+              // dibuja un pixel en el centro    
+                myOled.clearDisplay(); 
+                myOled.drawPixel(myOled.width()/2, myOled.height()/2,1);      
+                myOled.display();
+                 wait(w);   // tiempo de espera antes de acabar la accion           
+                myOled.clearDisplay();   
+           
+           //dibuja una rectangulo con el tamaño que yo quiero 
+     
+           #ifdef GFX_WANT_ABSTRACTS   //inicia la declaracion del objeto
+           #define GFX_WANT_ABSTRACTS  // defino que clase de objeto es 
+           #define BLACK 0       //defino objetos con variable definida
+           #define WHITE 1
+           int a,l;
+           a=20;
+           l=20;
+            myOled.drawRect((myOled.width()-a)/2, (myOled.height()-l)/2,a,l,WHITE);  //punto en x, punto en y, ancho, largo y color
+            myOled.display();
+            #endif   // termino la declaracion
+             wait(w);
+              // rellena el rectangulo de la forma que yo quiera 
+           #ifdef GFX_WANT_ABSTRACTS
+           #define GFX_WANT_ABSTRACTS
+           #define BLACK 0
+           #define WHITE 1
+           a=20;
+           l=20;
+                myOled.fillRect((myOled.width()-a)/2, (myOled.height()-l)/2,a,l, WHITE); //punto en x, punto en y, ancho, largo y color
+                myOled.display();
+                #endif 
+                wait(w);
+                myOled.clearDisplay();
+            
+            //dibuja la ciecunferencia de un circulo ubicado donde yo quiera del radio que yo quiera
+            
+           #ifdef GFX_WANT_ABSTRACTS
+           #define GFX_WANT_ABSTRACTS
+           #define BLACK 0
+           #define WHITE 1
+                myOled.drawCircle(myOled.width()/2, myOled.height()/2, 10, WHITE);
+                myOled.display();
+                #endif 
+               wait(w);
+                
+                // rellena el circulo de la forma que yo quiera 
+           #ifdef GFX_WANT_ABSTRACTS
+           #define GFX_WANT_ABSTRACTS
+           #define BLACK 0
+           #define WHITE 1
+                myOled.fillCircle(myOled.width()/2, myOled.height()/2, 10, WHITE);
+                myOled.display();
+                #endif 
+                wait(w);
+                myOled.clearDisplay();
+                
+                 //dibuja el perimetro de un triangulo ubicado donde yo quiera del tamaño que yo quiera
+           #ifdef GFX_WANT_ABSTRACTS
+           #define GFX_WANT_ABSTRACTS
+           #define BLACK 0
+           #define WHITE 1
+                myOled.drawTriangle(myOled.width()/2, 1, myOled.width()/4, 20,(myOled.width()*3)/4, 20, WHITE);// se agrupa por cordenada(x,y)p1, cordenada (x1,y1)p2,  y cordenada (x2,y2)p3 
+                myOled.display();
+                #endif 
+                wait(w);
+               // rellena el triangulo de la forma que yo quiera 
+           #ifdef GFX_WANT_ABSTRACTS
+           #define GFX_WANT_ABSTRACTS
+           #define BLACK 0
+           #define WHITE 1
+                myOled.fillTriangle((myOled.width()*3)/4,20,myOled.width()/4,20,(myOled.width())/2,1,WHITE);// para rellenar se ubica al reves los puntos cordenada (x2,y2)p3, cordenada (x1,y1)p2 y el cordenada (x,y)p1
+                myOled.display();
+                #endif 
+                wait(w);
+                myOled.clearDisplay();
+                
+                //dibuja la circunferencia de un circulo ubicado en un espacio que  yo quiera del tamaño que yo quiera
+           #ifdef GFX_WANT_ABSTRACTS
+           #define GFX_WANT_ABSTRACTS
+           #define BLACK 0
+           #define WHITE 1
+                myOled.drawRoundRect(1,1, 40, 40, 30, WHITE);// 
+                myOled.display();
+                #endif 
+                wait(w);
+             // rellena el circulo dentro del espacio del radio que yo quiera y la forma que yo quiera 
+           #ifdef GFX_WANT_ABSTRACTS
+           #define GFX_WANT_ABSTRACTS
+           #define BLACK 0
+           #define WHITE 1
+                myOled.fillRoundRect(1,1,40,40,20,WHITE);// para rellenar se ubica al reves los puntos cordenada (x2,y2)p3, cordenada (x1,y1)p2 y el cordenada (x,y)p1
+                myOled.display();
+                #endif 
+                wait(w);
+                myOled.clearDisplay();
+                
+                //dibuja una linea con la inclinacion que yo indique
+                
+           #ifdef GFX_WANT_ABSTRACTS
+           #define GFX_WANT_ABSTRACTS
+           #define BLACK 0
+           #define WHITE 1
+                myOled.drawLine(5,5,30,10,WHITE);
+                
+                myOled.display();
+                #endif 
+                wait(w);
+                myOled.clearDisplay();    
+                
+                //dibuja una linea recta horizontal dede donde le indique
+                
+           #ifdef GFX_WANT_ABSTRACTS
+           #define GFX_WANT_ABSTRACTS
+           #define BLACK 0
+           #define WHITE 1
+                myOled.drawFastHLine(5,5,50,WHITE);
+                
+                myOled.display();
+                #endif 
+                wait(w);
+                myOled.clearDisplay();   
+                
+                 //dibuja una linea recta horizontal dede donde le indique
+                
+           #ifdef GFX_WANT_ABSTRACTS
+           #define GFX_WANT_ABSTRACTS
+           #define BLACK 0
+           #define WHITE 1
+                myOled.drawFastVLine(5,5,50,WHITE);
+                
+                myOled.display();
+                #endif 
+                wait(w);
+                myOled.clearDisplay();  
+                
+                //rellena la pantalla con el color que quiero
+                
+           #ifdef GFX_WANT_ABSTRACTS
+           #define GFX_WANT_ABSTRACTS
+           #define BLACK 0
+           #define WHITE 1
+                myOled.fillScreen(WHITE);
+                myOled.display();
+                #endif 
+                wait(w);
+                
+           #ifdef GFX_WANT_ABSTRACTS
+           #define GFX_WANT_ABSTRACTS
+           #define BLACK 0
+           #define WHITE 1
+                myOled.fillScreen(BLACK);
+                myOled.display();
+                #endif 
+                wait(w);
+                myOled.clearDisplay();  
+                
+                //dibuja una letra en la ubicacion que pongamos
+                
+           #ifdef GFX_WANT_ABSTRACTS
+           #define GFX_WANT_ABSTRACTS
+           #define BLACK 0
+           #define WHITE 1
+           
+           C= L[v4];
+           
+                myOled.drawChar(5, 5,C,WHITE,BLACK,5);
+                myOled.display();
+                #endif 
+                wait(w);
+                myOled.clearDisplay();  
+                     
+                       //dibuja una imagen deacuerdo a un mapa en numeros hexdecimales
+                
+           #ifdef GFX_WANT_ABSTRACTS
+           #define GFX_WANT_ABSTRACTS
+           #define BLACK 0
+           #define WHITE 1
+                 /** 
+                 se compone de ubicacion en x y ubicacion en y para comensar el trasado,
+                 el nombre del bitmap a dibujar previamente diseñado o llamado desde otra funcion de extencion .h,
+                 se otorga el alto y el ancho, luego especificamos el color de la imagen  
+                 
+                 en lo posible definir el tamaño de la imagen ingresada en el archivo de la imagen y
+                 colocar el mismo tamaño en la funsion de drawbitmap
+                   **/
+                myOled.drawBitmap(0,0,myBitmap1,128,64,WHITE);
+                
+                myOled.display();
+                #endif 
+                wait(w1);
+                myOled.clearDisplay();  
+                
+                    //-------------------------------//
+                
+           #ifdef GFX_WANT_ABSTRACTS
+           #define GFX_WANT_ABSTRACTS
+           #define BLACK 0
+           #define WHITE 1
+                
+                myOled.drawBitmap(0,0,myBitmap2,128,64,WHITE);
+                
+                myOled.display();
+                #endif 
+                wait(w1);
+                myOled.clearDisplay();   
+                
+                //----------------//
+                
+           #ifdef GFX_WANT_ABSTRACTS
+           #define GFX_WANT_ABSTRACTS
+           #define BLACK 0
+           #define WHITE 1
+                
+                myOled.drawBitmap(0,0,myBitmap3,128,64,WHITE);
+                
+                myOled.display();
+                #endif 
+                wait(w1);
+                myOled.clearDisplay();  
+                    
+                       //----------------//
+                
+           #ifdef GFX_WANT_ABSTRACTS
+           #define GFX_WANT_ABSTRACTS
+           #define BLACK 0
+           #define WHITE 1
+                
+                myOled.drawBitmap(0,0,myBitmap4,128,64,WHITE);
+                
+                myOled.display();
+                #endif 
+                wait(w1);
+                myOled.clearDisplay();   
+                
+                
+                //-------------------------------//
+                
+                #ifdef GFX_WANT_ABSTRACTS
+           #define GFX_WANT_ABSTRACTS
+           #define BLACK 0
+           #define WHITE 1
+                
+                myOled.drawBitmap(0,0,myBitmap6,128,64,WHITE);
+                
+                myOled.display();
+                #endif 
+                wait(w1);
+                myOled.clearDisplay();   
+                
+                 //----------------//
+                
+                #ifdef GFX_WANT_ABSTRACTS
+           #define GFX_WANT_ABSTRACTS
+           #define BLACK 0
+           #define WHITE 1
+                
+                myOled.drawBitmap(0,0,myBitmap5,124,64,WHITE);
+                
+                myOled.display();
+                #endif 
+                wait(w1);
+                myOled.clearDisplay();   
+                
+                /********************************
+                
+                uint8_t getRotation(void);
+                esta funsion lee la rotacion de una imagen q hallamos puesto y podemos ponerlo en pantalla 
+                ***************************************/
+                 uint8_t ro;
+                 
+                 #ifdef GFX_WANT_ABSTRACTS
+           #define GFX_WANT_ABSTRACTS
+           #define BLACK 0
+           #define WHITE 1
+                
+                myOled.drawBitmap(0,0,myBitmap5,124,64,WHITE);
+                
+                myOled.display();
+                #endif 
+                 ro = myOled.getRotation();
+                 x=ro;
+                wait(w1);
+                myOled.clearDisplay();   
+
+            myOled.setTextCursor (0,1);  
+            myOled.printf(" \nla rotacion es %u\r",x); 
+            myOled.display();
+            x=0;  
+                
+                wait(w);
+                myOled.clearDisplay(); 
+                
+                //funcion de rotacion de una imagen o instruccion de la pantalla
+                /*****************************************
+                
+                para usar la funsion setRotation se usan los valores de un enum
+                los cuales son 1,2,3,4 los cuales equivalen a los grados de rotacion de la pantalla
+                usare esta imagen para mostrar como se hace usare el 2
+                
+                
+                ************************************/
+                uint8_t  an=1; //90° 
+                myOled.setRotation(an);
+                wait(w);
+                
+                
+           #ifdef GFX_WANT_ABSTRACTS
+           #define GFX_WANT_ABSTRACTS
+           #define BLACK 0
+           #define WHITE 1
+                
+                myOled.drawBitmap(0,0,myBitmap5,124,64,WHITE);
+                
+                myOled.display();
+                #endif 
+                  ro = myOled.getRotation();
+                 x=ro;
+                wait(w1);
+                myOled.clearDisplay();   
+                
+            myOled.setTextCursor (0,1);  
+            myOled.printf(" \nla rotacion es %u\r",x); 
+            myOled.display();
+            x=0;  
+                 wait(w);
+                myOled.clearDisplay(); 
+                
+                //**************//
+                  an=2; //180°
+                myOled.setRotation(an);
+                wait(w);
+                
+                    #ifdef GFX_WANT_ABSTRACTS
+           #define GFX_WANT_ABSTRACTS
+           #define BLACK 0
+           #define WHITE 1
+                
+                myOled.drawBitmap(0,0,myBitmap5,124,64,WHITE);
+                
+                myOled.display();
+                #endif 
+                 ro = myOled.getRotation();
+                 x=ro;
+                wait(w1);
+                myOled.clearDisplay();   
+                
+            myOled.setTextCursor (0,1);  
+            myOled.printf(" \nla rotacion es %u\r",x); 
+            myOled.display();
+            x=0;  
+                 wait(w);
+                myOled.clearDisplay();   
+                     
+                      
+                //**************//
+                  an=3; //270°
+                myOled.setRotation(an);
+                wait(w);
+                
+                    #ifdef GFX_WANT_ABSTRACTS
+           #define GFX_WANT_ABSTRACTS
+           #define BLACK 0
+           #define WHITE 1
+                
+                myOled.drawBitmap(0,0,myBitmap5,124,64,WHITE);
+                
+                myOled.display();
+                #endif 
+                 ro = myOled.getRotation();
+                 x=ro;
+                wait(w1);
+                myOled.clearDisplay();   
+                
+            myOled.setTextCursor (0,1);  
+            myOled.printf(" \nla rotacion es %u\r",x); 
+            myOled.display();
+            x=0;  
+                 wait(w);
+                myOled.clearDisplay();   
+                
+                //**************//
+                  an=4; //360°
+                myOled.setRotation(an);
+                wait(w);
+                
+                    #ifdef GFX_WANT_ABSTRACTS
+           #define GFX_WANT_ABSTRACTS
+           #define BLACK 0
+           #define WHITE 1
+                
+                myOled.drawBitmap(0,0,myBitmap5,124,64,WHITE);
+                
+                myOled.display();
+                #endif 
+                 ro = myOled.getRotation();
+                 x=ro;
+                wait(w1);
+                myOled.clearDisplay();  
+                
+            myOled.setTextCursor (0,1);  
+            myOled.printf(" \nla rotacion es %u\r",x); 
+            myOled.display();
+            x=0;  
+                 wait(w);
+                myOled.clearDisplay(); 
+                     
+                 tx=false;
+                   
+                     
+            myOled.clearDisplay();
+            myOled.setTextWrap(tx);  
+            myOled.setTextCursor (0,1);
+            myOled.printf(" \nla cuenta es %u\r",z);
+            myOled.display();
+            wait(0.5);
+            y=y+1;
+            z=z+1;
+            x=0;
+            
+            
+             
+            }
+         
+                if((y==5)){ 
+                
+           #ifdef GFX_WANT_ABSTRACTS
+           #define GFX_WANT_ABSTRACTS
+           #define BLACK 0
+           #define WHITE 1
+                myOled.fillScreen(WHITE);
+                myOled.display();
+                #endif 
+                wait(w);
+                myOled.clearDisplay();
+                
+                myOled.printf(" \n fin");
+                myOled.display();
+                wait(w);
+                y=y+1;
+                myOled.clearDisplay();
+                
+           #ifdef GFX_WANT_ABSTRACTS
+           #define GFX_WANT_ABSTRACTS
+           #define BLACK 0
+           #define WHITE 1
+                myOled.fillScreen(BLACK);
+                myOled.display();
+                #endif 
+                wait(w);
+                myOled.clearDisplay();  
+                af=false;
+    }
+    
+   } 
+    
+   }
+   }
+