Haz una pregunta
  Foros de Electrónica » Diseño analógico » Diseño de circuitos en general
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

10/05/2017 #3221

Avatar de djsound

Gracias Niht, esta perfecto para unos washer led DIY que estoy elaborando. como aporte voy agregarle un canal para que haga un efecto fade automatico de la gamma de colores...!!!
12/05/2017 #3222

Avatar de djsound

Aqui esta mi aporte, agregue al receptor de Niht un canal para efectos especiales... en el caso mio no utilizo el canal de blanco, por eso es de 6 canales de esta forma; canal 1 dimmer, canal 2 Red, canal 3 Green, canal 4 Blue, canal 5 strobo y canal 6 efectos o shows.

hay configurados 6 shows en el canal 6 así:

0 - 42 Show 1 fade Automatico veocidad 1 ;
43 - 85 Show 2 fade Automatico velocidad 2 ;
86 - 127 Show 3 fade Automatico velocidad 3 ;
128 - 170 Show 4 Secuencial paso a paso velocidad 1 ;
171 - 212 Show 5 Secuencial paso a paso velocidad 2 ;
213 - 255 Show 6 Audioritmico RGB ;

Al puerto A0 del arduino se le conecta un sensor de sonido como el de la imagen adjunta, al pin A0 del mismo.

aqui el codigo:

Código:
// 12/05/2017
// RECEPTOR DMX 6 CANALES
// 1 DIMMER GENERAL, 2 ROJO, 3 VERDE, 4 AZUL, 5 STROBO, 6 EFECTOS
// Implementacion de Canal efectos especiales
// Djsound


// 28/04/2017
// RECEPTOR DMX 6 CANALES 
// 1 DIMMER GENERAL, 2 ROJO, 3 VERDE, 4 AZUL, 5 BLANCO, 6 STROBO
// Implementacion de Canal Strobo
// Niht Gonzalez C.


// 30/01/2013
// Set y visualización de la dirección DMX para controlador DMX Arduino
// Leer datos de la dirección DMX y salida PWM
// Primer Canal = dimmer general (multiplicador)
// http://www.city416.ru/
 
// http://www.mathertel.de/License.aspx
// Acuerdo de licencia de software (Licencia BSD)
// Copyright (C) 2005 a 2014 de Matthias Hertel, http://www.mathertel.de/
// Todos los derechos reservados.
// La redistribución y el uso en formas de fuente y binario, con o sin modificaciones, están permitidos siempre que se cumplan las siguientes condiciones:
// • Las redistribuciones del código fuente deben conservar el aviso de copyright anterior, esta lista de condiciones y la siguiente renuncia. 
// • Las redistribuciones en formato binario deben reproducir el aviso de copyright anterior, esta lista de condiciones y la siguiente renuncia en la documentación y / u otros materiales proporcionados con la distribución. 
// • Ni el nombre de los propietarios de derechos de autor ni los nombres de sus colaboradores pueden usarse para apoyar o promocionar productos derivados de este software sin el consentimiento previo por escrito. 
// ESTE SOFTWARE SE PROPORCIONA LOS PROPIETARIOS DEL COPYRIGHT Y SUS COLABORADORES "tal cual" y EXPRESA O IMPLÍCITAS, INCLUYENDO, 
// PERO NO LIMITADO A, LAS GARANTÍAS DE COMERCIALIZACIÓN Y APTITUD PARA UN FIN DETERMINADO. IN NO CASO EL PROPIETARIO COPYRIGHT O COLABORADORES responsables de daños directos,, INCIDENTAL, O INDIRECTOS ESPECIALES, 
// EJEMPLARES DERIVADOS (INCLUYENDO, pero no limitado a, ADQUISICIÓN DE BIENES O SERVICIOS; PÉRDIDA DE USO, DATOS O GANANCIAS; O INTERRUPCIÓN COMERCIAL) CAUSADOS Y EN CUALQUIER TEORÍA DE RESPONSABILIDAD, SEA CONTRACTUAL, 
// RESPONSABILIDAD ESTRICTA O AGRAVIO (INCLUYENDO NEGLIGENCIA) DERIVADOS DE CUALQUIER FORMA DE USO DE ESTE SOFTWARE, AUNQUE advertido de la posibilidad DE TAL DAÑO.


