Aan de slag met OLED Displays (12 / 16 stap)

Stap 12: Hoe om een cirkel te tekenen?


We kunnen de volgende code gebruiken voor het genereren van een cirkel op onze scherm:

 #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; } 

De functie van de cirkel is gebaseerd op het Middelpunt cirkel algoritme gebruikt voor het genereren van cirkels met pixels. Het algoritme vestigt één pixel tegelijk in elk octant van de cirkel door middel van symmetrie totdat de omtrek is voltooid. Nogmaals, wordt de pixel-functie gebruikt om het tekenen van elke pixel van de cirkel, telkens wanneer het in het programma wordt aangeroepen. Verwijzen naar de volgende link voor meer informatie over het algoritme:

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

Doordat onze kring functioneren drie argumenten (oorsprong op (x, y) en straal), we kunnen nu het tekenen van een cirkel zoals hierboven.

In dit voorbeeld van de cirkel oorsprong is (63,31) en heeft een straal van 10, dus het genereren van een cirkel in het midden van de pagina met een straal van 10 pixels.

Gerelateerde Artikelen

Aan de slag met pcDuino

Aan de slag met pcDuino

Na het plezier met de pcDuino, realiseerde ik dat mij konden wekken een stelletje tutorials te gebruiken. Dus dat is gewoon wat ik ga doen, dus laat mij uit te leggen wat is een pcduino en hoe u kunt instellen voor de eerste keer start.Wat is een pcD
Aan de slag met BTE13-010 - kloon Arduino Mini

Aan de slag met BTE13-010 - kloon Arduino Mini

Dit is een eenvoudige gids dat je hoe leren zal aan de slag met deze goedkope Arduino mini kloon, die betrekking hebben op alle maatregelen die men doen moet om te laten werken. In principe zijn ze 4...Solderen PIN headers *Bedrading het omhoogCorrec
Aan de slag met BADGEr (gemakkelijk)

Aan de slag met BADGEr (gemakkelijk)

Ik zal niet gaan veel in de technische details over de BADGEr en elektronisch papier display technologieën.Liever dit beschouw dit instructable is als de handleiding aan de slag met BADGEr gemakkelijk.Stap 1: Dingen die we nodigBADGEr-de e-reader boa
DIY-aan de slag met DRONES (met externe kalibratie)

DIY-aan de slag met DRONES (met externe kalibratie)

Wat zijn ze en wie hen gebruikt? Sommigen noemen hen drones, sommige gelden het label "quadcopters", al hebben ze een aantal rotoren of zelfs vliegtuigen worden - een afkorting voor hen "onbemande antenne systemen" (UAS). Ik liever noe
Aan de slag met de ESP8266 met "AT-opdrachten" Via Arduino

Aan de slag met de ESP8266 met "AT-opdrachten" Via Arduino

ESP8266 Wifi Module is een geïntegreerde chip ontworpen voor communicatie met de wereld van het internet via Wifi-radiosignalen. Het is de verbinding tussen een project en het internet. Het heeft aan boord en geheugen waarmee het worden geïntegreerd
Aan de slag met ESP8266 met op opdrachten, NodeMCU of het Arduino (ESP-12E)

Aan de slag met ESP8266 met op opdrachten, NodeMCU of het Arduino (ESP-12E)

Dit Instructable zal u tonen de stappen die nodig zijn om te beginnen met de ESP8266 met behulp van een fantastische kleine ontwikkel bord voor de ESP-12E-module. Het bord bevat alles wat u nodig met inbegrip van een USB naar seriële adapter, oppervl
Aan de slag met IoT met behulp van het Particle Core

Aan de slag met IoT met behulp van het Particle Core

IoT is een echt leuk om te experimenteren, terwijl ze plezier het is ook zeer macht volledig. Het kan krijgen een breed scala van apparaten aansluiten, zoals bijvoorbeeld een koffiezetapparaat dat kunt tweet wanneer de koffie wordt gedaan of een auto
AAN DE SLAG MET DOMOTICASYSTEEM.

AAN DE SLAG MET DOMOTICASYSTEEM.

WAARSCHUWING: DIT PROJECT ZAL OORZAKEN OPWINDING DIE MOGELIJK SCHADELIJK VOOR DE GEZONDHEID.Dus hier ben ik met een ander leuk Instructables controle geleid door stem, met behulp van Arduino via Bluetooth-module (HC 05). Zodat deze Instructables kan
Aan de slag met LinkIt One - knippert een LED

Aan de slag met LinkIt One - knippert een LED

Hoi!Bent u vaak verward door de hele wereld nieuwe borden en tech die om de paar maanden houden komen?Bent u vaak op zoek op google gewoon zin te maken van dit alles?Bent u bereid om echt geweldig projecten te maken, maar weet niet waar te beginnen?B
Aan de slag met de interactie onderdelen Kit deel 1

Aan de slag met de interactie onderdelen Kit deel 1

In deze tutorial zal ik laten zien hoe met behulp van een potentiometer (potmeter) controle van de helderheid van een LED. Ook heb ik een schakelaar van de tilt (wordt later beschreven) in serie met de LED, zodat wanneer het breadboard rechtop het op
Aan de slag met Ubuntu Linux

Aan de slag met Ubuntu Linux

Linux is het besturingssysteem (OS) van keuze voor de computer savvy sinds haar oprichting, maar in de afgelopen paar jaar met de release van kleine linux gebaseerde fysieke computing platforms zoals de Raspberry Pi, BeagleBone en Arduino Yun (onder
Aan de slag met de ESP8266 ESP-12

Aan de slag met de ESP8266 ESP-12

Dit instructable zal betrekking hebben op de basisstappen die u volgen moet om aan de slag met de ESP8266 ESP-12.Veel van deze inhoud er al uit, maar ik had een harde tijd om alles op zijn plaats, en de verschillende tutorials kunnen leiden tot veel
Hoe aan de slag met Eclipse en AVR

Hoe aan de slag met Eclipse en AVR

AVR's programmeren is leuk, maar soms maken de fabrikanten ontwikkelomgevingen code onderhoud een karwei. Als je op zoek naar een vrije, cross-platform, hoge kwaliteit stuk van software voor het programmeren van AVR's Eclipse is een goede keuze.Verpl
Aan de slag met ubuntu en de AVR draak

Aan de slag met ubuntu en de AVR draak

hier is wat ik deed om te beginnen met de AVR Dragon te programma ATMEGA8 microcontrollers met behulp van ubuntu (dit is gericht op beginners, ikzelf ben ook een beginner, wordt dus geen verbeteringen van meer ervaren gebruikers worden zeer gewaardee