|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
programming Član
Pridružen-a: Sre 09 Jan 2013 19:58 Prispevkov: 33 Aktiv.: 0.24
|
Objavljeno: Čet Dec 03, 2020 10:31 am Naslov sporočila: Mikrofon RGB LED |
|
|
Imam delujoč program s katerim preko mikrofona krmilim RBG LED in sicer ko je ADC vrednost na mikrofonu nad 600 se prižge MODRA barva RGB.
Sedaj pa želim nadaljevati tako da MODRA barva RGB ostane prižgana dokler mikrofon ponovno ne zazna ADC vrednosti nad 600 potem bi želel RGB LED obarvati v RDEČO barvo in nato spet ko mikrofon tretjič zazna ADC vrednost nad 600 se RGB LED obarva v zeleno barvo.
Za menjave barve RGB LED MATRIX vem kot tudi moč svetlobe ne poznam pa ukazov, da bi delovalo po zgornjih navodilih.
Koda: |
#include <FastLED.h>
#define NUM_LEDS 25 //Število RGB LED 5x5
#define LED_PIN 5 //RGB LED 5X5 so povezane na digitalni izhod 5
CRGB led[NUM_LEDS];
const int soundpin=A0;
const int threshold=600; // sets threshold value for sound sensor
void setup() {
Serial.begin(9600);
pinMode(soundpin,INPUT);
}
void loop() {
int soundsens=analogRead(soundpin); // reads analog data from sound sensor
if (soundsens>=threshold) {
FastLED.addLeds<NEOPIXEL, LED_PIN>(led, NUM_LEDS); //zelena BARVA RGB LED
for (int i = 0; i < NUM_LEDS; i++)
led[i] = CRGB(0 ,1 , 0);
FastLED.show();
delay(1000);
} |
|
|
Nazaj na vrh |
|
|
miharix Član
Pridružen-a: Tor 18 Dec 2012 9:59 Prispevkov: 403 Aktiv.: 2.92 Kraj: LJ
|
Objavljeno: Čet Dec 03, 2020 12:30 pm Naslov sporočila: |
|
|
Naredi si tako imenovane "zastavice" / "flag" / "semafor" / semaphore"
To je npr bool spremenljivka v kateri hraniš stanje
npr prvič modra_prizgana=true
drugič if modra_prizgana -> rdeca_prizgana
In glede na zastavico izvršiš kodo, da se prižge modra -> rdeča + modra |
|
Nazaj na vrh |
|
|
programming Član
Pridružen-a: Sre 09 Jan 2013 19:58 Prispevkov: 33 Aktiv.: 0.24
|
Objavljeno: Čet Dec 03, 2020 8:55 pm Naslov sporočila: |
|
|
miharix je napisal/a: |
Naredi si tako imenovane "zastavice" / "flag" / "semafor" / semaphore"
To je npr bool spremenljivka v kateri hraniš stanje
npr prvič modra_prizgana=true
drugič if modra_prizgana -> rdeca_prizgana
In glede na zastavico izvršiš kodo, da se prižge modra -> rdeča + modra |
Najlepša hvala za odgovor, vendar mi ne uspe vpeljat tako imenovane zastavice v zgornji program kjer imam RGB LED NeoPixel Muči me kako naj zamenjam barvo RGB ko bo drugič izpolnjen pogoj (ADC vrednost na mikrofonu nad 600) in potem spet tretjič nova barva |
|
Nazaj na vrh |
|
|
mato1111 Član
Pridružen-a: Pet 28 Dec 2012 14:42 Prispevkov: 612 Aktiv.: 4.45 Kraj: Vrhnika
|
Objavljeno: Čet Dec 03, 2020 9:39 pm Naslov sporočila: |
|
|
Probaj takole:
Koda: |
#include <FastLED.h>
#define NUM_LEDS 25 //Število RGB LED 5x5
#define LED_PIN 5 //RGB LED 5X5 so povezane na digitalni izhod 5
CRGB led[NUM_LEDS];
const int soundpin = A0;
const int threshold = 600; // sets threshold value for sound sensor
void setup() {
Serial.begin(9600);
pinMode(soundpin, INPUT);
}
void loop() {
int soundsens = analogRead(soundpin); // reads analog data from sound sensor
byte number = 0; //Prva bo modra BARVA RGB LED
if ((soundsens >= threshold) && (number == 0)) {
FastLED.addLeds<NEOPIXEL, LED_PIN>(led, NUM_LEDS); //Modra BARVA RGB LED
for (int i = 0; i < NUM_LEDS; i++)
led[i] = CRGB(0 , 0 , 255);
FastLED.show();
number = 1; //Naslednja bo rdeca BARVA RGB LED
delay(1000);
}
else if ((soundsens >= threshold) && (number == 1)) {
FastLED.addLeds<NEOPIXEL, LED_PIN>(led, NUM_LEDS); //Rdeca BARVA RGB LED
for (int i = 0; i < NUM_LEDS; i++)
led[i] = CRGB(255 , 0 , 0);
FastLED.show();
number = 2; //Naslednja bo zlena BARVA RGB LED
delay(1000);
}
else if ((soundsens >= threshold) && (number == 2)) {
FastLED.addLeds<NEOPIXEL, LED_PIN>(led, NUM_LEDS); //Zelena BARVA RGB LED
for (int i = 0; i < NUM_LEDS; i++)
led[i] = CRGB(0 , 255 , 0);
FastLED.show();
//number=0; //Odkomentiraj ce hoces da bo naslednja barva spet modra BARVA RGB LED
delay(1000);
}
}
|
|
|
Nazaj na vrh |
|
|
miharix Član
Pridružen-a: Tor 18 Dec 2012 9:59 Prispevkov: 403 Aktiv.: 2.92 Kraj: LJ
|
Objavljeno: Čet Dec 03, 2020 9:41 pm Naslov sporočila: |
|
|
CRGB(r, g, b);
Nekako tako:
Koda: |
#include <FastLED.h>
#define NUM_LEDS 25 //Število RGB LED 5x5
#define LED_PIN 5 //RGB LED 5X5 so povezane na digitalni izhod 5
int stopnja=0;
CRGB led[NUM_LEDS];
const int soundpin=A0;
const int threshold=600; // sets threshold value for sound sensor
void setup() {
Serial.begin(9600);
pinMode(soundpin,INPUT);
}
void loop() {
int soundsens=analogRead(soundpin); // reads analog data from sound sensor
if (soundsens>=threshold) {
stopnja++;}
if(stopnja==1){
FastLED.addLeds<NEOPIXEL, LED_PIN>(led, NUM_LEDS); //zelena BARVA RGB LED
for (int i = 0; i < NUM_LEDS; i++){
led[i] = CRGB(0 ,1 , 0);
}
}
if(stopnja==2){
FastLED.addLeds<NEOPIXEL, LED_PIN>(led, NUM_LEDS); //zelena + modra BARVA RGB LED
for (int i = 0; i < NUM_LEDS; i++){
led[i] = CRGB(0 ,1 , 1);
}
}
if(stopnja==3){
FastLED.addLeds<NEOPIXEL, LED_PIN>(led, NUM_LEDS); //zelena + modra + rdeca BARVA RGB LED
for (int i = 0; i < NUM_LEDS; i++){
led[i] = CRGB(1 ,1 , 1);
}
}
if(stopnja==4){
FastLED.addLeds<NEOPIXEL, LED_PIN>(led, NUM_LEDS); //rdeca BARVA RGB LED
for (int i = 0; i < NUM_LEDS; i++){
led[i] = CRGB(1 ,0 , 0);
}
stopnja=0; // 4 je recimo max zacnimo steti stopnje od znova
}
FastLED.show();
delay(1000);
} |
Tukaj sem za primer namesto bool zastavic naredil kot "večbarvni semafor"
Torej neka dodatna spremenljivka kjer šteješ dogodke, ki te zanimajo in nato ustrezno odločaš dogajanje |
|
Nazaj na vrh |
|
|
programming Član
Pridružen-a: Sre 09 Jan 2013 19:58 Prispevkov: 33 Aktiv.: 0.24
|
Objavljeno: Sob Dec 05, 2020 4:56 pm Naslov sporočila: |
|
|
mato1111 je napisal/a: |
Probaj takole:
Koda: |
#include <FastLED.h>
#define NUM_LEDS 25 //Število RGB LED 5x5
#define LED_PIN 5 //RGB LED 5X5 so povezane na digitalni izhod 5
CRGB led[NUM_LEDS];
const int soundpin = A0;
const int threshold = 600; // sets threshold value for sound sensor
void setup() {
Serial.begin(9600);
pinMode(soundpin, INPUT);
}
void loop() {
int soundsens = analogRead(soundpin); // reads analog data from sound sensor
byte number = 0; //Prva bo modra BARVA RGB LED
if ((soundsens >= threshold) && (number == 0)) {
FastLED.addLeds<NEOPIXEL, LED_PIN>(led, NUM_LEDS); //Modra BARVA RGB LED
for (int i = 0; i < NUM_LEDS; i++)
led[i] = CRGB(0 , 0 , 255);
FastLED.show();
number = 1; //Naslednja bo rdeca BARVA RGB LED
delay(1000);
}
else if ((soundsens >= threshold) && (number == 1)) {
FastLED.addLeds<NEOPIXEL, LED_PIN>(led, NUM_LEDS); //Rdeca BARVA RGB LED
for (int i = 0; i < NUM_LEDS; i++)
led[i] = CRGB(255 , 0 , 0);
FastLED.show();
number = 2; //Naslednja bo zlena BARVA RGB LED
delay(1000);
}
else if ((soundsens >= threshold) && (number == 2)) {
FastLED.addLeds<NEOPIXEL, LED_PIN>(led, NUM_LEDS); //Zelena BARVA RGB LED
for (int i = 0; i < NUM_LEDS; i++)
led[i] = CRGB(0 , 255 , 0);
FastLED.show();
//number=0; //Odkomentiraj ce hoces da bo naslednja barva spet modra BARVA RGB LED
delay(1000);
}
}
|
|
Sem preizkusil zgornji program ampak žal ne deluje, sedaj imam ves čas modro bravo RGB LED tudi če ves čas ploskam in s tem sprožam ADC nastavljeno vrednost na mikrofonu nad 600...vedno ostane modra barva, tu in tam mogoče pride do spremembe tako da določena LED sveti močneje od ostalih in v drugi barvi medtem ko so ostale ves čas modre |
|
Nazaj na vrh |
|
|
programming Član
Pridružen-a: Sre 09 Jan 2013 19:58 Prispevkov: 33 Aktiv.: 0.24
|
Objavljeno: Sob Dec 05, 2020 5:04 pm Naslov sporočila: |
|
|
miharix je napisal/a: |
CRGB(r, g, b);
Nekako tako:
Koda: |
#include <FastLED.h>
#define NUM_LEDS 25 //Število RGB LED 5x5
#define LED_PIN 5 //RGB LED 5X5 so povezane na digitalni izhod 5
int stopnja=0;
CRGB led[NUM_LEDS];
const int soundpin=A0;
const int threshold=600; // sets threshold value for sound sensor
void setup() {
Serial.begin(9600);
pinMode(soundpin,INPUT);
}
void loop() {
int soundsens=analogRead(soundpin); // reads analog data from sound sensor
if (soundsens>=threshold) {
stopnja++;}
if(stopnja==1){
FastLED.addLeds<NEOPIXEL, LED_PIN>(led, NUM_LEDS); //zelena BARVA RGB LED
for (int i = 0; i < NUM_LEDS; i++){
led[i] = CRGB(0 ,1 , 0);
}
}
if(stopnja==2){
FastLED.addLeds<NEOPIXEL, LED_PIN>(led, NUM_LEDS); //zelena + modra BARVA RGB LED
for (int i = 0; i < NUM_LEDS; i++){
led[i] = CRGB(0 ,1 , 1);
}
}
if(stopnja==3){
FastLED.addLeds<NEOPIXEL, LED_PIN>(led, NUM_LEDS); //zelena + modra + rdeca BARVA RGB LED
for (int i = 0; i < NUM_LEDS; i++){
led[i] = CRGB(1 ,1 , 1);
}
}
if(stopnja==4){
FastLED.addLeds<NEOPIXEL, LED_PIN>(led, NUM_LEDS); //rdeca BARVA RGB LED
for (int i = 0; i < NUM_LEDS; i++){
led[i] = CRGB(1 ,0 , 0);
}
stopnja=0; // 4 je recimo max zacnimo steti stopnje od znova
}
FastLED.show();
delay(1000);
} |
Tukaj sem za primer namesto bool zastavic naredil kot "večbarvni semafor"
Torej neka dodatna spremenljivka kjer šteješ dogodke, ki te zanimajo in nato ustrezno odločaš dogajanje |
Žal tudi ta program ne deluje po željah, sedaj mi je med prvimi poskusi samodajno menjavalo barve na RGB LED in po okoli 5s ne greda na stanje mikrofona ponovno v spremenjenem vrstnem redu (od tiste ki ostane nazadnje) potem sem ponovno naložil program in le stežka pridem do zamenjave druge barve tudi, če ves čas sprožam ADC vrednost na mikrofonu nad 600 |
|
Nazaj na vrh |
|
|
programming Član
Pridružen-a: Sre 09 Jan 2013 19:58 Prispevkov: 33 Aktiv.: 0.24
|
Objavljeno: Sob Dec 05, 2020 5:16 pm Naslov sporočila: |
|
|
Sedaj sem malenkost spremenil program tako da sem ADC vrednost mikrofona pretvori v dB in lučka sveti v kolikor mikrofon zazna vrednost nad 74dB drugače se ugasne.
Glavna želja programa pa še vedno ostaja takšna, da bi ob prvi vrednosti zaznani vrednosti na mikrofonu nad 74dB sprožila modra lučka RGB LED ter ostala prižgana dokler mikrofon ponovno ne zadna dB vrednost nad 74dB in se potem prižgana modra lučka obarva rdeče in ta ostane prižgana dokler mikrofon še tretjič ne zazna dB vrednost nad 74 ter se obarva v zeleno, po tem se RGB LED ugasne in je pripravljen na ponovni ciklus
Koda: |
#include <FastLED.h>
#define NUM_LEDS 25 //Število RGB LED 5x5
#define LED_PIN 5 //RGB LED 5X5 so povezane na digitalni izhod 5
CRGB led[NUM_LEDS];
const int MIC = 0;
int adc;
int dB, PdB;
void setup() {
Serial.begin(9600);
}
void loop(){
PdB = dB; //Store the previous of dB here
adc= analogRead(MIC);
dB = (adc+83.2073) / 11.003;
if (PdB!=dB)
Serial.println (dB);
if (dB>74)
{
FastLED.addLeds<NEOPIXEL, LED_PIN>(led, NUM_LEDS); //zelena BARVA RGB LED
for (int i = 0; i < NUM_LEDS; i++)
led[i] = CRGB(0 ,1 , 0);
FastLED.show();
delay(1500);
FastLED.addLeds<NEOPIXEL, LED_PIN>(led, NUM_LEDS); //Izklopi RGB LED
for (int i = 0; i < NUM_LEDS; i++)
led[i] = CRGB(0, 0, 0);
FastLED.show();
}
} |
|
|
Nazaj na vrh |
|
|
miharix Član
Pridružen-a: Tor 18 Dec 2012 9:59 Prispevkov: 403 Aktiv.: 2.92 Kraj: LJ
|
Objavljeno: Sob Dec 05, 2020 5:21 pm Naslov sporočila: |
|
|
Z mato1111 sva skoraj sočatno ti napisala skoraj identična programa, razlika je le kje se nahaja dalay. Nisva pa oba spreminjala dela kode kjer ti zajemaš zvok.
Ti vzameš vzorec zvoka samo tren(par ms) napram času prikaza(1s)
Opazuj obnašanje, če tisti delay zmanjšaš na npr 100.
Vsekakor pa rabiš ti vzročit zvok dlje časa in gledat neko povprečje, iskat peak...
Začasno zamenjaj mikrofon za tipko in namesto ADC za začetek uporabi digital read
Napiši program tako da bo menjavalo barve kot si želiš, ko pritisneš tipko želeno število krat
V svojo kdo dodaj na večih mestih serial write, da boš lashko s serial monitorjem opazoval kaj se dogaja. |
|
Nazaj na vrh |
|
|
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 69 dni
Powered by phpBB © 2001, 2005 phpBB Group
|