#include <TM1637.h>                    // display TM1637 libreria 
#include <EEPROM.h>                    // EEPROM libreria
#include <DMXSerial.h>                 // DMXSerial library: http://www.mathertel.de/Arduino/DMXSerial.aspx //
#define MODEPIN  7                     // entrada para Boton Modo
#define UPPIN    8                     // entrada para Boton incrementa direccion DMX
#define DOWNPIN  12                    // entrada para Boton decrementa direccion DMX
#define SETPIN   1                     // entrada boton ok
#define KEYSPEED    100                // buttons action trheshold, 200 ms
#define KEEPDMXDISP  30                // keep DMX address on screen, sec
#define PWM1 3    //red                     // Pines de Salidas para el PWM
#define PWM2 5    //green
#define PWM3 6    //blue
#define PWM4 9
#define delayTime1 5
#define delayTime2 2
#define delayTime3 1



TM1637 tm1637(2,4);                     // CLK & DIO salidas para Display TM1637

int           strobo=0;                 // Strober
int           fx=0;                     // efectos 

  
int threshold =532;                    //sensibilidad  de audio


boolean       setaddr=false,           // DMX process/set address flag
              btn_up=true,             // button flags
              btn_down=true,
              btn_set=true,
              btn_mode=true;
unsigned long last_btn;                // buttons press timestamps
unsigned long last_disp=millis();      // last screen update timestamp**
byte          ticks,                   // movement buttons handled actions
              deltadmx;                // movement step
int           dmxaddr=1,               // DMX address
              mult=0;                  // all channels light multiplicator
uint8_t       dmxh,dmxl;               // EEPROM DMX record
int8_t        brightness=4;            // screen brightness level

void dmxdisp(){                      
  int tmp;                             // temp
  int8_t digit[3];                     // address output
  tmp=dmxaddr-(dmxaddr%100);
  digit[0]=tmp/100;
  tmp=dmxaddr-(dmxaddr%10)-(digit[0]*100);
  digit[1]=tmp/10;
  digit[2]=dmxaddr-(digit[0]*100)-(digit[1]*10);
  if(setaddr){
    tm1637.display(0,0x0A);            // setup address
    tm1637.display(1,digit[0]);
    tm1637.display(2,digit[1]);
    tm1637.display(3,digit[2]);
  }else{
    tm1637.display(0,0x0d);
    tm1637.display(1,digit[0]);        // display address
    tm1637.display(2,digit[1]);
    tm1637.display(3,digit[2]);
  }
}

void processmovestep(){
  ticks++;
  if(ticks>10) deltadmx=10;            // increase step
  if(ticks>20) deltadmx=50;
  if(ticks>30){                        // reset step
    deltadmx=1;
    ticks=0;
  }
  dmxdisp();
}

void setup(){
 
  pinMode(PWM1,OUTPUT);          //red      // Iniciar pines de salida
  pinMode(PWM2,OUTPUT);         //green
  pinMode(PWM3,OUTPUT);         //blue
  pinMode(PWM4,OUTPUT);
  pinMode(SETPIN,INPUT_PULLUP);        // init input key pins
  pinMode(MODEPIN,INPUT_PULLUP);
  pinMode(UPPIN,INPUT_PULLUP);
  pinMode(DOWNPIN,INPUT_PULLUP);
  tm1637.init();                       // LDM init
  tm1637.set(brightness);
  DMXSerial.init(DMXReceiver);
  dmxh=EEPROM.read(0x00);              // restore DMX
  dmxl=EEPROM.read(0x01);
  if(dmxh!=0xFF) dmxaddr=(dmxh*256)+dmxl;
  dmxdisp();
}

int redVal;   // rojo
int blueVal;  // azul
int greenVal; // verde


