16+
Воскресенье
22 сентября
Вход |Карта сайта |Upload |codebook | PARTS

 О смысле всего сущего 0xFF

 Средства и методы разработки

 Мобильная и беспроводная связь

 Блошиный рынок Объявления

caxapa

Микроконтроллеры ARM 

AVR PIC MSP PLD,FPGA,DSP 

Кибернетика Технологии 

Схемы, платы, компоненты 

Микроконтроллеры PIC

 
Новая темаПравила РегистрацияСтатистика Архив
Вернуться в конференциюТопик полностью
Гудвин  (12.01.2019 17:38) , в ответ на Нашел сегодня время, посидел - подобрал всяческие динамические эффекты вдобавок к fade. В общем, мультики никак - имеюшийся под руками Canon ничего не передает. Кина не будеет :) Убог - мигающие огоньки весом 60 Мб... Никаких цветовых переходов и автор: Гудвин
Вот тестилка - исходник линухового потока (как и планировал, все красоты в апельсинке. Отжирает всего 1% у одного ядра проца), в котором все крутится. Можешь прикинуть, как все выглядит ;)  
///////////////////////////////////////////////////////////////////////////////////////////////
/////////////  Свет
///////////////////////////////////////////////////////////////////////////////////////////////
#define U8  unsigned char
#define U32 unsigned int


U8 hid_buf[65];
U8 tmp_buf[65];

U8 or, og, ob, ow, ovr, ovg, ovb;

void delay_ms(int dl)
{
  usleep(1000 * dl);
}

void fillRGBW(U8 R, U8 G, U8 B, U8 W, U8 VR, U8 VG, U8 VB)
{
 int i;
 char *ptr;
 hid_buf[2]=W;
 hid_buf[3]=0;
 ptr=&hid_buf[4];
 for(i=0;i<8;i++) 
   {
	*ptr++ = G;
	*ptr++ = R;
	*ptr++ = B;
   }
 for(i=0;i<4;i++) 
   {
	*ptr++ = VG;
	*ptr++ = VR;
	*ptr++ = VB;
   }
}

int send_hid(unsigned char cmd)
{
    int res;
    if (fdh < 1) return(1);  

    if (fl_color==0) memset(hid_buf,0,64); ////////////////////////   
    else if (fl_color==1)
	  {
         memset(hid_buf,0,64);    
         hid_buf[3]=255;
	  }
    else if (fl_color==2)
	  {
         memset(hid_buf,0,64);    
         hid_buf[2]=255;
	  }
    else if (fl_color==3)
	  {
         memset(hid_buf,255,64);    
	  }

	hid_buf[0] = 0; // для HID!
	hid_buf[1] = cmd;
    /* Send a Report to the Device */
    res = write(fdh, hid_buf, 64);
	if (res < 0) 
	 {
	 //  printf("Error!");
       close(fdh);  
	   fdh=0;
       return(2);
	 }
  return(0);
}


void fade(U8 r, U8 g, U8 b, U8 w, U8 vr, U8 vg, U8 vb, int d)
{
  int delay;
  int i;
  float rb, gb, bb, wb, vrb, vgb, vbb,
        dr, dg, db, dw, dvr, dvg, dvb;

  rb=or;
  gb=og;
  bb=ob;
  wb=ow;
  vrb=ovr;
  vgb=ovg;
  vbb=ovb;

  delay = (10+d/10); // время fade; d - миллисекунды !

  dr= (float)(r-or) / delay;  
  dg= (float)(g-og) / delay; 
  db= (float)(b-ob) / delay; 

  dw= (float)(w-ow) / delay; 

  dvr= (float)(vr-ovr) / delay; 
  dvg= (float)(vg-ovg) / delay; 
  dvb= (float)(vb-ovb) / delay; 
 
  for(i=0;i<delay;i++) 
  {
    rb+=dr;
    gb+=dg;
    bb+=db;

    wb+=dw;

    vrb+=dvr;
    vgb+=dvg;
    vbb+=dvb;

    fillRGBW((rb),(gb),(bb),(wb),(vrb),(vgb),(vbb)) ;
    //pthread_mutex_lock(&lock);  // Синхронизация. Приостанавливает основной поток
    send_hid(0x80); 
    //pthread_mutex_unlock(&lock); 
    delay_ms(10); // спим 10 ms
  }

or = r;
og = g;
ob = b;
ow = w;
ovr = vr;
ovg = vg;
ovb = vb;
}

void flash(void)
{
  int i;
  memmove(tmp_buf, hid_buf, sizeof(hid_buf));
  memset(hid_buf,0,64);   
  for(i=0; i<5;i++)
   {
    hid_buf[2]=0;
    hid_buf[3]=255;
    send_hid(0x80);
    delay_ms(30); // спим 10 ms
    hid_buf[2]=255;
    hid_buf[3]=0;
    send_hid(0x80);
    delay_ms(30); // спим 10 ms
   }     
  for(i=0; i<2;i++)
   {
    fillRGBW(0,0, 0, 0 ,0, 0, 0);
    send_hid(0x80);
    delay_ms(40); // спим  ms
    fillRGBW(255,255, 255, 255 ,255, 255, 255);   
    send_hid(0x80);
    delay_ms(70); // спим  ms
   }     
  memmove(hid_buf, tmp_buf, sizeof(hid_buf));
  send_hid(0x80); 

}

