CraftDuino v2.0
  • - это CraftDuino - наш вариант полностью Arduino-совместимой платы.
  • CraftDuino - настоящий конструктор, для очень быстрого прототипирования и реализации идей.
  • Любая возможность автоматизировать что-то с лёгкостью реализуется с CraftDuino!
Просто добавьте CraftDuino!

RGB-светодиод

RGB-светодиодПомимо одноцветных диодов, в природе (и в стартере) есть — RGB-светодиоды (Red, Green, Blue — красный, зелёный, синий), у этих ног по-больше — один общий катод и по аноду на каждый цвет. Фактически это просто три светодиода в одном корпусе. Меняя ток через каналы можно получить любой цвет.
Суём катод на GND, а остальные через резисторы будем ШИМить:

Пример нехитрого скетча:
//обзавём каналы
int red = 9;
int green = 10;
int blue = 11;

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

}

void loop() {
   digitalWrite(red, HIGH);  // посветим красным
   delay(500);               
   digitalWrite(red, LOW);
   delay(500);
   digitalWrite(green, HIGH);  // посветим зелёным
   delay(500);               
   digitalWrite(green, LOW);
   delay(500);               
   digitalWrite(blue, HIGH); // посветим синим
   delay(500);               
   digitalWrite(blue, LOW);
   delay(500);
  
   analogWrite(red, 235);  // белый
   analogWrite(green, 100);
   analogWrite(blue, 255);
   delay(1000);
   analogWrite(red, 255);  // фиолетовый
   analogWrite(green, 0);
   analogWrite(blue, 255);
   delay(1000);
   analogWrite(red, 255);  // жёлтый
   analogWrite(green, 140);
   analogWrite(blue, 0);
   delay(1000);
   digitalWrite(red, LOW);
   digitalWrite(green, LOW);
   digitalWrite(blue, LOW);
}


Можно менять цвета плавно и в рандомном порядке — так красивее=) А если накрыть светодиод рассеивателем, получится симпатичный ночник=)
Соорудим.
Залепим по-быстрому из ПКЛа рассеивающую елду:

Гусары, молчать!...=))
И нарисуем соответсвующий скетч:
//обзавём каналы
int RedPin = 9;
int GreenPin = 10;
int BluePin = 11;
//заведём переменные текущих значений каналов, и сразу их забьём рандомными значениями 
int ValRed = random(0, 255);
int ValGreen = random(0, 255);
int ValBlue = random(0, 255);

void setup() {                
  pinMode(RedPin, OUTPUT);  //настроим пины каналов на выход
  pinMode(GreenPin, OUTPUT); 
  pinMode(BluePin, OUTPUT); 
  
  analogWrite(RedPin, ValRed);   //и сразу запихает туда первую пачку значений
  analogWrite(GreenPin, ValGreen);
  analogWrite(BluePin, ValBlue);
}

void loop() {
    
  int NewValRed = random(10, 255); //сгенерим новые значения
  int NewValGreen = random(10, 255);
  int NewValBlue = random(10, 255);
  
  //будем крутить пока новые не сравняются с текущими
  while ((ValRed != NewValRed)&(ValGreen != NewValGreen)&(ValBlue != NewValBlue)) {   
//для красного канала      
      if (ValRed < NewValRed){  //если новое больше текущего
        analogWrite(RedPin, ValRed++ ); //то текущий увеличиваем
      };
      if (ValRed > NewValRed) { // если меньше уменьшаем
        analogWrite(RedPin, ValRed-- );
      };
 //для зелёного канала    
     if (ValGreen < NewValGreen){
        analogWrite(GreenPin, ValGreen++ );
      };
     if (ValGreen > NewValGreen) {
        analogWrite(GreenPin, ValGreen-- );
      };  
//для синего канала  
     if (ValBlue < NewValBlue){
        analogWrite(BluePin, ValBlue++ );
      };
     if (ValBlue > NewValBlue) {
        analogWrite(BluePin, ValBlue-- );
      }; 
   delay(10); //чтоб в глазах не рябило подождём 
  }    
}

В итоге:

тёмные участки на елде — более толстый слой ПКЛ-а, если будете делать что-нибудь в этом духе — обеспечьте равномерность толщины стенок=)
Скетч тоже можно ещё ровнять и ровнять — сделать постоянной общую яркость, поменять распределение вероятностей — а то красных не дождаться, как и «чистых цветов», ну т.д.
  • 0
  • 24 сентября 2012, 17:52
  • Zoltberg

Комментарии (0)

RSS свернуть / развернуть

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.