void loop(){
  if(setaddr){
    if(btn_up && btn_down && btn_set && btn_mode){  // read movement keys from idle mode
      btn_up=digitalRead(UPPIN);
      btn_down=digitalRead(DOWNPIN);
      btn_set=digitalRead(SETPIN);
      btn_mode=digitalRead(MODEPIN);
      last_btn=millis();
      ticks=0;
      deltadmx=1;
      if(!btn_up && !btn_down) btn_down=true;
    }
    if(!btn_mode){                                // back to DMX process mode
      btn_mode=true;                              // change mode
      setaddr=false;
      dmxh=EEPROM.read(0x00);                     // restore DMX
      dmxl=EEPROM.read(0x01);
      if(dmxh!=0xFF) dmxaddr=(dmxh*256)+dmxl;
      tm1637.init();                              // reset screen
      delay(500);
      dmxdisp();
     }
    if(!btn_set){                                 // store DMX
      if(dmxaddr>255){
        if(EEPROM.read(0x00)!=0x01) EEPROM.write(0x00,0x01);
        dmxl=dmxaddr-256;
      }else{
        if(EEPROM.read(0x00)!=0x00) EEPROM.write(0x00,0x00);
        dmxl=dmxaddr;
      }
      if(EEPROM.read(0x01)!=dmxl) EEPROM.write(0x01,dmxl);
      btn_set=true;                               // change mode
      setaddr=false;
      tm1637.init();                              // reset screen
      delay(500);
      dmxdisp();
      }
    if(!btn_up) btn_up=digitalRead(UPPIN);        // read movement keys from moving mode
    if(!btn_down) btn_down=digitalRead(DOWNPIN);
    if(!btn_up && millis()-last_btn>=KEYSPEED){   // move DMX up
      last_btn=millis();
      dmxaddr+=deltadmx;
      if(dmxaddr>512) dmxaddr=1;
      processmovestep();
    }
    if(!btn_down && millis()-last_btn>=KEYSPEED){ // move DMX down
      last_btn=millis();
      dmxaddr-=deltadmx;
      if(dmxaddr<1) dmxaddr=512;
      processmovestep();
    } 
  }
  else{
    if(digitalRead(MODEPIN)==0){                 // enter set address mode
      setaddr=true;                              // change mode
      tm1637.init();                             // reset screen
      delay(500);
      dmxdisp();
    }
    mult = DMXSerial.read(dmxaddr);                            // Letura de canales DMX
    analogWrite(PWM1,(DMXSerial.read(dmxaddr+1)*mult/256));    // Canal Rojo 2
    analogWrite(PWM2,(DMXSerial.read(dmxaddr+2)*mult/256));    // Canal Verdde 3
    analogWrite(PWM3,(DMXSerial.read(dmxaddr+3)*mult/256));    // Canal Azul 4
   // analogWrite(PWM4,(DMXSerial.read(dmxaddr+4)*mult/256));    // Canal Blanco 5

    strobo = (DMXSerial.read(dmxaddr+4));  // Canal Strobo 6

    
 int stroboporcent = map(strobo, 0, 255, 400, 10);             

 if ( strobo > 1 ) {
    analogWrite(PWM1,(DMXSerial.read(dmxaddr+1)*mult/256));
    analogWrite(PWM2,(DMXSerial.read(dmxaddr+2)*mult/256));
    analogWrite(PWM3,(DMXSerial.read(dmxaddr+3)*mult/256));

    delay (stroboporcent);
    
    analogWrite(PWM1, 0);
    analogWrite(PWM2, 0);
    analogWrite(PWM3, 0);

    delay(stroboporcent);
  }


fx = (DMXSerial.read(dmxaddr+5));


int show = map(fx, -42, 256,0,7); // SELECCION  6 SHOWS 

if ( show == 1 ){        // SHOW1 FADE VEL1
 
 int redVal = 255;
 int blueVal = 0;
 int greenVal = 0;

   for( int i = 0 ; i < 255 ; i += 1 ){
    greenVal += 1;
    redVal -= 1;
    
    analogWrite( PWM2, 255 - greenVal );
    analogWrite( PWM1, 255 - redVal );

    delay( delayTime1 );
  }

  redVal = 0;
  blueVal = 0;
  greenVal = 255;
 
  for( int i = 0 ; i < 255 ; i += 1 ){
    blueVal += 1;
    greenVal -= 1;
    
    analogWrite( PWM3, 255 - blueVal );
    analogWrite( PWM2, 255 - greenVal );

    delay( delayTime1 );
  }
 
  redVal = 0;
  blueVal = 255;
  greenVal = 0;
 
  for( int i = 0 ; i < 255 ; i += 1 ){
    redVal += 1;
    blueVal -= 1;
 
    analogWrite( PWM1, 255 - redVal );
    analogWrite( PWM3, 255 - blueVal );

    delay( delayTime1 );
  }

 }
if ( show == 2 ){ // SHOW FADE VEL2
 
 int redVal = 255;
 int blueVal = 0;
 int greenVal = 0;

   for( int i = 0 ; i < 255 ; i += 1 ){
    greenVal += 1;
    redVal -= 1;
    
    analogWrite( PWM2, 255 - greenVal );
    analogWrite( PWM1, 255 - redVal );

    delay( delayTime2 );
  }

  redVal = 0;
  blueVal = 0;
  greenVal = 255;
 
  for( int i = 0 ; i < 255 ; i += 1 ){
    blueVal += 1;
    greenVal -= 1;
    
    analogWrite( PWM3, 255 - blueVal );
    analogWrite( PWM2, 255 - greenVal );

    delay( delayTime2 );
  }
 
  redVal = 0;
  blueVal = 255;
  greenVal = 0;
 
  for( int i = 0 ; i < 255 ; i += 1 ){
    redVal += 1;
    blueVal -= 1;
 
    analogWrite( PWM1, 255 - redVal );
    analogWrite( PWM3, 255 - blueVal );

    delay( delayTime2 );
  }

 }

if ( show == 3 ){ // SHOW FADE VEL3
 
 int redVal = 255;
 int blueVal = 0;
 int greenVal = 0;

   for( int i = 0 ; i < 255 ; i += 1 ){
    greenVal += 1;
    redVal -= 1;
    
    analogWrite( PWM2, 255 - greenVal );
    analogWrite( PWM1, 255 - redVal );

    delay( delayTime3 );
  }

  redVal = 0;
  blueVal = 0;
  greenVal = 255;
 
  for( int i = 0 ; i < 255 ; i += 1 ){
    blueVal += 1;
    greenVal -= 1;
    
    analogWrite( PWM3, 255 - blueVal );
    analogWrite( PWM2, 255 - greenVal );

    delay( delayTime3 );
  }
 
  redVal = 0;
  blueVal = 255;
  greenVal = 0;
 
  for( int i = 0 ; i < 255 ; i += 1 ){
    redVal += 1;
    blueVal -= 1;
 
    analogWrite( PWM1, 255 - redVal );
    analogWrite( PWM3, 255 - blueVal );

    delay( delayTime3 );
  }
 }
if ( show == 4 ){ // SHOW secuencia 1
 
    analogWrite(PWM1, 255);
    analogWrite(PWM2, 0);
    analogWrite(PWM3, 0);
    
    delay(500);
   
    analogWrite(PWM1, 0);
    analogWrite(PWM2, 255);
    analogWrite(PWM3, 0);
    
    delay(500);

    analogWrite(PWM1, 0);
    analogWrite(PWM2, 0);
    analogWrite(PWM3, 255);
    
    delay(500);
 }
 
 if ( show == 5 ){ // SHOW secuencial 2
 
    analogWrite(PWM1, 255);
    analogWrite(PWM2, 0);
    analogWrite(PWM3, 0);
    
    delay(150);
   
    analogWrite(PWM1, 0);
    analogWrite(PWM2, 255);
    analogWrite(PWM3, 0);
    
    delay(150);

    analogWrite(PWM1, 0);
    analogWrite(PWM2, 0);
    analogWrite(PWM3, 255);
    
    delay(150);
 }

if ( show == 6 ){ // SHOW AUDIO RITMICO
 
  int sensorValue = analogRead(A0); //A0 es la entrada a la que se conecta el módulo
  if(sensorValue<=threshold){
   digitalWrite(PWM1, HIGH);
   digitalWrite(PWM2, HIGH);
   digitalWrite(PWM3, HIGH); //
   delay(50);
   digitalWrite(PWM1, LOW);
   digitalWrite(PWM2, LOW);
   digitalWrite(PWM3, LOW);}


 }

 
 }  // final final
}
18/05/2017 #3223

