PCCar.ru - Ваш автомобильный компьютер

PCCar.ru - Ваш автомобильный компьютер (http://pccar.ru/index.php)
-   Arduino проекты (http://pccar.ru/forumdisplay.php?f=195)
-   -   Динамические огни на Digispark (http://pccar.ru/showthread.php?t=27483)

admin 02.04.2018 23:12

Динамические огни на Digispark
 
Вложений: 1
Я думаю что этот проект можно применить для динамической индикации поворотов автомобиля.
Если у кого то появится интерес, то я постараюсь подправить скетч

Для этого проекта используется самый маленький контроллер компании Atmel Digispark и светодиоднная лента WS2812B. В скетче используется давно известная библиотека NeoPixel. Я думаю что тому кто работал с этой библиотекой не составит большого труда добавить новых эффектов. Базу эффектов буду пополнять, так что жду от Вас новых световых схем. У меня с фантазией как то слабо сложилось, скорее всего логическое мышление не дает фантазии развиваться :)
Схема подключения ATtiny85 к светодиодной ленте WS2812b простая, всего 3 провода. В своем проекте я запитал эту цветомузыку через USB разъем от Power Bank, но можно питать от любого источника 5В, ток зависит от длины самой ленты

Схема подключения Arduino Digispark ATtiny85:
Вложение 49496

Видео динамических огней на Digispark ATtiny85:


Скетч для Digispark ATtiny85:
PHP код:

#include <Adafruit_NeoPixel.h>

#define PIN 1
#define NUM_PIX 24
Adafruit_NeoPixel strip Adafruit_NeoPixel(NUM_PIXPINNEO_GRB NEO_KHZ800);

void setup() 
{
  
randomSeed(analogRead(0));
  
strip.begin();
  
strip.show(); // Инициализация , все светодиоды выключены
}

void loop() 
{
  
towards(430);

    
rgbFade(002555); // синий
    
rgbFade(002555); // синий
    
rgbFade(002555); // синий
 
   
runPix(1010);
  
  
colorWipe(strip.Color(00255), 50); // Blue
  
  
theaterChase(strip.Color(00255), 50); // Blue

//  rainbow(20);
//  rainbowCycle(20);
//  theaterChaseRainbow(50);
  
  
flame(255150); 
}

//бегущий пиксель
void runPix(uint8_t ciclesuint8_t wait
{
  
strip.setBrightness(255);
  for(
int c=0c<ciclesc++)
  {  
   for(
int i=0i<strip.numPixels(); i++)
   {
    
strip.setPixelColor(istrip.Color(0,0,255));
    
strip.show(); 
    
strip.setPixelColor(istrip.Color(0,0,0));
    
delay(wait);
   }
  }
}

//эффект огня/пламени
void flame(uint8_t ciclesuint8_t wait)
{
 
strip.setBrightness(255);
 for(
int i=0i<ciclesi++)
  { 
   for(
int i=0i<strip.numPixels(); i++)
   {
    
strip.setPixelColor(istrip.Color(0random(045), random(150254) ));
   }
    
strip.setBrightness(random(151,254));
    
strip.show(); // This sends the updated pixel color to the hardware.
    
delay(random(wait));
 }
}  

// плавное наростание яркости любого цвета
void rgbFade(uint8_t reduint8_t greenuint8_t blueuint8_t wait
{
  
strip.setBrightness(255);
  for(
uint8_t b=0b<255b++) 
  {
     for(
uint8_t i=0i<strip.numPixels(); i++) 
     {
        
strip.setPixelColor(ired b/255green b/255blue b/255);
     }
     
strip.show();
     
delay(wait);
  }
delay(300);

  for(
uint8_t b=2550b--) 
  {
     for(
uint8_t i 0strip.numPixels(); i++) 
     {
        
strip.setPixelColor(ired b/255green b/255blue b/255);
     }
     
strip.show();
     
delay(wait);
  }
   
strip.setBrightness(0);
   
strip.show();
  
delay(200);
}

// бегущие на встречу пиксели
void towards
uint8_t ciclesuint8_t wait 
{
  for(
byte c=0c<ciclesc++) 
  {
    for(
byte i=0i<strip.numPixels(); i++) 
    {
      
strip.setPixelColor(istrip.Color(0,0,255));
      
strip.setPixelColor(strip.numPixels()-istrip.Color(0,0,255));
      
strip.show();
      
strip.setPixelColor(istrip.Color(0,0,0));
      
strip.setPixelColor(strip.numPixels()-istrip.Color(0,0,0));
     
delay(wait);
    } 
  }
}

// //заполнение ленты пиксель за пикселем
void colorWipe(uint32_t cuint8_t wait
{
  
strip.setBrightness(255);
  for(
uint16_t i=0i<strip.numPixels(); i++) 
  {
      
strip.setPixelColor(ic);
      
strip.show();
      
delay(wait);
  }
}

//радуга
void rainbow(uint8_t wait
{
  
uint16_t ij;
  
strip.setBrightness(255);
  for(
j=0j<256j++) {
    for(
i=0i<strip.numPixels(); i++) {
      
strip.setPixelColor(iWheel((i+j) & 255));
    }
    
strip.show();
    
delay(wait);
  }
}

// Slightly different, this makes the rainbow equally distributed throughout
void rainbowCycle(uint8_t wait
{
  
uint16_t ij;

strip.setBrightness(255);
  for(
j=0j<256*5j++) { // 5 cycles of all colors on wheel
    
for(i=0istrip.numPixels(); i++) {
      
strip.setPixelColor(iWheel(((256 strip.numPixels()) + j) & 255));
    }
    
strip.show();
    
delay(wait);
  }
}

//Theatre-style crawling lights.
void theaterChase(uint32_t cuint8_t wait
{
 
strip.setBrightness(255); 
  for (
int j=0j<10j++) {  //do 10 cycles of chasing
    
for (int q=03q++) {
      for (
int i=0strip.numPixels(); i=i+3) {
        
strip.setPixelColor(i+qc);    //turn every third pixel on
      
}
      
strip.show();
     
      
delay(wait);
     
      for (
int i=0strip.numPixels(); i=i+3) {
        
strip.setPixelColor(i+q0);        //turn every third pixel off
      
}
    }
  }
}

//Theatre-style crawling lights with rainbow effect
void theaterChaseRainbow(uint8_t wait
{
strip.setBrightness(255);
  for (
int j=0256j++) {     // cycle all 256 colors in the wheel
    
for (int q=03q++) {
        for (
int i=0strip.numPixels(); i=i+3) {
          
strip.setPixelColor(i+qWheel( (i+j) % 255));    //turn every third pixel on
        
}
        
strip.show();
       
        
delay(wait);
       
        for (
int i=0strip.numPixels(); i=i+3) {
          
strip.setPixelColor(i+q0);        //turn every third pixel off
        
}
    }
  }
}

// Input a value 0 to 255 to get a color value.
// The colours are a transition r - g - b - back to r.
uint32_t Wheel(byte WheelPos
{
  
strip.setBrightness(255);
  
WheelPos 255 WheelPos;
  if(
WheelPos 85) {
   return 
strip.Color(255 WheelPos 30WheelPos 3);
  } else if(
WheelPos 170) {
    
WheelPos -= 85;
   return 
strip.Color(0WheelPos 3255 WheelPos 3);
  } else {
   
WheelPos -= 170;
   return 
strip.Color(WheelPos 3255 WheelPos 30);
  }


Как загрузить скетч в контроллер ATtiny85 среде Arduino IDE
1 - Отключить микроконтроллер Arduino Tiny от компьютера
2 - Нажать в IDE кнопку "Вгрузить" после чего в консоли появится информация, о том что у Вас есть
60 секунд, что бы подключить Digispark к USB.
3 - Подключаем Digispark ATtiny85 к USB компьютера
4 - Скетч начнет загружаться в контроллер Ардуино ATtiny85
5 - Если все прошло успешно, то можете проверить работоспособность Вашего скетча на ATtiny85

Источник: http://cyber-place.ru/showthread.php?t=2774

T_r_D 03.04.2018 00:55

Хорошо вышло.
Много памяти ещё осталось в контроллере?
Там много места занимает бут дигиспарковский.

Хотя у меня получилось на нём сделать часы на двухстроковом дисплее с валкодером и кнопкой валкодера для настройки даты/время.

admin 03.04.2018 01:11

Вложений: 1
Использует всего 54% памяти
Вложение 49497

jonikus81 30.06.2021 07:14

Добрый день. Для поворотников адресные ленты крайне слабы, при прямых лучах солнца их вообще не видно. Не появлялись ли более яркие адресные ленты?


Часовой пояс GMT +4, время: 10:55.

Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot