acid-drop- Hacking the planet from a LilyGo T-Deck using custom firmware |
git clone git://git.acid.vegas/acid-drop.git |
Log | Files | Refs | Archive | README | LICENSE |
Draw_Smooth_Circles.ino (2710B)
1 // Example for drawSmoothCircle function. Which draws anti-aliased circles 2 // The circle periphery has a "thickness" of ~3 pixles to minimise the 3 // "braiding" effect present in narrow anti-aliased lines. 4 5 // For thicker or thinner circle outlines use the drawArc function. 6 7 #include <TFT_eSPI.h> // Include the graphics library 8 TFT_eSPI tft = TFT_eSPI(); // Create object "tft" 9 10 // ------------------------------------------------------------------------- 11 // Setup 12 // ------------------------------------------------------------------------- 13 void setup(void) { 14 Serial.begin(115200); 15 tft.init(); 16 tft.fillScreen(TFT_BLACK); 17 } 18 19 // ------------------------------------------------------------------------- 20 // Main loop 21 // ------------------------------------------------------------------------- 22 void loop() 23 { 24 static uint32_t radius = 2; 25 static uint32_t index = 0; 26 27 uint16_t fg_color = rainbow(index); 28 uint16_t bg_color = TFT_BLACK; // This is the background colour used for smoothing (anti-aliasing) 29 30 uint16_t x = tft.width() / 2; // Position of centre of arc 31 uint16_t y = tft.height() / 2; 32 33 tft.drawSmoothCircle(x, y, radius, fg_color, bg_color); 34 35 radius += 11; 36 index += 5; 37 index = index%192; 38 39 if (radius > tft.height()/2) { 40 delay (1000); 41 radius = 2; 42 } 43 } 44 45 46 // ------------------------------------------------------------------------- 47 // Return a 16 bit rainbow colour 48 // ------------------------------------------------------------------------- 49 unsigned int rainbow(byte value) 50 { 51 // If 'value' is in the range 0-159 it is converted to a spectrum colour 52 // from 0 = red through to 127 = blue to 159 = violet 53 // Extending the range to 0-191 adds a further violet to red band 54 55 value = value%192; 56 57 byte red = 0; // Red is the top 5 bits of a 16 bit colour value 58 byte green = 0; // Green is the middle 6 bits, but only top 5 bits used here 59 byte blue = 0; // Blue is the bottom 5 bits 60 61 byte sector = value >> 5; 62 byte amplit = value & 0x1F; 63 64 switch (sector) 65 { 66 case 0: 67 red = 0x1F; 68 green = amplit; // Green ramps up 69 blue = 0; 70 break; 71 case 1: 72 red = 0x1F - amplit; // Red ramps down 73 green = 0x1F; 74 blue = 0; 75 break; 76 case 2: 77 red = 0; 78 green = 0x1F; 79 blue = amplit; // Blue ramps up 80 break; 81 case 3: 82 red = 0; 83 green = 0x1F - amplit; // Green ramps down 84 blue = 0x1F; 85 break; 86 case 4: 87 red = amplit; // Red ramps up 88 green = 0; 89 blue = 0x1F; 90 break; 91 case 5: 92 red = 0x1F; 93 green = 0; 94 blue = 0x1F - amplit; // Blue ramps down 95 break; 96 } 97 return red << 11 | green << 6 | blue; 98 }