This shows you the differences between two versions of the page.
|
pm:prj2023:vstoica:ambilight [2023/05/23 18:50] stelian.chioveanu [Hardware Design] |
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:proiect_pm_ambilight.zip| Sursa si diagrame}} | + | {{pm:prj2023:vstoica:stelian_chioveanu_final.zip| Sursa si diagrame}} |
| </note> | </note> | ||