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

TFT_Spiro.ino (2190B)

      1 // Spiro
      2 // Rainbow patern generator
      3 
      4 #include <TFT_eSPI.h> // Hardware-specific library
      5 #include <SPI.h>
      6 
      7 TFT_eSPI tft = TFT_eSPI();       // Invoke custom library
      8 
      9 #define DEG2RAD 0.0174532925 // Convert angles in degrees to radians
     10 
     11 unsigned long runTime = 0;
     12 
     13 float sx = 0, sy = 0;
     14 uint16_t x0 = 0, x1 = 0, yy0 = 0, yy1 = 0;
     15 
     16 void setup()
     17 {
     18   //randomSeed(analogRead(A0));
     19 
     20   // Setup the LCD
     21   tft.init();
     22   tft.setRotation(3);
     23 }
     24 
     25 void loop()
     26 {
     27   runTime = millis();
     28 
     29   tft.fillScreen(TFT_BLACK);
     30   int n = random(2, 23), r = random(20, 100), colour = 0; //rainbow();
     31 
     32   for (long i = 0; i < (360 * n); i++) {
     33     sx = cos((i / n - 90) * DEG2RAD);
     34     sy = sin((i / n - 90) * DEG2RAD);
     35     x0 = sx * (120 - r) + 159;
     36     yy0 = sy * (120 - r) + 119;
     37 
     38 
     39     sy = cos(((i % 360) - 90) * DEG2RAD);
     40     sx = sin(((i % 360) - 90) * DEG2RAD);
     41     x1 = sx * r + x0;
     42     yy1 = sy * r + yy0;
     43     tft.drawPixel(x1, yy1, rainbow(map(i%360,0,360,0,127))); //colour);
     44   }
     45   
     46   r = random(20, 100);//r = r / random(2,4);
     47   for (long i = 0; i < (360 * n); i++) {
     48     sx = cos((i / n - 90) * DEG2RAD);
     49     sy = sin((i / n - 90) * DEG2RAD);
     50     x0 = sx * (120 - r) + 159;
     51     yy0 = sy * (120 - r) + 119;
     52 
     53 
     54     sy = cos(((i % 360) - 90) * DEG2RAD);
     55     sx = sin(((i % 360) - 90) * DEG2RAD);
     56     x1 = sx * r + x0;
     57     yy1 = sy * r + yy0;
     58     tft.drawPixel(x1, yy1, rainbow(map(i%360,0,360,0,127))); //colour);
     59   }
     60 
     61 
     62   delay(2000);
     63 }
     64 
     65 unsigned int rainbow(int value)
     66 {
     67   // Value is expected to be in range 0-127
     68   // The value is converted to a spectrum colour from 0 = blue through to red = blue
     69   //int value = random (128);
     70   byte red = 0; // Red is the top 5 bits of a 16 bit colour value
     71   byte green = 0;// Green is the middle 6 bits
     72   byte blue = 0; // Blue is the bottom 5 bits
     73 
     74   byte quadrant = value / 32;
     75 
     76   if (quadrant == 0) {
     77     blue = 31;
     78     green = 2 * (value % 32);
     79     red = 0;
     80   }
     81   if (quadrant == 1) {
     82     blue = 31 - (value % 32);
     83     green = 63;
     84     red = 0;
     85   }
     86   if (quadrant == 2) {
     87     blue = 0;
     88     green = 63;
     89     red = value % 32;
     90   }
     91   if (quadrant == 3) {
     92     blue = 0;
     93     green = 63 - 2 * (value % 32);
     94     red = 31;
     95   }
     96   return (red << 11) + (green << 5) + blue;
     97 }
     98 
     99