This shows you the differences between two versions of the page.
pm:prj2023:vstoica:ambilight [2023/05/23 18:53] stelian.chioveanu [Download] |
pm:prj2023:vstoica:ambilight [2023/05/29 00:31] (current) stelian.chioveanu [Download] |
||
---|---|---|---|
Line 49: | Line 49: | ||
Pentru partea de ambilight va fi nevoie de un program extern pe nume Prismatik care preia culorile de pe ecran si le trimite prin interfata seriala. | Pentru partea de ambilight va fi nevoie de un program extern pe nume Prismatik care preia culorile de pe ecran si le trimite prin interfata seriala. | ||
+ | |||
+ | S-a utilizat o intrerupere pe pinul 2, care la apasarea butonului va incrementa variabila "mode" care reprezinta modul de functionare(bluetooth, ambilight, spectrum). Am utilizat un debouncer. | ||
+ | |||
+ | <code> | ||
+ | ISR(INT0_vect) { | ||
+ | if((long)(micros() - lastDebounceTime) >= debounceDelay) { | ||
+ | mode++; | ||
+ | lastDebounceTime = micros(); | ||
+ | } | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | In functie de variabila "mode" modul de functionare va fi altul: | ||
+ | |||
+ | <code> | ||
+ | void loop() { | ||
+ | if(mode % 3 == 0){ | ||
+ | TIMSK1 |= (1 << OCIE1A); | ||
+ | spectrum(); | ||
+ | TIMSK1 &= ~(1 << OCIE1A); | ||
+ | } | ||
+ | if(mode % 3 == 1){ | ||
+ | bluetooth(); | ||
+ | } | ||
+ | if(mode % 3 == 2){ | ||
+ | ambi(); | ||
+ | } | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | Am utilizat un timer pentru o functie delay custom. Acest timer incrementeaza o valoare, asteptand modificarea valorii intr-un while acolo unde aveam nevoie de delay. | ||
+ | |||
+ | <code> | ||
+ | ISR(TIMER1_COMPA_vect) { | ||
+ | if (counter_time > 20000) { | ||
+ | counter_time = 0; | ||
+ | } | ||
+ | counter_time++; | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | Functia "Light_RGB_LED" parseaza culorile primite prin bluetooth: | ||
+ | |||
+ | <code> | ||
+ | void Light_RGB_LED(){ | ||
+ | int SP1 = RGB_string.indexOf('.'); | ||
+ | int SP2 = RGB_string.indexOf('.', SP1+1); | ||
+ | int SP3 = RGB_string.indexOf('.', SP2+1); | ||
+ | String R = RGB_string.substring(0, SP1); | ||
+ | String G = RGB_string.substring(SP1+1, SP2); | ||
+ | String B = RGB_string.substring(SP2+1, SP3); | ||
+ | LEDS.showColor(CRGB(R.toInt(), G.toInt(), B.toInt())); | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | Functia "spectrum" cicleaza prin diferite culori(de la turcoaz la albastru si mov). | ||
+ | |||
+ | |||
+ | Functia "ambi" este cea pentru ambilight, aceasta preluand valorile de la seriala. | ||
+ | |||
+ | |||
+ | Pentru partea de bluetooth, se asteapta valori de genul (x.x.x) unde x este o valoare intre 0 si 255. Dupa extragerea valorilor, toate ledurile vor primi aceasta valoare. | ||
</note> | </note> | ||
Line 67: | Line 129: | ||
<note> | <note> | ||
- | {{pm:prj2023:vstoica:stelian_chioveanu.zip| Sursa si diagrame}} | + | {{pm:prj2023:vstoica:stelian_chioveanu_final.zip| Sursa si diagrame}} |
</note> | </note> | ||