Para empezar con las exhibiciones de OLED (12 / 16 paso)

¿Paso 12: Cómo dibujar un círculo?

Podemos usar el siguiente código para generar un círculo en la pantalla:

 #include //Include Wire library for I2C communication#define HEIGHT 64 #define WIDTH 128 const int RST = 10; //Assign pin 10 for Reset int i; //Set variable i as integer static unsigned char array[1024]; //Buffer array void setup() { pin_init(); //Initialize pins initialize_OLED(); //Initialize screen memset(array, 0, sizeof(array)); //Initialize array with 0s circle(63,31,10); //Draw circle, (x,y,R) Flush(); //Send data } void loop() { } void pin_init(){ Serial.begin(9600); //Set baud for serial transmission pinMode(RST, OUTPUT); //Set RST as output } void initialize_OLED(){ Wire.begin(); //Initialize I2C interface digitalWrite(RST, LOW); //Set RST pin low delay(100); //Wait 100 ms digitalWrite(RST, HIGH); //Set RST pin high Wire.beginTransmission(0x3D); // Start communication with slave Wire.write(0x00); //Command stream Wire.write(0xAE); //Set display Off Wire.write(0xD5); //Set display clock divide ratio/oscillator frequency Wire.write(0x80); Wire.write(0xA8); //Set multiplex ratio Wire.write(0x3F); Wire.write(0xD3); //Set display offset Wire.write(0x00); Wire.write(0x40); //Set display start line Wire.write(0x8D); //Set charge pump Wire.write(0x14); //VCC generated by internal DC/DC circuit Wire.write(0xA1); //Set segment re-map Wire.write(0xC0); //Set COM output scan direction Wire.write(0xDA); //Set COM pins hardware configuration Wire.write(0x12); Wire.write(0x81); //Set contrast control Wire.write(0xCF); Wire.write(0xD9); //Set pre-changed period Wire.write(0xF1); Wire.write(0xDB); //Set VCOMH Deselected level Wire.write(0x40); Wire.write(0xA4); //Set entire display on/off Wire.write(0xA6); //Set normal/inverse display Wire.write(0x20); //Set memory address mode Wire.write(0x00); //Horizontal Wire.write(0xAF); //Set display on Wire.endTransmission(); //End communication with slave } /*Midpoint circle algorithm*/ void circle(int x0, int y0, int R){ int x = R; //Set x equal to radius int y = 0; int de = 1-x; while(x>=y){ draw_pixel(x+x0, y+y0); //First octant draw_pixel(y+x0, x+y0); //Second octant draw_pixel(-y+x0, x+y0); //Third octant draw_pixel(-x+x0, y+y0); //Fourth octant draw_pixel(-x+x0, -y+y0); //Fifth octant draw_pixel(-y+x0, -x+y0); //Sixth octant draw_pixel(y+x0, -x+y0); //Seventh octant draw_pixel(x+x0, -y+y0); //Eight octant y++; if(de<=0){ de += 2*y+1; } else{ x--; de += 2*(y-x)+1; } } } void draw_pixel(int x, int y){ if((x<0) || (x>=WIDTH) || (y<0) || (y>=HEIGHT)){ //Check for boundaries return; } else{ array[x+(y/8)*WIDTH] |= _BV((y%8)); //Store pixel in array } } void Flush(){ Wire.beginTransmission(0x3D); //Start communication with slave Wire.write(0x00); //Command stream Wire.write(0x00); //Set lower column start address for page addressing mode Wire.write(0x10); //Set higher column start address for page addressing mode Wire.write(0x40); //Set display start line Wire.endTransmission(); //End communication with slave unsigned char twbrbackup = TWBR; //Two wire bit rate register TWBR = 12; //Set to 400kHz for(unsigned short q=0; q<(WIDTH*HEIGHT/8); q++){ Wire.beginTransmission(0x3D); //Start communication with slave Wire.write(0x40); //Data stream for(unsigned char w=0; w<16; w++){ Wire.write(array[q]); //Transmit data to be displayed q++; } q--; Wire.endTransmission(); //End communication with slave } TWBR = twbrbackup; } 

La función del círculo se basa en el Algoritmo de punto medio círculo para generar círculos con los pixeles. El algoritmo dibuja un píxel a la vez en cada octante del círculo por medio de simetría hasta completa la circunferencia. Una vez más, la función del pixel se utiliza para dibujar cada píxel del círculo cada vez se le llama en el programa. Consulte el siguiente enlace para más información sobre el algoritmo:

https://en.wikipedia.org/wiki/Midpoint_circle_algo...

Dando nuestro círculo la función tres argumentos (origen en (x, y) y radio), ahora podemos dibujar un círculo como el anterior.

En este ejemplo el origen del círculo es (63,31) y tiene un radio de 10, generando así un círculo en el centro de la página con un radio de 10 píxeles.

Artículos Relacionados

Para empezar con Phidgets en la frambuesa Pi