void rot(U8 n, U8 k, U8 d)
{
   int i;
   U8 r,g,b;
 
   memmove(tmp_buf, hid_buf, sizeof(hid_buf));

   hid_buf[4]= 0;
   hid_buf[5]= 0;
   hid_buf[6]= 0;

   for(i=0;i<k;i++)
    {
      memmove(&hid_buf[7],&hid_buf[4], 7*3);
      send_hid(0x80); 
      delay_ms(10*d);
    }
   for(i=0;i<n*8;i++)
    {
      r= hid_buf[25];
      g= hid_buf[26];
      b= hid_buf[27];
      memmove(&hid_buf[7],&hid_buf[4], 7*3);
      hid_buf[4]= r;
      hid_buf[5]= g;
      hid_buf[6]= b;
      send_hid(0x80); 
      delay_ms(10*d);
    }
   memmove(hid_buf, tmp_buf, sizeof(hid_buf));
   send_hid(0x80); 
    
}

void rotv(U8 n)
{
   int i;
   U8 r,g,b;
 
   memmove(tmp_buf, hid_buf, sizeof(hid_buf));

   hid_buf[28]= 0;
   hid_buf[29]= 0;
   hid_buf[30]= 0;
   for(i=0;i<1;i++)
    {
      memmove(&hid_buf[31],&hid_buf[28], 3*3);
      send_hid(0x80); 
      delay_ms(10);
    }

   for(i=0;i<n*8;i++)
    {
      r= hid_buf[37];
      g= hid_buf[38];
      b= hid_buf[39];
      memmove(&hid_buf[31],&hid_buf[28], 7*3);
      hid_buf[28]= r;
      hid_buf[29]= g;
      hid_buf[30]= b;

      send_hid(0x80); 
      delay_ms(10+i);
    }
   memmove(hid_buf, tmp_buf, sizeof(hid_buf));
   send_hid(0x80); 
    
}

void rota(U8 n)
{
   int i;
   U8 r,g,b;
 
   memmove(tmp_buf, hid_buf, sizeof(hid_buf));

   hid_buf[28]= 0;
   hid_buf[29]= 0;
   hid_buf[30]= 0;

   for(i=0;i<1;i++)
    {
      memmove(&hid_buf[31],&hid_buf[28], 3*3);
      send_hid(0x80); 
      delay_ms(10*n);
    }

   hid_buf[4]= 0;
   hid_buf[5]= 0;
   hid_buf[6]= 0;
   for(i=0;i<3;i++)
    {
      memmove(&hid_buf[7],&hid_buf[4], 7*3);
      send_hid(0x80); 
      delay_ms(10*n);
    }

   for(i=0;i<n*8;i++)
    {
      r= hid_buf[37];
      g= hid_buf[38];
      b= hid_buf[39];
      memmove(&hid_buf[31],&hid_buf[28], 7*3);
      hid_buf[28]= r;
      hid_buf[29]= g;
      hid_buf[30]= b;

      r= hid_buf[25];
      g= hid_buf[26];
      b= hid_buf[27];
      memmove(&hid_buf[7],&hid_buf[4], 7*3);
      hid_buf[4]= r;
      hid_buf[5]= g;
      hid_buf[6]= b;

      send_hid(0x80); 
      delay_ms(10*n-i);
    }
   memmove(hid_buf, tmp_buf, sizeof(hid_buf));
   send_hid(0x80); 
    
}

void exchange(U8 n, int d)
{
   int i;
   U8 r,g,b;
   memmove(tmp_buf, hid_buf, sizeof(hid_buf));
 
   for(i=0;i<n;i++)
    {
      fade(ovr, ovg, ovb, ow , or, og, ob, (d*i));   
      send_hid(0x80); 
      fade(or, og, ob, ow , ovr, ovg, ovb, (d*i)); 
      send_hid(0x80); 

      memmove(hid_buf, tmp_buf, sizeof(hid_buf));
      send_hid(0x80); 
    }
}


///////////////////////////////////////////////////////////

void* Color(void *args) //  поток света/лучи поноса ;)
{
	U8 cnt =0;

 while (1)
  {
       if (fl_color==4)
	   {
       fade(255, 0, 0,  0 , 0, 0, 0, 3000); 
       rot(8,4,2);
       fade(0, 0, 0,  0 , 0, 0, 255, 1000); 
       rotv(8);
       fade(255, 0, 0,  0 , 0, 255, 0, 1000); 
       rota(8);
       fade(0, 30, 0,  0 , 30, 0, 0, 3000); 
       fade(255, 0, 255,  0 , 0, 0, 0, 1000); 
       //exchange(4,100); 
       exchange(10,0); 
       fade(0, 0, 0,  0 , 0, 0, 0, 5000); 
       flash();
       fade(0, 0, 0, 255 , 0, 0, 0, 4000); 
      }
   sleep(1); // !!!!!!!!!! Это обязательно, чтобы не жрать, если f_color не включен  !!!!!!!!!
  }
}
Главная | Карта сайта | О проекте | Проекты | Файлообменник | Регистрация | Вебмастер | RSS
Лето 7528 от сотворения мира. При использовании материалов сайта ссылка на caxapу обязательна.
MMI © MMXIX