Avatar de djsound

Un ultimo aporte.... el diseño en PCB Wizzard del receptor, esta divido en 2 placas para facilidad de montaje en el aparato, tablero con el Display, botones Micrófono y Potenciometro de sensibilidad de audio y la tarjeta con el Atmega y max485, de igual forma adjunto el codigo corregido, con la configuración de pines para este PCB. ha se me olvidaba, reemplace el sensor de audio, por un micrófono de electret. Espero este bien y quedo atento a sus comentarios.

Código:
// 12/05/2017
// RECEPTOR DMX 6 CANALES
// 1 DIMMER GENERAL, 2 ROJO, 3 VERDE, 4 AZUL, 5 STROBO, 6 EFECTOS
// Implementacion de Canal efectos especiales
// Djsound


// 28/04/2017
// RECEPTOR DMX 6 CANALES 
// 1 DIMMER GENERAL, 2 ROJO, 3 VERDE, 4 AZUL, 5 BLANCO, 6 STROBO
// Implementacion de Canal Strobo
// Niht Gonzalez C.


// 30/01/2013
// Set y visualización de la dirección DMX para controlador DMX Arduino
// Leer datos de la dirección DMX y salida PWM
// Primer Canal = dimmer general (multiplicador)
// http://www.city416.ru/
 