Para empezar con Phidgets en la frambuesa Pi

Este instructable es una adaptación de uno de nuestro blog posts .Antes de comenzar, usted querrá tener algunas cosas en su lugar. Necesitarás:Una funcionamiento frambuesa Pi (obviamente).Un por separado USB concentrador, ya que el Raspberry Pi no es
Para empezar con uno de LinkIt - GPS

Para empezar con uno de LinkIt - GPS

Este es instructivo forma parte de una serie de instructables en el que muestro cómo comenzar con un tablero de LinkIt uno. En el anterior instructable veíamos cómo conectar su LinkIt uno a una red WiFi, en este instructable voy a mostrarte cómo empe
Para empezar con el Edison Intel - WIFI

Para empezar con el Edison Intel - WIFI

Esto es parte de una serie de procedimientos iniciales con el Edison de Intel, en el tutorial pasado que veíamos cómo actualizar Linux corriendo en el Edison y antes de que debe cómo comenzar con el IDE de Arduino y Edison de Intel en una escapada de
Para empezar con Edison - parpadear un LED en la consola de

Para empezar con Edison - parpadear un LED en la consola de

Esto es parte de una serie de procedimientos iniciales con el Edison de Intel, en los dos últimos tutoriales que te mostré cómo instalar el IDE de Arduino, programa el Edison de Intel y actualizar Linux corriendo en el Edison.En este tutorial voy a m
Para empezar con el ATMega328P

Para empezar con el ATMega328P

En el movimiento de Internet de las cosas , personas en todo el mundo conectan sus cosas – TV, mascotas, plantas de interior incluso - a internet y transmitir a todo tipo de datos.Si vas a ser parte de ese movimiento, o quieren incursionar en prototi
Para empezar con IoT usando la partícula

Para empezar con IoT usando la partícula

IoT es un muy divertido experimentar, mientras que la diversión también es energía muy completo. Puede obtener una amplia gama de dispositivos de conexión, como por ejemplo una cafetera puede tweet cuando se hace el café o un automático garage abrela
Para empezar con el DP32 de Digilent

Para empezar con el DP32 de Digilent

Yo uso el DP32 para mi serie de Robots baratos. Este tutorial es a debe leer para cualquier persona usando DP32, debido a la configuración de esta tarjeta significa que toma configuración un poco más que las otras placas como la UC32 o Arduino.El DP3
Para empezar con uno de LinkIt - Servo

Para empezar con uno de LinkIt - Servo

En los últimos instructable le mostré cómo empezar con un LinkIt uno y cómo a parpadear un LED y crear patrones de uso. Esto es parte de la serie donde te muestro cómo conseguir comenzó con Servos con el link uno y cómo controlar un servo con un telé
Para empezar con AVR de Atmel y BASCOM

Para empezar con AVR de Atmel y BASCOM

He visto un montón de Instructables que muestra cómo trabajar con microprocesadores, pero todos asumen que han trabajado con ellos antes y saber lo que está haciendo. No he visto un Instructable que te lleva de la nada y se basa en cada paso.Lo que h
Para empezar con la frambuesa Pi 2 (LabVIEW)

Para empezar con la frambuesa Pi 2 (LabVIEW)

Esta guía detallada se va sobre los pasos necesarios para conectar la frambuesa Pi 2 modelo B (2 de RPI) o frambuesa Pi 3 modelo B a LabVIEW utilizando LabVIEW MakerHub LINX. LINX es utilizado para interactuar con plataformas comunes incrustadas como
Para empezar con Analog.IO y eléctrica Imp

Para empezar con Analog.IO y eléctrica Imp

Analog.IO es un nuevo sitio web dedicado al intercambio de flujos de datos de internet de las cosas los dispositivos conectados. Analog.IO le permite ver sus datos a través de un navegador donde quiera que estés en el mundo. Control de los datos que
Para empezar con el Kit de escena para iOS

Para empezar con el Kit de escena para iOS

En iOS 8, escena fue lanzado el iOS y dio a los desarrolladores el poder usar 3D en sus juegos móviles sin conocimiento de OpenGL ES, un motor de juego separado como unidad 3D o Unreal Engine. Es una gran biblioteca que se puede utilizar en las aplic
Para empezar con eléctrica Imp

Para empezar con eléctrica Imp

Imp eléctrico hace que sea fácil y divertido para llevar conectividad a Internet a sus dispositivos.Este Instructables te guiará por el proceso de creación de una cuenta eléctrica Imp y consiguiendo a su primer Imp en línea.Usted necesitará los sigui
Para empezar con uno de LinkIt - Servos

Para empezar con uno de LinkIt - Servos

¿Cuál es el punto de tener una placa de desarrollo si usted no mover las cosas con él?Esta es la guía que comenzar con el uso de Servos (motorreductores controlados digitalmente) en sus proyectos usando el tablero de LinkIt uno.Otra vez esto está dir