Arduino中LED灯实现256中颜色的渐变

根据颜色由三原色组成,根据其混成比例编写了此代码,实现了356种颜色的渐变过程;

//colort test;
const int red = 9;
const int green =10;
const int blue = 11;

void setup() {
  { 
    pinMode(red, OUTPUT); 
    pinMode(green, OUTPUT);  
    pinMode(blue, OUTPUT); 
  }
}

void loop() {
//总共有8*8*4=256种颜色;
 for(double r=0.125; r<=1.0; r+=0.125)   //8
   for(double g=0.125; g<=1.0; g+=0.125) //8
      for(double b=0.25; b<=1.0; b+=0.25) //4
      {
	    double k1=g/r;    //比例系数;
	    double k2=b/r;

		for(double number=1.0; number<=255.0; number+=1.0) //同比例增加;
		{
		  double R=number;
		  double G=k1*R;
		  double B=k2*R;

		  if( R>254 )        //判断增加的值是否大于最大值255,如果是则停止增加,慢慢变暗;否则继续增加;  
                  {
                    for( double R=255.0; R>0.0;R-=1.0)
		    {
                      if(R<=1.0)
                            break;
                      else
                      {
		          double G=k1*R;
		          double B=k2*R;

		          analogWrite(red,R);
		          analogWrite(green,G);
		          analogWrite(blue,B);
                          delay(20);
                      }
		    }
                    break;
                  }
                  

		  else if( G>254 )
                  {
                    for( double G=255.0; G>0.0;G-=1.0)
		    {
                        if(G<=1.0)
                           break;
                        else
                        {
  		            double R=G/k1;
		            double B=k2*R;
		            analogWrite(red,R);
		            analogWrite(green,G);
		            analogWrite(blue,B);
                            delay(20);
                        }
		    }
                    break;
                  }
                  
                  
                    else if( B > 254 )
                    {
                    for( double B=255.0; B>0.0;B-=1.0)
		    {
                        if(B<=1.0)
                              break;
                        else
                        {
  		          double R=B/k2;
		          double G=k1*R;

		          analogWrite(red,R);
		          analogWrite(green,G);
		          analogWrite(blue,B);
                          delay(20);
		         }
                      }
                      break;
                    }

                    else
		    {
		      analogWrite(red,R);
		      analogWrite(green,G);
		      analogWrite(blue,B);
                      delay(20);
		    }		
		} 
       }          
}
   

  • 11
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值