www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Mikrofon RGB LED

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Arduino sekcija
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
programming
Član
Član



Pridružen-a: Sre 09 Jan 2013 19:58
Prispevkov: 33
Aktiv.: 0.24

PrispevekObjavljeno: Čet Dec 03, 2020 10:31 am    Naslov sporočila:  Mikrofon RGB LED Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
miharix
Član
Član



Pridružen-a: Tor 18 Dec 2012 9:59
Prispevkov: 403
Aktiv.: 2.92
Kraj: LJ

PrispevekObjavljeno: Čet Dec 03, 2020 12:30 pm    Naslov sporočila:   Odgovori s citatom

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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
programming
Član
Član



Pridružen-a: Sre 09 Jan 2013 19:58
Prispevkov: 33
Aktiv.: 0.24

PrispevekObjavljeno: Čet Dec 03, 2020 8:55 pm    Naslov sporočila:   Odgovori s citatom

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 Think 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 d'oh!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
mato1111
Član
Član



Pridružen-a: Pet 28 Dec 2012 14:42
Prispevkov: 612
Aktiv.: 4.45
Kraj: Vrhnika

PrispevekObjavljeno: Čet Dec 03, 2020 9:39 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
miharix
Član
Član



Pridružen-a: Tor 18 Dec 2012 9:59
Prispevkov: 403
Aktiv.: 2.92
Kraj: LJ

PrispevekObjavljeno: Čet Dec 03, 2020 9:41 pm    Naslov sporočila:   Odgovori s citatom

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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
programming
Član
Član



Pridružen-a: Sre 09 Jan 2013 19:58
Prispevkov: 33
Aktiv.: 0.24

PrispevekObjavljeno: Sob Dec 05, 2020 4:56 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
programming
Član
Član



Pridružen-a: Sre 09 Jan 2013 19:58
Prispevkov: 33
Aktiv.: 0.24

PrispevekObjavljeno: Sob Dec 05, 2020 5:04 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
programming
Član
Član



Pridružen-a: Sre 09 Jan 2013 19:58
Prispevkov: 33
Aktiv.: 0.24

PrispevekObjavljeno: Sob Dec 05, 2020 5:16 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
miharix
Član
Član



Pridružen-a: Tor 18 Dec 2012 9:59
Prispevkov: 403
Aktiv.: 2.92
Kraj: LJ

PrispevekObjavljeno: Sob Dec 05, 2020 5:21 pm    Naslov sporočila:   Odgovori s citatom

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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Arduino sekcija Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
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