Guest User

Untitled

a guest
Dec 24th, 2022
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 14.65 KB | None | 0 0
  1. // Program to exercise the MD_MAX72XX library
  2. //
  3. // Uses most of the functions in the library
  4. #include <MD_MAX72xx.h>
  5.  
  6. // Turn on debug statements to the serial output
  7. #define  DEBUG  1
  8.  
  9. #if  DEBUG
  10. #define PRINT(s, x) { Serial.print(F(s)); Serial.print(x); }
  11. #define PRINTS(x) Serial.print(F(x))
  12. #define PRINTD(x) Serial.println(x, DEC)
  13.  
  14. #else
  15. #define PRINT(s, x)
  16. #define PRINTS(x)
  17. #define PRINTD(x)
  18.  
  19. #endif
  20.  
  21. // Define the number of devices we have in the chain and the hardware interface
  22. // NOTE: These pin numbers will probably not work with your hardware and may
  23. // need to be adapted
  24. #define HARDWARE_TYPE MD_MAX72XX::GENERIC_HW
  25. #define MAX_DEVICES 4
  26.  
  27. #define CLK_PIN   13  // or SCK
  28. #define DATA_PIN  11  // or MOSI
  29. #define CS_PIN    10  // or SS
  30.  
  31. // SPI hardware interface
  32. MD_MAX72XX mx = MD_MAX72XX(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
  33. // Specific SPI hardware interface
  34. //MD_MAX72XX mx = MD_MAX72XX(HARDWARE_TYPE, SPI1, CS_PIN, MAX_DEVICES);
  35. // Arbitrary pins
  36. //MD_MAX72XX mx = MD_MAX72XX(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);
  37.  
  38. // We always wait a bit between updates of the display
  39. #define  DELAYTIME  100  // in milliseconds
  40.  
  41. void scrollText(const char *p)
  42. {
  43.   uint8_t charWidth;
  44.   uint8_t cBuf[8];  // this should be ok for all built-in fonts
  45.  
  46.   PRINTS("\nScrolling text");
  47.   mx.clear();
  48.  
  49.   while (*p != '\0')
  50.   {
  51.     charWidth = mx.getChar(*p++, sizeof(cBuf) / sizeof(cBuf[0]), cBuf);
  52.  
  53.     for (uint8_t i=0; i<=charWidth; i++)    // allow space between characters
  54.     {
  55.       mx.transform(MD_MAX72XX::TSL);
  56.       if (i < charWidth)
  57.         mx.setColumn(0, cBuf[i]);
  58.       delay(DELAYTIME);
  59.     }
  60.   }
  61. }
  62.  
  63. void zeroPointSet()
  64. // Demonstrates the use of setPoint and
  65. // show where the zero point is in the display
  66. {
  67.   PRINTS("\nZero point highlight");
  68.   mx.clear();
  69.  
  70.   if (MAX_DEVICES > 1)
  71.     mx.setChar((2*COL_SIZE)-1, '0');
  72.  
  73.   for (uint8_t i=0; i<ROW_SIZE; i++)
  74.   {
  75.     mx.setPoint(i, i, true);
  76.     mx.setPoint(0, i, true);
  77.     mx.setPoint(i, 0, true);
  78.     delay(DELAYTIME);
  79.   }
  80.  
  81.   delay(DELAYTIME*3);
  82. }
  83.  
  84. void rows()
  85. // Demonstrates the use of setRow()
  86. {
  87.   PRINTS("\nRows 0->7");
  88.   mx.clear();
  89.  
  90.   for (uint8_t row=0; row<ROW_SIZE; row++)
  91.   {
  92.     mx.setRow(row, 0xff);
  93.     delay(2*DELAYTIME);
  94.     mx.setRow(row, 0x00);
  95.   }
  96. }
  97.  
  98. void checkboard()
  99. // nested rectangles spanning the entire display
  100. {
  101.   uint8_t chkCols[][2] = { { 0x55, 0xaa }, { 0x33, 0xcc }, { 0x0f, 0xf0 }, { 0xff, 0x00 } };
  102.  
  103.   PRINTS("\nCheckboard");
  104.   mx.clear();
  105.  
  106.   for (uint8_t pattern = 0; pattern < sizeof(chkCols)/sizeof(chkCols[0]); pattern++)
  107.   {
  108.     uint8_t col = 0;
  109.     uint8_t idx = 0;
  110.     uint8_t rep = 1 << pattern;
  111.  
  112.     while (col < mx.getColumnCount())
  113.     {
  114.       for (uint8_t r = 0; r < rep; r++)
  115.         mx.setColumn(col++, chkCols[pattern][idx]);   // use odd/even column masks
  116.       idx++;
  117.       if (idx > 1) idx = 0;
  118.     }
  119.  
  120.     delay(10 * DELAYTIME);
  121.   }
  122. }
  123.  
  124. void columns()
  125. // Demonstrates the use of setColumn()
  126. {
  127.   PRINTS("\nCols 0->max");
  128.   mx.clear();
  129.  
  130.   for (uint8_t col=0; col<mx.getColumnCount(); col++)
  131.   {
  132.     mx.setColumn(col, 0xff);
  133.     delay(DELAYTIME/MAX_DEVICES);
  134.     mx.setColumn(col, 0x00);
  135.   }
  136. }
  137.  
  138. void cross()
  139. // Combination of setRow() and setColumn() with user controlled
  140. // display updates to ensure concurrent changes.
  141. {
  142.   PRINTS("\nMoving cross");
  143.   mx.clear();
  144.   mx.control(MD_MAX72XX::UPDATE, MD_MAX72XX::OFF);
  145.  
  146.   // diagonally down the display R to L
  147.   for (uint8_t i=0; i<ROW_SIZE; i++)
  148.   {
  149.     for (uint8_t j=0; j<MAX_DEVICES; j++)
  150.     {
  151.       mx.setColumn(j, i, 0xff);
  152.       mx.setRow(j, i, 0xff);
  153.     }
  154.     mx.update();
  155.     delay(DELAYTIME);
  156.     for (uint8_t j=0; j<MAX_DEVICES; j++)
  157.     {
  158.       mx.setColumn(j, i, 0x00);
  159.       mx.setRow(j, i, 0x00);
  160.     }
  161.   }
  162.  
  163.   // moving up the display on the R
  164.   for (int8_t i=ROW_SIZE-1; i>=0; i--)
  165.   {
  166.     for (uint8_t j=0; j<MAX_DEVICES; j++)
  167.     {
  168.       mx.setColumn(j, i, 0xff);
  169.       mx.setRow(j, ROW_SIZE-1, 0xff);
  170.     }
  171.     mx.update();
  172.     delay(DELAYTIME);
  173.     for (uint8_t j=0; j<MAX_DEVICES; j++)
  174.     {
  175.       mx.setColumn(j, i, 0x00);
  176.       mx.setRow(j, ROW_SIZE-1, 0x00);
  177.     }
  178.   }
  179.  
  180.   // diagonally up the display L to R
  181.   for (uint8_t i=0; i<ROW_SIZE; i++)
  182.   {
  183.     for (uint8_t j=0; j<MAX_DEVICES; j++)
  184.     {
  185.       mx.setColumn(j, i, 0xff);
  186.       mx.setRow(j, ROW_SIZE-1-i, 0xff);
  187.     }
  188.     mx.update();
  189.     delay(DELAYTIME);
  190.     for (uint8_t j=0; j<MAX_DEVICES; j++)
  191.     {
  192.       mx.setColumn(j, i, 0x00);
  193.       mx.setRow(j, ROW_SIZE-1-i, 0x00);
  194.     }
  195.   }
  196.   mx.control(MD_MAX72XX::UPDATE, MD_MAX72XX::ON);
  197. }
  198.  
  199. void bullseye()
  200. // Demonstrate the use of buffer based repeated patterns
  201. // across all devices.
  202. {
  203.   PRINTS("\nBullseye");
  204.   mx.clear();
  205.   mx.control(MD_MAX72XX::UPDATE, MD_MAX72XX::OFF);
  206.  
  207.   for (uint8_t n=0; n<3; n++)
  208.   {
  209.     byte  b = 0xff;
  210.     int   i = 0;
  211.  
  212.     while (b != 0x00)
  213.     {
  214.       for (uint8_t j=0; j<MAX_DEVICES+1; j++)
  215.       {
  216.         mx.setRow(j, i, b);
  217.         mx.setColumn(j, i, b);
  218.         mx.setRow(j, ROW_SIZE-1-i, b);
  219.         mx.setColumn(j, COL_SIZE-1-i, b);
  220.       }
  221.       mx.update();
  222.       delay(3*DELAYTIME);
  223.       for (uint8_t j=0; j<MAX_DEVICES+1; j++)
  224.       {
  225.         mx.setRow(j, i, 0);
  226.         mx.setColumn(j, i, 0);
  227.         mx.setRow(j, ROW_SIZE-1-i, 0);
  228.         mx.setColumn(j, COL_SIZE-1-i, 0);
  229.       }
  230.  
  231.       bitClear(b, i);
  232.       bitClear(b, 7-i);
  233.       i++;
  234.     }
  235.  
  236.     while (b != 0xff)
  237.     {
  238.       for (uint8_t j=0; j<MAX_DEVICES+1; j++)
  239.       {
  240.         mx.setRow(j, i, b);
  241.         mx.setColumn(j, i, b);
  242.         mx.setRow(j, ROW_SIZE-1-i, b);
  243.         mx.setColumn(j, COL_SIZE-1-i, b);
  244.       }
  245.       mx.update();
  246.       delay(3*DELAYTIME);
  247.       for (uint8_t j=0; j<MAX_DEVICES+1; j++)
  248.       {
  249.         mx.setRow(j, i, 0);
  250.         mx.setColumn(j, i, 0);
  251.         mx.setRow(j, ROW_SIZE-1-i, 0);
  252.         mx.setColumn(j, COL_SIZE-1-i, 0);
  253.       }
  254.  
  255.       i--;
  256.       bitSet(b, i);
  257.       bitSet(b, 7-i);
  258.     }
  259.   }
  260.  
  261.   mx.control(MD_MAX72XX::UPDATE, MD_MAX72XX::ON);
  262. }
  263.  
  264. void stripe()
  265. // Demonstrates animation of a diagonal stripe moving across the display
  266. // with points plotted outside the display region ignored.
  267. {
  268.   const uint16_t maxCol = MAX_DEVICES*ROW_SIZE;
  269.   const uint8_t stripeWidth = 10;
  270.  
  271.   PRINTS("\nEach individually by row then col");
  272.   mx.clear();
  273.  
  274.   for (uint16_t col=0; col<maxCol + ROW_SIZE + stripeWidth; col++)
  275.   {
  276.     for (uint8_t row=0; row < ROW_SIZE; row++)
  277.     {
  278.       mx.setPoint(row, col-row, true);
  279.       mx.setPoint(row, col-row - stripeWidth, false);
  280.     }
  281.     delay(DELAYTIME);
  282.   }
  283. }
  284.  
  285. void spiral()
  286. // setPoint() used to draw a spiral across the whole display
  287. {
  288.   PRINTS("\nSpiral in");
  289.   int  rmin = 0, rmax = ROW_SIZE-1;
  290.   int  cmin = 0, cmax = (COL_SIZE*MAX_DEVICES)-1;
  291.  
  292.   mx.clear();
  293.   while ((rmax > rmin) && (cmax > cmin))
  294.   {
  295.     // do row
  296.     for (int i=cmin; i<=cmax; i++)
  297.     {
  298.       mx.setPoint(rmin, i, true);
  299.       delay(DELAYTIME/MAX_DEVICES);
  300.     }
  301.     rmin++;
  302.  
  303.     // do column
  304.     for (uint8_t i=rmin; i<=rmax; i++)
  305.     {
  306.       mx.setPoint(i, cmax, true);
  307.       delay(DELAYTIME/MAX_DEVICES);
  308.     }
  309.     cmax--;
  310.  
  311.     // do row
  312.     for (int i=cmax; i>=cmin; i--)
  313.     {
  314.       mx.setPoint(rmax, i, true);
  315.       delay(DELAYTIME/MAX_DEVICES);
  316.     }
  317.     rmax--;
  318.  
  319.     // do column
  320.     for (uint8_t i=rmax; i>=rmin; i--)
  321.     {
  322.       mx.setPoint(i, cmin, true);
  323.       delay(DELAYTIME/MAX_DEVICES);
  324.     }
  325.     cmin++;
  326.   }
  327. }
  328.  
  329. void bounce()
  330. // Animation of a bouncing ball
  331. {
  332.   const int minC = 0;
  333.   const int maxC = mx.getColumnCount()-1;
  334.   const int minR = 0;
  335.   const int maxR = ROW_SIZE-1;
  336.  
  337.   int  nCounter = 0;
  338.  
  339.   int  r = 0, c = 2;
  340.   int8_t dR = 1, dC = 1;    // delta row and column
  341.  
  342.   PRINTS("\nBouncing ball");
  343.   mx.clear();
  344.  
  345.   while (nCounter++ < 200)
  346.   {
  347.     mx.setPoint(r, c, false);
  348.     r += dR;
  349.     c += dC;
  350.     mx.setPoint(r, c, true);
  351.     delay(DELAYTIME/2);
  352.  
  353.     if ((r == minR) || (r == maxR))
  354.       dR = -dR;
  355.     if ((c == minC) || (c == maxC))
  356.       dC = -dC;
  357.   }
  358. }
  359.  
  360. void intensity()
  361. // Demonstrates the control of display intensity (brightness) across
  362. // the full range.
  363. {
  364.   uint8_t row;
  365.  
  366.   PRINTS("\nVary intensity ");
  367.  
  368.   mx.clear();
  369.  
  370.   // Grow and get brighter
  371.   row = 0;
  372.   for (int8_t i=0; i<=MAX_INTENSITY; i++)
  373.   {
  374.     mx.control(MD_MAX72XX::INTENSITY, i);
  375.     if (i%2 == 0)
  376.       mx.setRow(row++, 0xff);
  377.     delay(DELAYTIME*3);
  378.   }
  379.  
  380.   mx.control(MD_MAX72XX::INTENSITY, 8);
  381. }
  382.  
  383. void blinking()
  384. // Uses the test function of the MAX72xx to blink the display on and off.
  385. {
  386.   int  nDelay = 1000;
  387.  
  388.   PRINTS("\nBlinking");
  389.   mx.clear();
  390.  
  391.   while (nDelay > 0)
  392.   {
  393.     mx.control(MD_MAX72XX::TEST, MD_MAX72XX::ON);
  394.     delay(nDelay);
  395.     mx.control(MD_MAX72XX::TEST, MD_MAX72XX::OFF);
  396.     delay(nDelay);
  397.  
  398.     nDelay -= DELAYTIME;
  399.   }
  400. }
  401.  
  402. void scanLimit(void)
  403. // Uses scan limit function to restrict the number of rows displayed.
  404. {
  405.   PRINTS("\nScan Limit");
  406.   mx.clear();
  407.  
  408.   mx.control(MD_MAX72XX::UPDATE, MD_MAX72XX::OFF);
  409.   for (uint8_t row=0; row<ROW_SIZE; row++)
  410.     mx.setRow(row, 0xff);
  411.   mx.control(MD_MAX72XX::UPDATE, MD_MAX72XX::ON);
  412.  
  413.   for (int8_t s=MAX_SCANLIMIT; s>=0; s--)
  414.   {
  415.     mx.control(MD_MAX72XX::SCANLIMIT, s);
  416.     delay(DELAYTIME*5);
  417.   }
  418.   mx.control(MD_MAX72XX::SCANLIMIT, MAX_SCANLIMIT);
  419. }
  420.  
  421. void transformation1()
  422. // Demonstrates the use of transform() to move bitmaps on the display
  423. // In this case a user defined bitmap is created and animated.
  424. {
  425.   uint8_t arrow[COL_SIZE] =
  426.   {
  427.     0b00001000,
  428.     0b00011100,
  429.     0b00111110,
  430.     0b01111111,
  431.     0b00011100,
  432.     0b00011100,
  433.     0b00111110,
  434.     0b00000000
  435.   };
  436.  
  437.   MD_MAX72XX::transformType_t  t[] =
  438.   {
  439.     MD_MAX72XX::TSL, MD_MAX72XX::TSL, MD_MAX72XX::TSL, MD_MAX72XX::TSL,
  440.     MD_MAX72XX::TSL, MD_MAX72XX::TSL, MD_MAX72XX::TSL, MD_MAX72XX::TSL,
  441.     MD_MAX72XX::TSL, MD_MAX72XX::TSL, MD_MAX72XX::TSL, MD_MAX72XX::TSL,
  442.     MD_MAX72XX::TSL, MD_MAX72XX::TSL, MD_MAX72XX::TSL, MD_MAX72XX::TSL,
  443.     MD_MAX72XX::TFLR,
  444.     MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR,
  445.     MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR,
  446.     MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR,
  447.     MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR,
  448.     MD_MAX72XX::TRC,
  449.     MD_MAX72XX::TSD, MD_MAX72XX::TSD, MD_MAX72XX::TSD, MD_MAX72XX::TSD,
  450.     MD_MAX72XX::TSD, MD_MAX72XX::TSD, MD_MAX72XX::TSD, MD_MAX72XX::TSD,
  451.     MD_MAX72XX::TFUD,
  452.     MD_MAX72XX::TSU, MD_MAX72XX::TSU, MD_MAX72XX::TSU, MD_MAX72XX::TSU,
  453.     MD_MAX72XX::TSU, MD_MAX72XX::TSU, MD_MAX72XX::TSU, MD_MAX72XX::TSU,
  454.     MD_MAX72XX::TINV,
  455.     MD_MAX72XX::TRC, MD_MAX72XX::TRC, MD_MAX72XX::TRC, MD_MAX72XX::TRC,
  456.     MD_MAX72XX::TINV
  457.   };
  458.  
  459.   PRINTS("\nTransformation1");
  460.   mx.clear();
  461.  
  462.   // use the arrow bitmap
  463.   mx.control(MD_MAX72XX::UPDATE, MD_MAX72XX::OFF);
  464.   for (uint8_t j=0; j<mx.getDeviceCount(); j++)
  465.     mx.setBuffer(((j+1)*COL_SIZE)-1, COL_SIZE, arrow);
  466.   mx.control(MD_MAX72XX::UPDATE, MD_MAX72XX::ON);
  467.   delay(DELAYTIME);
  468.  
  469.   // run through the transformations
  470.   mx.control(MD_MAX72XX::WRAPAROUND, MD_MAX72XX::ON);
  471.   for (uint8_t i=0; i<(sizeof(t)/sizeof(t[0])); i++)
  472.   {
  473.     mx.transform(t[i]);
  474.     delay(DELAYTIME*4);
  475.   }
  476.   mx.control(MD_MAX72XX::WRAPAROUND, MD_MAX72XX::OFF);
  477. }
  478.  
  479. void transformation2()
  480. // Demonstrates the use of transform() to move bitmaps on the display
  481. // In this case font characters are loaded into the display for animation.
  482. {
  483.   MD_MAX72XX::transformType_t  t[] =
  484.   {
  485.     MD_MAX72XX::TINV,
  486.     MD_MAX72XX::TRC, MD_MAX72XX::TRC, MD_MAX72XX::TRC, MD_MAX72XX::TRC,
  487.     MD_MAX72XX::TINV,
  488.     MD_MAX72XX::TSL, MD_MAX72XX::TSL, MD_MAX72XX::TSL, MD_MAX72XX::TSL, MD_MAX72XX::TSL,
  489.     MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR,
  490.     MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR,
  491.     MD_MAX72XX::TSL, MD_MAX72XX::TSL, MD_MAX72XX::TSL, MD_MAX72XX::TSL, MD_MAX72XX::TSL, MD_MAX72XX::TSL, MD_MAX72XX::TSL, MD_MAX72XX::TSL,
  492.     MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR,
  493.     MD_MAX72XX::TSD, MD_MAX72XX::TSU, MD_MAX72XX::TSD, MD_MAX72XX::TSU,
  494.     MD_MAX72XX::TFLR, MD_MAX72XX::TFLR, MD_MAX72XX::TFUD, MD_MAX72XX::TFUD
  495.   };
  496.  
  497.   PRINTS("\nTransformation2");
  498.   mx.clear();
  499.   mx.control(MD_MAX72XX::WRAPAROUND, MD_MAX72XX::OFF);
  500.  
  501.   // draw something that will show changes
  502.   for (uint8_t j=0; j<mx.getDeviceCount(); j++)
  503.   {
  504.     mx.setChar(((j+1)*COL_SIZE)-1, '0'+j);
  505.   }
  506.   delay(DELAYTIME*5);
  507.  
  508.   // run thru transformations
  509.   for (uint8_t i=0; i<(sizeof(t)/sizeof(t[0])); i++)
  510.   {
  511.     mx.transform(t[i]);
  512.     delay(DELAYTIME*3);
  513.   }
  514. }
  515.  
  516. void wrapText()
  517. // Display text and animate scrolling using auto wraparound of the buffer
  518. {
  519.   PRINTS("\nwrapText");
  520.   mx.clear();
  521.   mx.wraparound(MD_MAX72XX::ON);
  522.  
  523.   // draw something that will show changes
  524.   for (uint16_t j=0; j<mx.getDeviceCount(); j++)
  525.   {
  526.     mx.setChar(((j+1)*COL_SIZE)-1, (j&1 ? 'M' : 'W'));
  527.   }
  528.   delay(DELAYTIME*5);
  529.  
  530.   // run thru transformations
  531.   for (uint16_t i=0; i<3*COL_SIZE*MAX_DEVICES; i++)
  532.   {
  533.     mx.transform(MD_MAX72XX::TSL);
  534.     delay(DELAYTIME/2);
  535.   }
  536.   for (uint16_t i=0; i<3*COL_SIZE*MAX_DEVICES; i++)
  537.   {
  538.     mx.transform(MD_MAX72XX::TSR);
  539.     delay(DELAYTIME/2);
  540.   }
  541.   for (uint8_t i=0; i<ROW_SIZE; i++)
  542.   {
  543.     mx.transform(MD_MAX72XX::TSU);
  544.     delay(DELAYTIME*2);
  545.   }
  546.   for (uint8_t i=0; i<ROW_SIZE; i++)
  547.   {
  548.     mx.transform(MD_MAX72XX::TSD);
  549.     delay(DELAYTIME*2);
  550.   }
  551.  
  552.   mx.wraparound(MD_MAX72XX::OFF);
  553. }
  554.  
  555. void showCharset(void)
  556. // Run through display of the the entire font characters set
  557. {
  558.   mx.clear();
  559.   mx.update(MD_MAX72XX::OFF);
  560.  
  561.   for (uint16_t i=0; i<256; i++)
  562.   {
  563.     mx.clear(0);
  564.     mx.setChar(COL_SIZE-1, i);
  565.  
  566.     if (MAX_DEVICES >= 3)
  567.     {
  568.       char hex[3];
  569.  
  570.       sprintf(hex, "%02X", i);
  571.  
  572.       mx.clear(1);
  573.       mx.setChar((2*COL_SIZE)-1,hex[1]);
  574.       mx.clear(2);
  575.       mx.setChar((3*COL_SIZE)-1,hex[0]);
  576.     }
  577.  
  578.     mx.update();
  579.     delay(DELAYTIME*2);
  580.   }
  581.   mx.update(MD_MAX72XX::ON);
  582. }
  583.  
  584. void setup()
  585. {
  586.   mx.begin();
  587.  
  588. #if  DEBUG
  589.   Serial.begin(57600);
  590. #endif
  591.   PRINTS("\n[MD_MAX72XX Test & Demo]");
  592. //  scrollText("MD_MAX72xx Test  ");
  593. }
  594.  
  595. void loop()
  596. {
  597. #if 1
  598.   scrollText("Graphics");
  599.   zeroPointSet();
  600.   rows();
  601.   columns();
  602.   cross();
  603.   stripe();
  604.   checkboard();
  605.   bullseye();
  606.   bounce();
  607.   spiral();
  608. #endif
  609.  
  610. #if 1
  611.   scrollText("Control");
  612.   intensity();
  613.   scanLimit();
  614.   blinking();
  615. #endif
  616.  
  617. #if 1
  618.   scrollText("Transform");
  619.   transformation1();
  620.   transformation2();
  621. #endif
  622.  
  623. #if 1
  624.   scrollText("Charset");
  625.   wrapText();
  626.   showCharset();
  627. #endif
  628. }
  629.  
  630.  
Advertisement
Add Comment
Please, Sign In to add comment