Consolle DMX - errore se aggiungo la stringa: Serial.begin(9600);

Ciao a tutti,
benché costi di più che acquistarne una già fatta… mi sto cimentando nella costruzione di una consolle luci DMX a 6 ch.

Ho trovato in rete questo bellissimo sketch:

/**************************************************
*
* Title			    : Consolle DMX SKETCH BASE DI TONI MERINO
* Version		    : v. 0.X
* Last updated	            : 03.11.14
* Target		    : Arduino UNO; Arduino nano
* Author                    : TONI MERINO
* Web                       : www.deskontrol.net
*
******************************************/

//*********************************************
#include <lib_dmx.h>  // libreria DMX 4 universos   // deskontrol four universes DMX library  - www.deskontrol.net/blog

//***********************************************
//                        New DMX modes *** EXPERIMENTAL ***
//*************************************************
#define    DMX512     (0)    // (250 kbaud - 2 to 512 channels) Standard USITT DMX-512
#define    DMX1024    (1)    // (500 kbaud - 2 to 1024 channels) Completely non standard - TESTED ok
#define    DMX2048    (2)    // (1000 kbaud - 2 to 2048 channels) called by manufacturers DMX1000K, DMX 4x or DMX 1M ???

void setup() 
{
  // configurar pines arduino del 2 al 13 como entradas con pullup, (cuando se pulsa el boton = 0 si no = 1)
  // configure arduino pins 2 to 13 as inputs with pullup, (button pressed = 0, button free = 1) 
  for (int i=2;i<=13;i++) 
  {
    pinMode(i,INPUT);            // pines como entradas       
                                 // pins as inputs
    digitalWrite(i, HIGH);       // activar resistencias pullup internas
                                 // turn on pullup internal resistors
  }
  
  ArduinoDmx0.set_tx_address(1);      // poner aqui la direccion de inicio de DMX 
                                      // put here DMX start address 
                                      
  ArduinoDmx0.set_tx_channels(100);   // poner aqui el numero de canales a transmitir 
                                      // put here the number of DMX channels to transmmit
                                      
  ArduinoDmx0.init_tx(DMX512);        // iniciar transmision universo 0, modo estandar DMX512
                                      // starts universe 0 as TX, standard mode DMX512
}  //end setup()

void loop()
{
  // seis entradas con potenciometros que envian valores DMX entre 0 y 255 a los canales 1 al 6
  // six analog inputs with potentiometers, sending values from 0 to 255, to dmx output channels 1 to 6
  
  ArduinoDmx0.TxBuffer[0] = scale(analogRead(0)); // copiar valor de la entrada analogica 0 al canal DMX 1
                                                  // copy value from analog input 0 to DMX channel 1
  ArduinoDmx0.TxBuffer[1] = scale(analogRead(1)); // copiar valor de la entrada analogica 1 al canal DMX 2
                                                  // copy value from analog input 1 to DMX channel 2
  ArduinoDmx0.TxBuffer[2] = scale(analogRead(2)); // copiar valor de la entrada analogica 2 al canal DMX 3
                                                  // copy value from analog input 2 to DMX channel 3
  ArduinoDmx0.TxBuffer[3] = scale(analogRead(3)); // copiar valor de la entrada analogica 3 al canal DMX 4
                                                  // copy value from analog input 3 to DMX channel 4
  ArduinoDmx0.TxBuffer[4] = scale(analogRead(4)); // copiar valor de la entrada analogica 4 al canal DMX 5
                                                  // copy value from analog input 4 to DMX channel 5
  ArduinoDmx0.TxBuffer[5] = scale(analogRead(5)); // copiar valor de la entrada analogica 5 al canal DMX 6
                                                  // copy value from analog input 5 to DMX channel 6
  
  if (digitalRead(2) == LOW)       // pulsador en pin 2 apretado  // push-button on pin 2, is pressed
    ArduinoDmx0.TxBuffer[6] = 255; // enviar 255 al canal DMX 7   // send value 255 to DMX channel 7
  else
    ArduinoDmx0.TxBuffer[6] = 0;   // si no enviar 0              // push-button free, send 0
    
    
  if (digitalRead(3) == LOW)       // pulsador en pin 3 apretado
    ArduinoDmx0.TxBuffer[7] = 255; // enviar 255 al canal DMX 8
  else
    ArduinoDmx0.TxBuffer[7] = 0;   // si no enviar 0
    
    
  if (digitalRead(4) == LOW)       // pulsador en pin 4 apretado
    ArduinoDmx0.TxBuffer[8] = 255; // enviar 255 al canal DMX 9
  else
    ArduinoDmx0.TxBuffer[8] = 0;   // si no enviar 0
    
    if (digitalRead(5) == LOW)       // pulsador en pin 5 apretado
    ArduinoDmx0.TxBuffer[9] = 255; // enviar 255 al canal DMX 10
  else
    ArduinoDmx0.TxBuffer[9] = 0;   // si no enviar 0
    
    if (digitalRead(6) == LOW)       // pulsador en pin 6 apretado
    ArduinoDmx0.TxBuffer[10] = 255; // enviar 255 al canal DMX 11
  else
    ArduinoDmx0.TxBuffer[10] = 0;   // si no enviar 0
    
    if (digitalRead(7) == LOW)       // pulsador en pin 7 apretado
    ArduinoDmx0.TxBuffer[11] = 255; // enviar 255 al canal DMX 12
  else
    ArduinoDmx0.TxBuffer[11] = 0;   // si no enviar 0
    
    if (digitalRead(8) == LOW)       // pulsador en pin 8 apretado
    ArduinoDmx0.TxBuffer[12] = 255; // enviar 255 al canal DMX 13
  else
    ArduinoDmx0.TxBuffer[12] = 0;   // si no enviar 0
    
    if (digitalRead(9) == LOW)       // pulsador en pin 9 apretado
    ArduinoDmx0.TxBuffer[13] = 255; // enviar 255 al canal DMX 14
  else
    ArduinoDmx0.TxBuffer[13] = 0;   // si no enviar 0
    
    if (digitalRead(10) == LOW)       // pulsador en pin 10 apretado
    ArduinoDmx0.TxBuffer[14] = 255; // enviar 255 al canal DMX 15
  else
    ArduinoDmx0.TxBuffer[14] = 0;   // si no enviar 0
    
    if (digitalRead(11) == LOW)       // pulsador en pin 11 apretado
    ArduinoDmx0.TxBuffer[15] = 255; // enviar 255 al canal DMX 16
  else
    ArduinoDmx0.TxBuffer[15] = 0;   // si no enviar 0
    
    if (digitalRead(12) == LOW)       // pulsador en pin 12 apretado
    ArduinoDmx0.TxBuffer[16] = 255; // enviar 255 al canal DMX 17
  else
    ArduinoDmx0.TxBuffer[16] = 0;   // si no enviar 0
    
    if (digitalRead(13) == LOW)       // pulsador en pin 13 apretado
    ArduinoDmx0.TxBuffer[17] = 255; // enviar 255 al canal DMX 18
  else
    ArduinoDmx0.TxBuffer[17] = 0;   // si no enviar 0
      
    
       
    
}  //end loop()


