ディジタル出力は H と L の2種類です。アナログ出力はこの中間の電圧を出力する機能ですが、中間の電圧ではなく、出力する時間を制御する PWM
方式を利用します。

pinMode(端子番号, OUTPUT); analogWrite(端子番号, bright);すると、指定した出力端子には、bright で指定した割合でPWM 出力されます。
// white LED
int wled=9;
int bright = 0;
int fade = 5; //変化量
void setup() {
bright=20;
pinMode(wled, OUTPUT);//LED.V
Serial.begin(9600);
}
void loop() {
analogWrite(wled, bright);
bright = bright + fade;
// 20以下になったときの処理
if (bright<= 20 ) {
fade = -fade ;
}
// 255以上になったときの処理
if (bright >= 255) {
fade = -fade ;
}
Serial.println(bright);
// 100mS待つ
delay(100);
}



//FullColor LED
//色の変化
int h;
//int i,vi;
//int p1,p2,p3;
int r,g,b;
float s,v;
int rLED=11;
int bLED=10;
int gLED=9;
void setup(){
Serial.begin(9600);
h=0;
s=1.0;
v=1.0;
}
void loop(){
//hsvからrgbへの変換
hsv2rgb(h,s,v,&r,&g,&b);
/*
Serial.print(" ");
Serial.print(g,HEX);
Serial.print(" ");
Serial.println(b,HEX);
*/
analogWrite(rLED,r);
analogWrite(gLED,g);
analogWrite(bLED,b);
//s=s-0.02;
//if(s<0.0) s=1.0;
h=h+2;
if(h>=360) h=0;
delay(100);
}
void hsv2rgb(int h,float s,float v, int *rp, int *gp, int *bp){
int i,r,g,b,vi;
int p1,p2,p3;
float f;
i = (int)(h/60.0);
f = h/60.0 -i;
p1=(int)(v*(1.0-s)*255.0);
p2=(int)(v*(1.0-s*f)*255.0);
p3=(int)(v*(1.0-s*(1.0-f))*255.0);
vi=(int)(v*255.0);
if(i==0) {r = vi ;g = p3 ;b = p1;}
if(i==1) {r = p2 ;g = vi ;b = p1;}
if(i==2) {r = p1 ;g = vi;b = p3;}
if(i==3) {r = p1 ;g = p2 ;b = vi;}
if(i==4) {r = p3 ;g = p1 ;b = vi;}
if(i==5) {r = vi ;g = p1 ;b = p2;}
*rp=r;
*gp=g;
*bp=b;
}
//sinw[]の配列に、sinの値を2度単位に0..255の値の範囲に変換して記録
//R,B,G 3色の値を120度ずつ、ずらしてsinw[]の配列から設定する。
int rLED=11;
int bLED=10;
int gLED=9;
int sinw[180];
int brightR = 0;
int brightG = 0;
int brightB = 0;
int ang;
long t1;
void setup() {
Serial.begin(9600);
//2度単位のsinのテーブルを作成
t1=millis();
for(ang=0;ang<180;ang=ang+1){
sinw[ang]=127*(sin(ang * 3.14/90)+1);
}//time 30mS
//Serial.print("time:");
//Serial.println(millis()-t1);
brightR=0;
brightG=60;
brightB=120;
pinMode(6, OUTPUT);//LED 接続
pinMode(5, OUTPUT);//
pinMode(3, OUTPUT);//
}
void loop() {
analogWrite(rLED, sinw[brightR]);
analogWrite(gLED, sinw[brightG]);
analogWrite(bLED, sinw[brightB]);
//Serial.print(sinw[brightR]);
//Serial.print(",");
//Serial.print(sinw[brightG]);
//Serial.print(",");
//Serial.println(sinw[brightB]);
//R,G,,Bの表を参照する番号を更新する
brightB = update(brightB);
brightG = update(brightG );
brightR = update(brightR) ;
delay(100);
}
//表をひく番号を進める
int update(int bright){
bright = bright+1;
if(bright>180) bright=0;
return bright;
}