// http://www.mathertel.de/License.aspx
// Acuerdo de licencia de software (Licencia BSD)
// Copyright (C) 2005 a 2014 de Matthias Hertel, http://www.mathertel.de/
// Todos los derechos reservados.
// La redistribución y el uso en formas de fuente y binario, con o sin modificaciones, están permitidos siempre que se cumplan las siguientes condiciones:
// • Las redistribuciones del código fuente deben conservar el aviso de copyright anterior, esta lista de condiciones y la siguiente renuncia. 
// • Las redistribuciones en formato binario deben reproducir el aviso de copyright anterior, esta lista de condiciones y la siguiente renuncia en la documentación y / u otros materiales proporcionados con la distribución. 
// • Ni el nombre de los propietarios de derechos de autor ni los nombres de sus colaboradores pueden usarse para apoyar o promocionar productos derivados de este software sin el consentimiento previo por escrito. 
// ESTE SOFTWARE SE PROPORCIONA LOS PROPIETARIOS DEL COPYRIGHT Y SUS COLABORADORES "tal cual" y EXPRESA O IMPLÍCITAS, INCLUYENDO, 
// PERO NO LIMITADO A, LAS GARANTÍAS DE COMERCIALIZACIÓN Y APTITUD PARA UN FIN DETERMINADO. IN NO CASO EL PROPIETARIO COPYRIGHT O COLABORADORES responsables de daños directos,, INCIDENTAL, O INDIRECTOS ESPECIALES, 
// EJEMPLARES DERIVADOS (INCLUYENDO, pero no limitado a, ADQUISICIÓN DE BIENES O SERVICIOS; PÉRDIDA DE USO, DATOS O GANANCIAS; O INTERRUPCIÓN COMERCIAL) CAUSADOS Y EN CUALQUIER TEORÍA DE RESPONSABILIDAD, SEA CONTRACTUAL, 
// RESPONSABILIDAD ESTRICTA O AGRAVIO (INCLUYENDO NEGLIGENCIA) DERIVADOS DE CUALQUIER FORMA DE USO DE ESTE SOFTWARE, AUNQUE advertido de la posibilidad DE TAL DAÑO.


#include <TM1637.h>                    // display TM1637 libreria 
#include <EEPROM.h>                    // EEPROM libreria
#include <DMXSerial.h>                 // DMXSerial library: http://www.mathertel.de/Arduino/DMXSerial.aspx //
#define MODEPIN  1                     // entrada para Boton Modo
#define UPPIN    2                     // entrada para Boton incrementa direccion DMX
#define DOWNPIN  3                    // entrada para Boton decrementa direccion DMX
#define SETPIN   4                     // entrada boton ok
#define KEYSPEED    100                // buttons action trheshold, 200 ms
#define KEEPDMXDISP  30                // keep DMX address on screen, sec
#define PWM1 11    //red                     // Pines de Salidas para el PWM
#define PWM2 10    //green
#define PWM3 9   //blue

