DMX512 interface - LEnsE / VILLEMEJANE

Dependencies:   mbed mbed-dsp

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 /* mbed Microcontroller Library
00002  * Copyright (c) 2019 ARM Limited
00003  * SPDX-License-Identifier: Apache-2.0
00004  */
00005 
00006 #include "mbed.h"
00007 
00008 #define SAMPLES     512 
00009 Serial      debug_pc(USBTX, USBRX);
00010 
00011 Serial      dmx(PC_10, PC_11);
00012 DigitalOut  out_tx(D10);
00013 DigitalOut  start(D11);
00014 DigitalOut  enableDMX(D5);
00015 
00016 AnalogIn    variationR(A0);
00017 AnalogIn    variationG(A1);
00018 AnalogIn    variationB(A2);
00019 
00020 DigitalIn   my_bp(USER_BUTTON);
00021 
00022 char dmx_data[SAMPLES] = {0};
00023 char nb = 0;
00024 
00025 void dmx_update();
00026 
00027 int main() {
00028     debug_pc.baud(9600);
00029     debug_pc.printf("Essai DMX512\r\n");
00030     dmx.baud(250000);
00031     dmx.format (8, SerialBase::None, 2);
00032     enableDMX = 0;
00033     
00034     // Eurolite LED H2O - 5 channels / adress 0
00035     dmx_data[0] = 0x00;     // Red
00036     dmx_data[1] = 0x00;     // Green
00037     dmx_data[2] = 0x00;     // Blue
00038     dmx_data[3] = 0xFF;     // Dimmer - Max = 255
00039     dmx_data[4] = 0x00;     // On = 0
00040     
00041     while(1) {
00042         int valeur = variationR.read_u16() >> 8;
00043         dmx_data[0] = valeur;  
00044         valeur = variationG.read_u16() >> 8;
00045         dmx_data[1] = valeur;
00046         valeur = variationB.read_u16() >> 8;
00047         dmx_data[2] = valeur;    
00048         dmx_data[4] = 0;    // on
00049         dmx_update();
00050         wait_us(100000);
00051     }
00052 }
00053 
00054 
00055 void dmx_update(){
00056         enableDMX = 1;
00057         start = 1;      // /start
00058         out_tx = 0;     // break
00059         wait_us(88);    
00060         out_tx = 1;     // mb
00061         wait_us(8);     
00062         out_tx = 0;     // break
00063         start = 0;
00064         dmx.putc(0x00);     // Start
00065         for(int i = 0; i < SAMPLES; i++){
00066             dmx.putc(dmx_data[i]);     // data
00067         }
00068         wait_us(23000); // time between frame  
00069 }