Komma igång med OLED-displayer (12 / 16 steg)

Steg 12: Hur man rita en cirkel?



Vi kan använda följande kod för att generera en cirkel på skärmen:

#include //Include tråd bibliotek för I2C kommunikation
#define höjd 64
#define bredd 128
CONST int RST = 10; Tilldela stift 10 för återställning
int i; Ställ in variabeln i som heltal
statiska unsigned char array [1024]; Buffert array

void setup() {
pin_init(); Initiera pins
initialize_OLED(); Initiera skärm
MEMSET (array, 0, sizeof(array)); Initiera arrayen med 0s
Circle(63,31,10); Rita cirklar, (x, y, R)
Flush(); Skicka data
}

void loop() {
}

void pin_init() {
Serial.BEGIN(9600); Ange baud för seriell överföring
pinMode (RST, OUTPUT); Ange första som utgång
}

void initialize_OLED() {
Wire.BEGIN(); Initiera I2C gränssnitt
digitalWrite (RST, låg); Ange första pin låg
Delay(100); Vänta 100 ms
digitalWrite (RST, hög); Ange första pin hög
Wire.beginTransmission(0x3D); Börja meddelandet med slav
Wire.write(0x00); Kommandot ström
Wire.write(0xAE); Ställ in skärm
Wire.write(0xD5); Ställa in displayen klockfrekvens klyftan förhållandet/oscillator
Wire.write(0x80);
Wire.write(0xA8); Ställ in multiplex förhållandet
Wire.write(0x3F);
Wire.write(0xD3); Ställ in displayen offset
Wire.write(0x00);
Wire.write(0x40); Ställ in displayen startlinjen
Wire.write(0x8D); Ställ in charge pump
Wire.write(0x14); VCC genereras av inre DC/DC krets
Wire.write(0xA1); Ställa in segmentet re-karta
Wire.write(0xC0); Ange COM-utgång scan riktning
Wire.write(0xDA); Ange COM pins maskinvarukonfiguration
Wire.write(0x12);
Wire.write(0x81); Ange kontrastkontroll
Wire.write(0xCF);
Wire.write(0xD9); Förväg ändrade viss
Wire.write(0xF1);
Wire.write(0xDB); Inställd VCOMH avmarkerat nivå
Wire.write(0x40);
Wire.write(0xA4); Ange hela displayen på/av
Wire.write(0xA6); Ställ in normal/inversen display
Wire.write(0x20); Ställ in minne adress läge
Wire.write(0x00); Horisontella
Wire.write(0xAF); Ange visning på
Wire.endTransmission(); Avsluta kommunikation med slav
}

/ * Mittpunkten cirkel algoritm * /

void cirkel (int x0, int y0, int R) {
int x = R; Ange x är lika med radien
int y = 0;
int de = 1-x;

medan (x > = y) {
draw_pixel (x + x0, y + y0); Första Oktanten
draw_pixel (y + x0, x + y0); Andra Oktanten
draw_pixel (-y + x0, x + y0); Tredje Oktanten
draw_pixel (-x + x0, y + y0); Fjärde Oktanten
draw_pixel (-x + x0, -y + y0); Femte Oktanten
draw_pixel (-y + x0, - x + y0); Sjätte Oktanten
draw_pixel (y + x0, - x + y0); Sjunde Oktanten
draw_pixel (x + x0, -y + y0); Åtta Oktanten
y ++;
om (de < = 0) {
de += 2 * y + 1.
}
annat {
x--;
de += 2 *(y-x) + 1;
}
}
}

void draw_pixel (int x, int y) {
om ((x<0) || (x > = bredd) || (y < 0) || (y > = höjd)) {//Check avgränsningar
hemkomst.
}
annat {
Array [x + (y/8) * bredd] | = _BV((y%8)); Store pixel i en matris
}
}