#define delayTime1 5
#define delayTime2 2
#define delayTime3 1



TM1637 tm1637(6,7);                     // CLK & DIO salidas para Display TM1637

int           strobo=0;                 // Strober
int           fx=0;                     // efectos 
int           audio=0;                     // efectos 
  


boolean       setaddr=false,           // DMX process/set address flag
              btn_up=true,             // button flags
              btn_down=true,
              btn_set=true,
              btn_mode=true;
unsigned long last_btn;                // buttons press timestamps
unsigned long last_disp=millis();      // last screen update timestamp**
byte          ticks,                   // movement buttons handled actions
              deltadmx;                // movement step
int           dmxaddr=1,               // DMX address
              mult=0;                  // all channels light multiplicator
uint8_t       dmxh,dmxl;               // EEPROM DMX record
int8_t        brightness=4;            // screen brightness level

void dmxdisp(){                      
  int tmp;                             // temp
  int8_t digit[3];                     // address output
  tmp=dmxaddr-(dmxaddr%100);
  digit[0]=tmp/100;
  tmp=dmxaddr-(dmxaddr%10)-(digit[0]*100);
  digit[1]=tmp/10;
  digit[2]=dmxaddr-(digit[0]*100)-(digit[1]*10);
  if(setaddr){
    tm1637.display(0,0x0A);            // setup address
    tm1637.display(1,digit[0]);
    tm1637.display(2,digit[1]);
    tm1637.display(3,digit[2]);
  }else{
    tm1637.display(0,0x0d);
    tm1637.display(1,digit[0]);        // display address
    tm1637.display(2,digit[1]);
    tm1637.display(3,digit[2]);
  }
}

void processmovestep(){
  ticks++;
  if(ticks>10) deltadmx=10;            // increase step
  if(ticks>20) deltadmx=50;
  if(ticks>30){                        // reset step
    deltadmx=1;
    ticks=0;
  }
  dmxdisp();
}

void setup(){
 
  pinMode(PWM1,OUTPUT);          //red      // Iniciar pines de salida
  pinMode(PWM2,OUTPUT);         //green
  pinMode(PWM3,OUTPUT);         //blue

  pinMode(SETPIN,INPUT_PULLUP);        // init input key pins
  pinMode(MODEPIN,INPUT_PULLUP);
  pinMode(UPPIN,INPUT_PULLUP);
  pinMode(DOWNPIN,INPUT_PULLUP);
  tm1637.init();                       // LDM init
  tm1637.set(brightness);
  DMXSerial.init(DMXReceiver);
  dmxh=EEPROM.read(0x00);              // restore DMX
  dmxl=EEPROM.read(0x01);
  if(dmxh!=0xFF) dmxaddr=(dmxh*256)+dmxl;
  dmxdisp();
}

int redVal;   // rojo
int blueVal;  // azul
int greenVal; // verde


