![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Guide program for display oled I2C 128x64
Dependencies: mbed Adafruit_GFX
funsiones_pantalla_oled.cpp
- Committer:
- jportela
- Date:
- 2021-07-09
- Revision:
- 15:bbac8ecd8bd7
File content as of revision 15:bbac8ecd8bd7:
/********************************************************************** 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; } } } }