2020-11-27
A képre kattintva láthattok egy kis videót készülékről:
Ha megnézitek a forráskód dátumát, láthajátok, hogy valamikor a nyár elején készítettem. Azért nem tettem eddig közzé, mert még mindig nem jutottam dűlőre az Arduino elé kapcsolt analóg áramkörrel. Csak hát ha rám vártok, ki tudja mennyi időre lesz még szükségetek, mire fabrikálok egy megelégedésemre szolgáló egyenirányító/spekrtrum analizáló kapcsolást, mert a terveimben fényorgona üzemmód is van. Aki mégis meg szeretné addig építeni, az a korábbi kapcsolásom HF egyenirányítóját használhatja:
http://tkiraaly.hu/avr/a8_vu5/a8_vu5.htmlSzóval inkább most leközlöm a publikusnak szánt verziót. Ennek alapján egyébként mindenfélét le tudtok programozni. A publikus verzióban csak két modult találtok, a KIT-et és VU-t, valamint nincs benne szin/sebesség állítás. Eredetileg négy LED csíkot akartam párhuzamosan kötni, de azután látványra jobban tetszett a három. A LED csíkok 1m hosszúak, 60 chip van rajtuk. Ezek a LED-ek 3 szinűek és programozhatóak, már korábban is foglalkoztam ilyenekkel:
http://tkiraaly.hu/arduino/rgbled/rgbled.htmlSzintén a látvány szempontjából utánoztam le a ma már múzeális/klasszikus LED-es kivezérlésmérőket. Anno félórákat bámultuk hipnotizálva a bizományik kirakatában a magnó deck-keket, amiken 12 LED-es kivezérlésmérő villogot. Ezért osztottam logikailag 60/12= 5 LED-es szegmensekre a kijelzőt. Ha valaki hozzá akar fogni a megépítéshez, jó ha ismeri az Arduino-kat, tud C-ben programozni, és vesz néhány megfelelő LED csíkot. Csak csendesen merek súgni, hogy a Csang bácsiéknál olcsóbb, igaz 1-2 hónapot várni kell az alkatrészekre. Talán annyi tertozik még ide, hogy a méréseim szerint egy 3A-es 5V-os dugasztápról járatható az egész áramkör. Én a biztonság kedvéért a LED csíkok táp bevezetésére tettem egy 1000uF-os szűrőkondit.
/******************************************************************************
* Author - Kiraly Tibor
* http://www.tkiraaly.hu
* Date - 2020.06.11.
* Chip - Arduino nano, keyboard matrix, WS2812 LED pixel strip
* Compiler - Arduino IDE 1.8.12
*
* DISCO LIGHT BAR - Public version
*
* NANO WS2812 LED pixel strip
* +----------+ +------------------------------+
* ! +5V +--------+ +5V !
* ! D3 +--------+ DIN !
* MIC --+ A3 GND +--------+ GND !
* ! ! +------------------------------+
* !
* ! +---------+
* D5 +--------! S S S S !
* D6 +--------! S S S S !
* D7 +--------! S S S S !
* D8 +--------! S S S S !
* ! +---------+
* ! ! ! ! !
* D9 +----------+ ! ! !
* D10 +------------+ ! !
* D11 +--------------+ !
* D12 +----------------+
* !
*
******************************************************************************/
#include "Arduino.h"
#include <FastLED.h>
#define KBD0 12
#define KBD1 11
#define KBD2 10
#define KBD3 9
#define KBD4 8
#define KBD5 7
#define KBD6 6
#define KBD7 5
#define NUM_LEDS 60
#define DATA_PIN 3
#define VU_PIN A3
CRGB leds[ NUM_LEDS];
byte mode= 3;
byte k= '-';
byte kbd( void);
CRGB szin( byte, byte, byte);
void szegmens( byte, CRGB);
void color_bar( CRGB = CRGB::Black);
void vu( byte);
void kitt( byte);
void setup()
{
pinMode( KBD0, INPUT_PULLUP); // billentyuzet
pinMode( KBD1, INPUT_PULLUP);
pinMode( KBD2, INPUT_PULLUP);
pinMode( KBD3, INPUT_PULLUP);
pinMode( KBD4, OUTPUT);
pinMode( KBD5, OUTPUT);
pinMode( KBD6, OUTPUT);
pinMode( KBD7, OUTPUT);
FastLED.addLeds<WS2812, DATA_PIN, GRB>( leds, NUM_LEDS);
color_bar(); // bejelentkezes
leds[ 0]= CRGB::Red;
FastLED.show();
delay( 300);
leds[ 1]= CRGB::Grey; // a feher tul vakito
FastLED.show();
delay( 300);
leds[ 2]= CRGB::Green;
FastLED.show();
delay( 1000);
color_bar();
}
void loop()
{
switch( mode)
{
case 0: break; // off
case 1: vu(); break;
case 3: kitt(); break;
}
switch( k= kbd())
{
case '0': mode= 0; color_bar(); break;
case 'A': mode= 1; color_bar(); break;
case 'C': mode= 3; color_bar(); break;
}
}
CRGB szin( byte piros, byte zold, byte kek) // egy szin beallitasa
{
CRGB a;
a.red= piros;
a.green= zold;
a.blue= kek;
return a;
}
void color_bar( CRGB s) // egesz sor atszinezese, ha mas nincs megadva, feketere
{
byte i= NUM_LEDS;
while( i--) leds[ i]= s;
FastLED.show();
}
void szegmens( byte n, CRGB szin) // egy szegmens beallitasa
{
if( n > 11) n= 11;
n*= 5;
leds[ n++]= szin;
leds[ n++]= szin;
leds[ n++]= szin;
leds[ n++]= szin;
leds[ n]= szin;
}
byte kbd() // bill. lekerdezes, perges mentesites
{
static byte elozo= '-';
byte a= '-';
digitalWrite( KBD4, LOW);
digitalWrite( KBD5, HIGH);
digitalWrite( KBD6, HIGH);
digitalWrite( KBD7, HIGH);
if( !digitalRead( KBD0)) a= '1';
if( !digitalRead( KBD1)) a= '4';
if( !digitalRead( KBD2)) a= '7';
if( !digitalRead( KBD3)) a= '*';
digitalWrite( KBD4, HIGH);
digitalWrite( KBD5, LOW);
if( !digitalRead( KBD0)) a= '2';
if( !digitalRead( KBD1)) a= '5';
if( !digitalRead( KBD2)) a= '8';
if( !digitalRead( KBD3)) a= '0';
digitalWrite( KBD5, HIGH);
digitalWrite( KBD6, LOW);
if( !digitalRead( KBD0)) a= '3';
if( !digitalRead( KBD1)) a= '6';
if( !digitalRead( KBD2)) a= '9';
if( !digitalRead( KBD3)) a= '#';
digitalWrite( KBD6, HIGH);
digitalWrite( KBD7, LOW);
if( !digitalRead( KBD0)) a= 'A';
if( !digitalRead( KBD1)) a= 'B';
if( !digitalRead( KBD2)) a= 'C';
if( !digitalRead( KBD3)) a= 'D';
if ( elozo == a) a='-';
else elozo= a;
return a;
}
void vu( void) // kivezerles mero
{
byte i;
int v= analogRead( VU_PIN)/ 4;
for( i= 0; i < 12; i++)
{
if ( i < v)
{
if( i < 9) szegmens( i, CRGB::Green);
else szegmens( i, CRGB::Red);
}
else szegmens( i, CRGB::Black);
}
FastLED.show();
delay( 100);
}
void kitt( void)
{
static byte utem= 0;
static CRGB ego= CRGB::Red;
static int szunet= 80;
static int irany= 1;
color_bar();
delay( 20);
szegmens( utem, ego);
FastLED.show();
if( ( irany == 1) && ( utem == 11)) irany= -1;
if( ( irany == -1) && ( utem == 0)) irany= 1;
utem+= irany;
delay( szunet);
}
Itt a vége, fuss el véle.