void Flush() {
Wire.beginTransmission(0x3D); Börja meddelandet med slav
Wire.write(0x00); Kommandot ström
Wire.write(0x00); Ställa in lägre kolumn startadressen för sidan adressering läge
Wire.write(0x10); Ställa högre kolumn startadressen för sidan adressering läge
Wire.write(0x40); Ställ in displayen startlinjen
Wire.endTransmission(); Avsluta kommunikation med slav

unsigned char twbrbackup = TWBR; Två tråd bithastighet registrera
TWBR = 12; Inställd på 400kHz

för (osignerad kort q = 0; q < (bredd * höjd/8), q ++) {
Wire.beginTransmission(0x3D); Börja meddelandet med slav
Wire.write(0x40); Dataström
för (unsigned char w = 0; w < 16; w ++) {
Wire.write(array[q]); Överföra data som ska visas
q ++;
}
q--;
Wire.endTransmission(); Avsluta kommunikation med slav
}
TWBR = twbrbackup;
}

Funktionen cirklar bygger på Mittpunkten cirkel algoritm används för att generera cirklar med pixlar. Algoritmen ritar en bildpunkt i taget i varje Oktanten av cirkeln med hjälp av symmetri tills omkrets är klar. Gång, används funktionen pixel för att rita varje pixel av cirkeln varje gång det kallas i programmet. Se följande länk för mer information om algoritmen:

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

Genom att ge vår krets fungerar tre argument (ursprung på (x, y) och radius), vi kan nu Rita en cirkel som den ovan.

I detta exempel cirkelns ursprung (63,31) och har en radie på 10, vilket genererar en cirkel med en radie på 10 pixlar i mitten av sidan.

Se Steg
Relaterade Ämnen

Lilla e-läsaren med oled + arduino, testa

Detta är mitt första pass på en mycket liten e-läsaren med en oled-skärm och en arduino. Målet är att läsa en textfil från ett SD-kort med en form faktorn < 1 kvadrattum.Detta instructable är endast mycket grundläggande inställningarna, det omfattar...

Barrelponics - att komma igång med kretsloppsodling

kretsloppsodling är kombinationen av vattenbruk (höja vattenlevande djur) och hydroponics (odling av växter i vatten och utan jord). Det är enkelt nog; du mata fiskarna, fiskfoder växter (med sitt avfall), och växterna Rengör vattnet. Så varför skull...

Komma igång med interaktionen delar Kit del 1

I denna tutorial kommer jag visa hur man använder en potentiometer för att styra ljusstyrkan i en LED. Dessutom har jag en tilt switch (beskrivs senare) i serie med lampan så att när bakbord är upprätt det tänds, men när bakbord är vänt åt sidan elle...

Komma igång med Intel IoT för de riktiga Mac dummies :)

Detta Instructable beskriver hur jag arbetade mig igenom de första stegen med Intel IoT kit på en Mac.Jag Charlotte, en av medlemmarna av FabLab Breda (Nederländerna). Jag är mycket mer kapabel med hårdvara (3D-skrivare, lasercutters, CNC etc) än med...

Komma igång med Ubuntu Linux

Linux har operativsystemet (OS) för datorn kunniga sedan starten, men under de senaste åren med lanseringen av små linux baserade fysiska datorplattformar som Raspberry Pi, BeagleBone och Arduino Yun (bland många andra) har det varit en explosion av...

Allt-i-ett raspberry Pi komma igång med

Raspberry Pi, en av de mest geniala uppfinningen för beslutsfattare och hackare. Innan vi börjar i de praktiska och tråkiga detaljerna för att få det setup, vi först måste fundera över frågan att vad Raspberry Pi faktiskt är?Raspberry Pi är en linux-...

DIY-komma igång med DRÖNARE (med REMOTE KALIBRERINGSMÖNSTRET)

Vad är de och vem som använder dem? Vissa kallar dem drönare, vissa gäller etiketten "quadcopters", även om de kan ha någon antal rotorer eller ens vara plan – även kallat dem "obemannade aerial system" (UAS). Jag föredrar att kalla de...

