Анимированная иконка вытяжного вентилятора. (3 кадра)

      draw_cooler_on_icon




    Анимация синхронизирована с циклами программы, 1 цикл - 1 кадр. Предварительно создана переменная tact, которая считает количество циклов, и сбрасывается каждый раз после третьего. Функция запускается каждый цикл и рисуется case в зависимости от текущего такта. Основная сложность работоспособности анимации, в её синхронизации с кодом основной программы. Выполнение основного кода, будет подтормаживать анимацию. Здесь возможно следующее решение. Увеличить количество тактов до 4-х, в четвертый такт поместить основной код, а к первым трем добавить задержку (delay) которая по времени будет примерно равна времени выполнения кода основной программы. Если код будет исполнятся 400-500 мсек, то ошибка или погрешности задержки для анимации в 100-150 мсек не испортит восприятие анимации.

  В противном случае, просто использовать статичное изображение при включении устройства вентиляции, и закрашивать черным прямоугольником при отключении. Закрашивание при отключении потребуется и для анимированного случая. В примере это не указано.

  
  #include < UTFT.h >  //библиотека для работы с дисплеем

  // создаём объект класса UTFT
  // и передаём идентификатор модели дисплея и номера пинов
  // к которым подключаются линии SCK, SDI (MOSI), D/C, RESET, CS

  //  UTFT myGLCD(TFT01_22SP, SDI (MOSI),SCK, CS, RESET, D/C);
      UTFT myGLCD(TFT01_22SP, 8,         9,   10, 11,    12 );
    
  byte tact=0;
  
  int draw_cooler_on_icon (byte a, byte b, byte c, int x, int y, byte id);


  void setup() {  
   myGLCD.InitLCD(1); // инициализируем дисплей с горизонтальной ориентацией
                      // обязательно указать данную строчку в setup
  }

  void loop() {
 
    if (tact==0) {myGLCD.clrScr();}; // очищаем экран в нулевом, 
                                     // условно загрузочном, такте
  
    if (tact==4) {tact=1;}; //Cброс счетчика 
    
      

      // ....Тело основной программы.....
    
   draw_cooler_on_icon(0,0,255,100,100,0);

   delay (100); // Небольшая задержка для анимации

    tact++;
  }

   int draw_cooler_on_icon (byte a, byte b, byte c, int x, int y, byte id)
   
                      // Функция, по линиям рисует вентилятор.
                      // a,b,c - RGB цвет;
                      // x,y - координаты левого верхнего угла (-4px) 
                      // id - уникальный номер для возможности отрисовки
                      // нескольких вентиляторов на одном экране.
                      
                      // Анимация происходит по 1 кадру за каждый цикл программы 
  {       
     
    myGLCD.setColor(VGA_BLUE); // цвет обрамления иконки
    myGLCD.drawRoundRect(x-4,y-4,x+34,y+34);
  
                                        
    switch ( tact ) {
    case 1:   
  
    {     
    myGLCD.setColor(a,b,c); 
    myGLCD.drawCircle(x+15,y+15,16); 
    
    myGLCD.setColor(0,0,0);
    myGLCD.fillCircle(x+15,y+15,15);
  
    myGLCD.setColor(a,b,c);
    myGLCD.drawCircle(x+15,y+15,4);    
  
    myGLCD.fillRect (x+1,y+17,x+8,y+13);
    myGLCD.fillRect (x+13,y+8,x+17,y+1);
    myGLCD.fillRect (x+22,y+17,x+29,y+13);  
    myGLCD.fillRect (x+13,y+29,x+17,y+22);  
 
    myGLCD.drawHLine (x+1,y+12,5);
    myGLCD.drawHLine (x+2,y+11,2);
    myGLCD.drawHLine (x+1,y+18,5);
    myGLCD.drawHLine (x+2,y+19,2);
    myGLCD.drawVLine (x+9,y+14,2);
  
    myGLCD.drawVLine (x+12,y+6,-5);
    myGLCD.drawVLine (x+18,y+6,-5);
    myGLCD.drawVLine (x+11,y+4,-2);
    myGLCD.drawVLine (x+19,y+4,-2);
    myGLCD.drawHLine (x+14,y+9, 2);
  
    myGLCD.drawHLine (x+24,y+12,5);
    myGLCD.drawHLine (x+26,y+11,2);
    myGLCD.drawHLine (x+24,y+18,5);
    myGLCD.drawHLine (x+26,y+19,2);
    myGLCD.drawVLine (x+21,y+14,2);
  
    myGLCD.drawVLine (x+12,y+29,-5);
    myGLCD.drawVLine (x+18,y+29,-5);
    myGLCD.drawVLine (x+11,y+28,-2);
    myGLCD.drawVLine (x+19,y+28,-2);
    myGLCD.drawHLine (x+14,y+21, 2);
  }  
    break;

    case 2: 
   {myGLCD.setColor(a,b,c);  
    myGLCD.drawCircle(x+15,y+15,16); 
    
    myGLCD.setColor(0,0,0);
    myGLCD.fillCircle(x+15,y+15,15);
  
    myGLCD.setColor(a,b,c);     
    myGLCD.fillRect (x+4,y+11,x+8,y+6);
    myGLCD.fillRect (x+20,y+5,x+25,y+9);
    myGLCD.fillRect (x+22,y+24,x+26,y+19);
    myGLCD.fillRect (x+6,y+22,x+11,y+26);
  
    myGLCD.drawCircle(x+15,y+15,4);  
  
    myGLCD.drawHLine (x+6,y+12,4);
    myGLCD.drawHLine (x+5,y+5,2);
    myGLCD.drawVLine (x+3,y+11,-4);
    myGLCD.drawVLine (x+2,y+10,-1);
    myGLCD.drawVLine (x+9,y+13,-4);
    myGLCD.drawPixel (x+8, y+13); 
    myGLCD.drawPixel (x+10, y+11);  
  
    myGLCD.drawVLine (x+19,y+11,-4);
    myGLCD.drawVLine (x+26,y+8,-2);
    myGLCD.drawHLine (x+18,y+10,4);
    myGLCD.drawHLine (x+20,y+4,4);
    myGLCD.drawHLine (x+21,y+3,1);  
    myGLCD.drawPixel (x+18, y+9); 
    myGLCD.drawPixel (x+20, y+11);  
  
    myGLCD.drawHLine (x+20,y+18,4);
    myGLCD.drawHLine (x+23,y+25,2);
    myGLCD.drawVLine (x+21,y+21,-4);
    myGLCD.drawVLine (x+27,y+23,-4);
    myGLCD.drawVLine (x+28,y+21,-1); 
    myGLCD.drawPixel (x+20, y+19); 
    myGLCD.drawPixel (x+22, y+17);
  
    myGLCD.drawHLine (x+9,y+28,1);
    myGLCD.drawHLine (x+9,y+21,4);
    myGLCD.drawHLine (x+7,y+27,4);
    myGLCD.drawVLine (x+12,y+24,-4);
    myGLCD.drawVLine (x+5,y+25,-2);
    myGLCD.drawPixel (x+11, y+20);
    myGLCD.drawPixel (x+13, y+22);
   } 
    break;
  
  
    case 3:
   {myGLCD.setColor(a,b,c);  
    myGLCD.drawCircle(x+15,y+15,16);  
   
    myGLCD.setColor(0,0,0);
    myGLCD.fillCircle(x+15,y+15,15);
  
    myGLCD.setColor(a,b,c);   
  
    myGLCD.fillRect (x+7,y+8,x+12,y+4);
    myGLCD.fillRect (x+23,y+8,x+27,y+13);
    myGLCD.fillRect (x+19,y+26,x+24,y+22);
    myGLCD.fillRect (x+4,y+19,x+8,y+24);  
  
    myGLCD.drawCircle(x+15,y+15,4);  
  
    myGLCD.drawVLine (x+6,y+7,-2);
    myGLCD.drawVLine (x+13,y+10,-4);
    myGLCD.drawHLine (x+9,y+2,2);
    myGLCD.drawHLine (x+8,y+3,4);
    myGLCD.drawHLine (x+10,y+9,4);
    myGLCD.drawPixel (x+12, y+10); 
    myGLCD.drawPixel (x+14, y+8);
  
    myGLCD.drawVLine (x+22,y+15,-4);
    myGLCD.drawVLine (x+28,y+13,-4);
    myGLCD.drawHLine (x+21,y+14,4);
    myGLCD.drawHLine (x+24,y+7,2);
    myGLCD.drawPixel (x+21, y+13); 
    myGLCD.drawPixel (x+23, y+15);
  
    myGLCD.drawVLine (x+18,y+24,-4);
    myGLCD.drawVLine (x+25,y+25,-2);
    myGLCD.drawHLine (x+17,y+21,4);
    myGLCD.drawHLine (x+19,y+27,4);
    myGLCD.drawHLine (x+20,y+28,2); 
    myGLCD.drawPixel (x+17, y+22); 
    myGLCD.drawPixel (x+19, y+20);
  
    myGLCD.drawVLine (x+2,y+21,-1);
    myGLCD.drawVLine (x+3,y+23,-4);
    myGLCD.drawVLine (x+9,y+21,-4);
    myGLCD.drawHLine (x+6,y+18,4);
    myGLCD.drawHLine (x+5,y+25,2);
    myGLCD.drawPixel (x+8, y+17); 
    myGLCD.drawPixel (x+10, y+19);
   }
   break;
  }      
 }
   

       Функции


   1. Графические.

     Зависимость: UTFT

     Зависимость: UTFT

     Зависимость: UTFT

     Зависимость: UTFT

     Зависимость: UTFT

     Зависимость: UTFT, iarduino_RTC


  2. Отдельные графические элементы.

     Зависимость: UTFT

     Зависимость: UTFT

     Зависимость: UTFT

     Зависимость: UTFT

     Зависимость: UTFT

     Зависимость: UTFT

      Схемы подключения


   Счетчик 2-х разрядных чисел (4 х 7 px)
    Зависимость: UTFT

   Cчетчик, один разряд (10 x 15 px )
    Зависимость: UTFT

      Другие библиотеки и функции


    

      Проекты и программы


  Система жизнеобеспечения "Сорока"
    

      Статьи


  
    









   Изготовление рекламы Изготовление мебели  Общестроительные работы 3D моделирование       Статьи
  Благоустройство тер.
   Общее портфолио    Мебель для мастерской   Установка бордюров   Портфолио   Контакты
   Наружняя реклама       Фасадные работы   Модели   Образец договора
   Внутреняя реклама       Утепление гаража   Инфо
   Таблички, наклейки       Косметический ремонт   Фото г.Надым
  Бетонные работы   Фото пригороды г.Надым