uint8_t scale(uint16_t value) // scale values from 10 bits to 8 bits
{
  if(value > 1023) // test for 10 bits limit
    value = 1023;
    
  return (value >> 2); // scale
}  //end scale()

//********************************************************************************

bene,

ma ho il seguente problema: se nel setup scrivo: Serial.begin(9600);
mi torvo il seguente errore:

Arduino:1.5.5 (Mac OS X), Scheda:“Arduino Uno”

core.a(HardwareSerial.cpp.o): In function __vector_18': /Applications/Arduino 1.5.5.app/Contents/Resources/Java/hardware/arduino/avr/cores/arduino/HardwareSerial.cpp:77: multiple definition of __vector_18’
Dmx/lib_dmx.cpp.o:/Users/ISS/Documents/Arduino/libraries/Dmx/lib_dmx.cpp:224: first defined here

Che senso ha?
Grazie

Ciao a tutti,
anche io trovo lo stesso problema.

Qualcuno è per caso riuscito a risolvere?

Grazie

Ho trovato in rete questo bellissimo sketch:

Su questo si puó discutere perché ho un altra opinione riguardante un bel sketch.
Tutto il ciclo loop() si puó ridurre a 7 righe.

void loop()
{
for (int i =0;i<6;i++)
ArduinoDmx0.TxBuffer[i] = scale(analogRead(i));

for i=2; i<18; i++)
{
if (digitalRead(i) == LOW)       // pulsador en pin 2 apretado  // push-button on pin 2, is pressed
    ArduinoDmx0.TxBuffer[i+4] = 255; // enviar 255 al canal DMX 7   // send value 255 to DMX channel 7
  else
    ArduinoDmx0.TxBuffer[i+4] = 0;   // si no enviar 0              // push-button free, send 0
}
}

poi se scrivi

for i=2; i<18; i++)
{
ArduinoDmx0.TxBuffer[i+4] = 255 * !digitalRead(i);
}

é ancora piú compatto.

la funzione uint8_t scale(uint16_t value) // scale values from 10 bits to 8 bits non fa quello che dice il commento.

Presumo che usi un Arduino UNO. Poi c’é un errore che inizializzi 11 pin digitali (da 2 a 13) ma ne leggi 15 (da 2 a 18) .

Senza che ci dai il link alla libreria non risolviamo niente.

Ciao Uwe