En BeagleBone Tutorial - komma igång med Motor Bridge Cape

Detta projekt är en handledning som kan lära dig att använda Motor Bridge udden på BBB eller BBG ska jag visa dig en demo som kan köra sex servon två DC motorer och en stegmotor samtidigt.Steg 1: Om Motor Bridge CapeMotor Bridge Cape funktioner dubbe...

Komma igång med Chrome-tillägg

Jag tror chrome-tillägg är det mest praktiska sättet att lära sig hur att lära sig programmera kan lösa dina problem. Medan jag arbetar med en internet jätten som utvecklingsingenjör mjukvara, tror jag det kan vara lätt för alla att komma igång med n...

Komma igång med ESP8266 med hjälp av "AT-kommandon" Via Arduino

ESP8266 Wifi modul är en integrerad krets som är designad för att kommunicera till världen av internet via Wifi radiosignaler. Det är länken mellan ett projekt och internet. Den har beredning ombord och minne som gör att den kan integreras med elektr...

Komma igång med ESP8266 ESP-12

Detta instructable kommer att täcka de grundläggande stegen som du måste följa för att komma igång med ESP8266 ESP-12.Mycket av detta innehåll är redan ute där, men jag hade svårt att få allt på plats och olika tutorials kan orsaka en hel del förvirr...

Komma igång med ESP8266 på kommandon, NodeMCU eller Arduino (ESP-12naE)

Detta Instructable visar dig steg som behövs för att komma igång med ESP8266 med en fantastisk liten utveckling styrelse för modulen ESP-12naE. I styrelsen ingår allt som behövs inklusive en USB till seriell adapter, ytmonterad LED och spänningsregul...

Komma igång med Mini fickdatorer

Om en och en halv månad sedan, jag skapade ett projekt kallat Mini fickdator och skrev en Instructable på hur man bygger den. Detta Instructable tar hela projektet ett steg längre genom att hjälpa dig att komma igång med din fickdator Mini. Har inte...

Komma igång med WF32!

Hallå! Denna tutorial är för gammal! Sedan jag skapade detta Instructable, har server exempelkod uppdaterats för att använda en bättre metod att manipulera DP32 via wifi. Kolla in joshwoldstad's guider för uppdaterade koden!~~~~~Välkomna, nya använda...

Komma igång med IoT använder partikel kärna

Sakernas Internet är ett riktigt roligt att experimentera, samtidigt som det är kul är det också mycket makt full. Det kan få ett brett utbud av enheter ansluter, som till exempel en kaffebryggare som kan tweet när kaffet är gjort eller en automatisk...

Komma igång med pcDuino

Efter att ha kul med pcDuino, insåg jag att jag kunde skapa en massa tutorials använder den. Så det är bara vad jag ska göra, så låt mig börja med att förklara vad som är en pcduino och hur man ställer upp för första gången.Vad är en pcDuino?pcDuino...

Komma igång med BTE13-010 - Arduino Mini clone

Detta är en enkel guide som lär dig hur du kommer igång med detta billigt Arduino mini clone, som täcker alla steg man bör göra för att få det att fungera. I princip är de 4...Lödning PIN huvuden *Binda den uppInstallera rätt drivrutiner **Provning.....

STM32F103 komma igång (med Keil och STMCubeMX)

I denna tutorial, jag hjälper dig att få installera programvaras som du behöver samtidigt utveckla din ansökan med hjälp STM32 styrelse.Jag kommer att använda STM32F103RBT6. De flesta av denna handledning gäller även andra STM styrelser, men du måste...

Linkit en komma igång med GPS

I detta instructable jag ska visa dig hur du kommer igång med Linkit en GPS, detta kommer att kommunicera med GPS-satelliterna att ge dig på plats i latitud och longitud.Steg 1: Förteckning över delar Linkit enGPS-antennMikro-USB-kabelSteg 2: Ansluta...