void loop(){
  if(setaddr){
    if(btn_up && btn_down && btn_set && btn_mode){  // read movement keys from idle mode
      btn_up=digitalRead(UPPIN);
      btn_down=digitalRead(DOWNPIN);
      btn_set=digitalRead(SETPIN);
      btn_mode=digitalRead(MODEPIN);
      last_btn=millis();
      ticks=0;
      deltadmx=1;
      if(!btn_up && !btn_down) btn_down=true;
    }
    if(!btn_mode){                                // back to DMX process mode
      btn_mode=true;                              // change mode
      setaddr=false;
      dmxh=EEPROM.read(0x00);                     // restore DMX
      dmxl=EEPROM.read(0x01);
      if(dmxh!=0xFF) dmxaddr=(dmxh*256)+dmxl;
      tm1637.init();                              // reset screen
      delay(500);
      dmxdisp();
     }
    if(!btn_set){                                 // store DMX
      if(dmxaddr>255){
        if(EEPROM.read(0x00)!=0x01) EEPROM.write(0x00,0x01);
        dmxl=dmxaddr-256;
      }else{
        if(EEPROM.read(0x00)!=0x00) EEPROM.write(0x00,0x00);
        dmxl=dmxaddr;
      }
      if(EEPROM.read(0x01)!=dmxl) EEPROM.write(0x01,dmxl);
      btn_set=true;                               // change mode
      setaddr=false;
      tm1637.init();                              // reset screen
      delay(500);
      dmxdisp();
      }
    if(!btn_up) btn_up=digitalRead(UPPIN);        // read movement keys from moving mode
    if(!btn_down) btn_down=digitalRead(DOWNPIN);
    if(!btn_up && millis()-last_btn>=KEYSPEED){   // move DMX up
      last_btn=millis();
      dmxaddr+=deltadmx;
      if(dmxaddr>512) dmxaddr=1;
      processmovestep();
    }
    if(!btn_down && millis()-last_btn>=KEYSPEED){ // move DMX down
      last_btn=millis();
      dmxaddr-=deltadmx;
      if(dmxaddr<1) dmxaddr=512;
      processmovestep();
    } 
  }
  else{
    if(digitalRead(MODEPIN)==0){                 // enter set address mode
      setaddr=true;                              // change mode
      tm1637.init();                             // reset screen
      delay(500);
      dmxdisp();
    }
    mult = DMXSerial.read(dmxaddr);                            // Letura de canales DMX
    analogWrite(PWM1,(DMXSerial.read(dmxaddr+1)*mult/256));    // Canal Rojo 2
    analogWrite(PWM2,(DMXSerial.read(dmxaddr+2)*mult/256));    // Canal Verdde 3
    analogWrite(PWM3,(DMXSerial.read(dmxaddr+3)*mult/256));    // Canal Azul 4
   // analogWrite(PWM4,(DMXSerial.read(dmxaddr+4)*mult/256));    // Canal Blanco 5

    strobo = (DMXSerial.read(dmxaddr+4));  // Canal Strobo 6

    
 int stroboporcent = map(strobo, 0, 255, 400, 10);             

 if ( strobo > 1 ) {
    analogWrite(PWM1,(DMXSerial.read(dmxaddr+1)*mult/256));
    analogWrite(PWM2,(DMXSerial.read(dmxaddr+2)*mult/256));
    analogWrite(PWM3,(DMXSerial.read(dmxaddr+3)*mult/256));

    delay (stroboporcent);
    
    analogWrite(PWM1, 0);
    analogWrite(PWM2, 0);
    analogWrite(PWM3, 0);

    delay(stroboporcent);
  }


fx = (DMXSerial.read(dmxaddr+5));


int show = map(fx, -42, 256,0,7); // SELECCION  6 SHOWS 

if ( show == 1 ){        // SHOW1 FADE VEL1
 
 int redVal = 255;
 int blueVal = 0;
 int greenVal = 0;

   for( int i = 0 ; i < 255 ; i += 1 ){
    greenVal += 1;
    redVal -= 1;
    
    analogWrite( PWM2, 255 - greenVal );
    analogWrite( PWM1, 255 - redVal );

    delay( delayTime1 );
  }

  redVal = 0;
  blueVal = 0;
  greenVal = 255;
 
  for( int i = 0 ; i < 255 ; i += 1 ){
    blueVal += 1;
    greenVal -= 1;
    
    analogWrite( PWM3, 255 - blueVal );
    analogWrite( PWM2, 255 - greenVal );

    delay( delayTime1 );
  }
 
  redVal = 0;
  blueVal = 255;
  greenVal = 0;
 
  for( int i = 0 ; i < 255 ; i += 1 ){
    redVal += 1;
    blueVal -= 1;
 
    analogWrite( PWM1, 255 - redVal );
    analogWrite( PWM3, 255 - blueVal );

    delay( delayTime1 );
  }

 }
if ( show == 2 ){ // SHOW FADE VEL2
 
 int redVal = 255;
 int blueVal = 0;
 int greenVal = 0;

   for( int i = 0 ; i < 255 ; i += 1 ){
    greenVal += 1;
    redVal -= 1;
    
    analogWrite( PWM2, 255 - greenVal );
    analogWrite( PWM1, 255 - redVal );

    delay( delayTime2 );
  }

  redVal = 0;
  blueVal = 0;
  greenVal = 255;
 
  for( int i = 0 ; i < 255 ; i += 1 ){
    blueVal += 1;
    greenVal -= 1;
    
    analogWrite( PWM3, 255 - blueVal );
    analogWrite( PWM2, 255 - greenVal );

    delay( delayTime2 );
  }
 
  redVal = 0;
  blueVal = 255;
  greenVal = 0;
 
  for( int i = 0 ; i < 255 ; i += 1 ){
    redVal += 1;
    blueVal -= 1;
 
    analogWrite( PWM1, 255 - redVal );
    analogWrite( PWM3, 255 - blueVal );

    delay( delayTime2 );
  }

 }

if ( show == 3 ){ // SHOW FADE VEL3
 
 int redVal = 255;
 int blueVal = 0;
 int greenVal = 0;

   for( int i = 0 ; i < 255 ; i += 1 ){
    greenVal += 1;
    redVal -= 1;
    
    analogWrite( PWM2, 255 - greenVal );
    analogWrite( PWM1, 255 - redVal );

    delay( delayTime3 );
  }

  redVal = 0;
  blueVal = 0;
  greenVal = 255;
 
  for( int i = 0 ; i < 255 ; i += 1 ){
    blueVal += 1;
    greenVal -= 1;
    
    analogWrite( PWM3, 255 - blueVal );
    analogWrite( PWM2, 255 - greenVal );

    delay( delayTime3 );
  }
 
  redVal = 0;
  blueVal = 255;
  greenVal = 0;
 
  for( int i = 0 ; i < 255 ; i += 1 ){
    redVal += 1;
    blueVal -= 1;
 
    analogWrite( PWM1, 255 - redVal );
    analogWrite( PWM3, 255 - blueVal );

    delay( delayTime3 );
  }
 }
if ( show == 4 ){ // SHOW secuencia 1
 
    analogWrite(PWM1, 255);
    analogWrite(PWM2, 0);
    analogWrite(PWM3, 0);
    
    delay(500);
   
    analogWrite(PWM1, 0);
    analogWrite(PWM2, 255);
    analogWrite(PWM3, 0);
    
    delay(500);

    analogWrite(PWM1, 0);
    analogWrite(PWM2, 0);
    analogWrite(PWM3, 255);
    
    delay(500);
 }
 
 if ( show == 5 ){ // SHOW secuencial 2
 
    analogWrite(PWM1, 255);
    analogWrite(PWM2, 0);
    analogWrite(PWM3, 0);
    
    delay(150);
   
    analogWrite(PWM1, 0);
    analogWrite(PWM2, 255);
    analogWrite(PWM3, 0);
    
    delay(150);

    analogWrite(PWM1, 0);
    analogWrite(PWM2, 0);
    analogWrite(PWM3, 255);
    
    delay(150);
 }

if ( show == 6 ){ // SHOW AUDIO RITMICO

int sensi =532;                    //sensibilidad  de audio

 
  int sensorValue = analogRead(A4); //A4 es la entrada a la que se conecta el módulo
  if(sensorValue<=sensi){
   digitalWrite(PWM1, HIGH);
   digitalWrite(PWM2, HIGH);
   digitalWrite(PWM3, HIGH); //
   delay(50);
   digitalWrite(PWM1, LOW);
   digitalWrite(PWM2, LOW);
   digitalWrite(PWM3, LOW);}


 }

 
 }  // final final
}
Imágenes Adjuntas
Tipo de Archivo: png PCB1.png (96,4 KB (Kilobytes), 42 visitas)
Tipo de Archivo: png PCB2.png (26,1 KB (Kilobytes), 24 visitas)
Archivos Adjuntos
Tipo de Archivo: rar DMXRECEPTOR_final.rar (31,0 KB (Kilobytes), 33 visitas)
06/08/2017 #3224
Moderador general

Avatar de Fogonazo

Un "Láser light show"

es "Lo mas del universo" , pero puede ser muy interesante.
Archivos Adjuntos
Tipo de Archivo: pdf Laser Light Show.pdf (1,06 MB (Megabytes), 46 visitas)
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Diseño de circuitos en general

Alarmas, temporizadores, acondicionadores de señal...

Cerrar
Foros de Electrónica » Diseño analógico » Diseño de circuitos en general

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.