Olá LG.

tenho um arduino uno com ethernet shield e estou recebendo pacotes do protocolo artnet. Resumindo são 512 valores (canis) entre 0 e 255. preciso mandar todos os 512 valores para outro arduino via SPI ou outro tipo de  comunicação.

no arduino mestre eu testei enviar um valor (canal 1) e funciona bem.

digitalWrite(ssPin, LOW);
   for (int i = 0; i < 512; i++)
  {       
   SPI.transfer(data[0]);
  }
 digitalWrite(ssPin, HIGH);

como podem ver ele roda 512 vezes mas eu só mandei o canal 1 (data[0])

no arduino slave eu fiz assim:

volatile boolean received_flag; // flag de recebimento de dado

received_flag = false;

int received_data;

void loop () {

if (received_flag){     
      analogWrite(6,received_data);   
    received_flag = false;
  }

}

ISR (SPI_STC_vect) { 
  received_data = SPDR;  
  received_flag = true;
}

isto funciona bem mas agora quero mandar os 512 canais e no slave eu receber estes 512 canais. Não preciso guardar ele pois vou usar em uma saida. Exemplo:

for (int i=0;i<512;i++){

DMXsaida (i,dado recebido do SPI i);

}

cada dmxsaida deve ser igual ao que eu mandei no master.

alguma ideia e como mandar e receber 512 valores int em um arduino uno via SPI ou outra comunicação.

Exibições: 521

Responder esta

Respostas a este tópico

Esta um pouco confuso de entender,  mas acho que você esta querendo enviar um array de dados, é isso ?

Você pode enviar todos os Bytes recebidos do protocolo Artnet para um array de 512 bytes (buffer) 

Depois descarrega o Buffer  no Arduino Slave. 

https://www.arduino.cc/en/Tutorial/SPIEEPROM

https://www.arduino.cc/en/Reference/Array

https://www.arduino.cc/en/Tutorial/Arrays

https://www.arduino.cc/en/Reference/SPITransfer

Boa noite N.

Porque você não utiliza o RS485 entre o "Master" e o slave?

No protocolo DMX512, é "padrão" o uso do  interface RS485.

RV

Vou tentar explicar melhor. Eu ja sei receber um universo artnet (512 canais) e enviar dmx com UNO e ethernet shiled, sem problemas. O que eu quero e receber 4 universos artnet e ter 4 saidas dmx, mas um Uno nao suporta nem um MEGA suporta. Entao quero usar o DUE mas não encontrei nada sobre DUE com saida dmx, e eu nao sei se é possivel o DUE enviar DMX. O artnet para o DUE usa as mesmas bibliotecas do UNO entao esta parte esta OK. Logo tIve a ideia de receber artnet pelo DUE e enviar para 4 UNOs e cada uno seria a saida dmx. Foi a ideia que tive.

Estou tentando entender.

eu coloquei isto no Master.

char canais [512];

digitalWrite (sspin,LOW);

for (int i=0;i<512;i++){canais [i] = data[i]           }  //data[i] são os canais do artnet

digitalWrite (sspin,HIGH);

Esta certo este codigo no master?

se estiver eu não sei receber lá no Slave. dei uma olhada mas to meio perdido.

Boa noite N.

Anexa um arquivo com seu sketch, clicando em "Deseja carregar arquivos? "

Ai fica mais f'ácil de entender a dificuldade.

RV

Bom. acho que esta tudo errado que eu fiz mas vamos lá. kk

Artnet para SPI:  https://pastebin.com/VQ0CUtqW

SPI par DMX: https://pastebin.com/e9bHYR7D

Olhei alguns tutoriais mas me perdi.

Bom dia N.

Fiz avanços no Arduino DUE.

Queira avaliar com vc.

RV

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço