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

Paso 9: ¿Cómo trazar la línea?

Una vez que tenemos una función del pixel, podemos usar para trazar una línea definida por un inicio y punto final en x e y axis 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 line(0,63,0,31); //Draw line 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 communicaiton with slave } /*Bresenham's line drawing algorithm*/ void line(int x1, int x2, int y1, int y2){ int cx = x1; int cy = y1; int dx = x2-cx; int dy = y2-cy; if(dx<0){ dx = 0-dx; } if(dy<0){ dy = 0-dy; } int sx = 0; int sy = 0; if(cx(0-dy)){ err = err-dy; cx = cx+sx; } if(e2=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 400 kHz 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 de línea se basa en el Algoritmo de Bresenham dibujo utilizado para dibujar líneas con píxeles. El siguiente pseudo código se utilizó para implementar el algoritmo en nuestro programa:
http://41j.com/blog/2012/09/bresenhams-line-drawin...

Este algoritmo básicamente rellena los píxeles entre (x 0, y0) y (x1, y1) por decidir qué pixeles deben girarse el siguiente basado en un valor de error. Consulte los siguientes enlaces para obtener más información sobre el algoritmo:
http://www.cs.Helsinki.fi/Group/Goa/mallinnus/line...
https://en.wikipedia.org/wiki/Bresenham%27s_line_a...

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