LED 100w Controle por biblioteca ArdOSC e Encoder Rotativo incremental.

Pessoal, fiz um código usando a biblioteca ArdOSC, um Ethernet Shield, Arduino Uno, e um Encoder.

O código me da controle do brilho do led tanto pelo iPhone(app TouchOSC) quanto pelo encoder ligado ao Arduino. Com tela do fader aberta, recebo informação de quando o encoder gira e o estado atual do led, e posso alterar pelo celular tbm o brilho.

Preciso de uma ajuda, quem já usou Power LED de 100w? quero usar com meu projeto, com meu código, mas não sei por onde começar.

Sei que trabalham em voltagem de uns 30v e precisam de um módulo e tal... como faz as ligações ?
Segue meu código... se souberem algo para melhorar ele, aceito dicas tbm!

<code>

#include <SPI.h>
#include <Ethernet.h>
#include <ArdOSC.h> //inclui blibioteca ArdOSC

byte myMac[]={0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; //define MAC para shield Ethernet
byte myIp[] = { 192, 168, 1, 177 }; //define IP da central automação
byte destIp[] = { 192, 168, 1, 101 }; // define qual dispositivo mobile controla
int serverPort = 8000; //define a porta de recepção do comando OSC
int destPort= 9000; //define a porta de envio do comando OSC
int ledPin = 5; //define a porta do arduino associada ao led
int flag = 0; //variavel para valor dos argumentos OSC
const int encoderPinA = 2; // encoder input channel A
const int encoderPinB = 3; // encoder input channel B
int previousState = 0;
int value = 0;
const int stepSize = 5; //meu encoder eh de 24 pulsos por volta, a resolução é muito baixa! esse valor ajuda com mais incremento por pulso

OSCServer server; //inicializa o servidor OSC (serviço que trata a recepção de mensagem OSC)
OSCClient client; //inicializa o cliente OSC (serviço que trata o envio de mensagem OSC)

void setup(){
Ethernet.begin(myMac ,myIp); //inicializa a interface ethernet
server.begin(serverPort); //inicializa o servidor OSC definindo a porta de RX
//set callback function & oscaddress
server.addCallback("/ard/ledPin",&func1); //define que a rotina "func1" será executada para o comando OSC "/ard/ledPin"
Serial.begin(19200);
pinMode(ledPin, OUTPUT); //define a porta digital 5 (ledPin) do Arduino como saida
pinMode( encoderPinA , INPUT_PULLUP );
pinMode( encoderPinB , INPUT_PULLUP );
}


/*encoder tem 3 pinos: A,B,GND

Pelo A e pelo B é que sabe a posiçao atual e para qual sentido ele girou
Tanto A qnt B te dão o um valor de 0 e 1

Exemplo:
A | B | Leitura
1 | 1 | 3
1 | 0 | 2
0 | 1 | 1
0 | 0 | 0

Logo podemos programar para:
Se o estado anterior era 11, e agora é 10. Quer dizer que o encoder girou no sentido horário
Ou simplesmente
Se o estado anterior era 11, e agora é 10. Incremente em +1 a varialvel Y*/


void loop(){
if(server.aviableCheck()>0){ //verifica se existe alguma mensagem OSC disponível para leitura
// Serial.println("alive! ");
}
uint8_t currentState = ( digitalRead( encoderPinA ) 0 ) | ( digitalRead( encoderPinB ) 1 );
if (
( ( previousState == 3 ) & ( currentState == 2 ) ) |
( ( previousState == 2 ) & ( currentState == 0 ) ) |
( ( previousState == 0 ) & ( currentState == 1 ) ) |
( ( previousState == 1 ) & ( currentState == 3 ) ) ) {
if ( value <= ( 255 - stepSize ) ) {
value += stepSize;
}
}
else if (
( ( previousState == 1 ) & ( currentState == 0 ) ) |
( ( previousState == 0 ) & ( currentState == 2 ) ) |
( ( previousState == 2 ) & ( currentState == 3 ) ) |
( ( previousState == 3 ) & ( currentState == 1 ) ) ) {
if ( value >= stepSize ) {
value -= stepSize;
}
}

if ( previousState != currentState ) { //sempre que altera a posiçao...
analogWrite( ledPin , value ); //...deve mudar o valor pwm do ledPin...
previousState = currentState; //...e atualizar o estado atual para anterior, ficando pronto para proximas leituras...
OSCMessage txMes; //cria uma nova menssagem OSC
//setar destino d mensagem, ip e desport
txMes.setAddress( destIp ,destPort); //define o endereço e porta do destino da mensagem OSC
txMes.beginMessage("/ard/ledPin"); //define comando OSC
txMes.addArgFloat(value); //define no estado do led que será enviado no argumento OSC para ANDROID/iOS
client.send(&txMes); //envia mensagem OSC para atualizar novo estado do led 1 no ANDROID/iOS
}
}

void func1(OSCMessage *_mes){ //rotina que trata comando OSC "/ard/ledPin" recebido do ANDROID/iOS
int value=(int)_mes->getArgFloat(0); //armazena em "value" o argumento do comando OSC "/ard/ledPin"
analogWrite(ledPin, value); //muda estado da porta digital 5 (ledPin) conforme argumento OSC recebido
OSCMessage txMes; //cria uma nova menssagem OSC
//setar destino d mensagem, ip e desport
txMes.setAddress(destIp,destPort); //define o endereço e porta do destino da mensagem OSC
txMes.beginMessage("/ard/ledPin"); //define comando OSC
txMes.addArgFloat(flag); //define no estado do led que será enviado no argumento OSC para ANDROID/iOS
flag = value;
client.send(&txMes); //envia mensagem OSC para atualizar novo estado do led 1 no ANDROID/iOS
}

<code>

o layout do TouchOSC foi feito bem simples.

Acho que é meu primeiro tópico no forum... desculpa qlqr coisa!

CONFERIR_Aut_ArdOsc_2014_07_29_a.ino

Exibições: 1165

Responder esta

Respostas a este tópico

Up

Bom dia Lucas,

Cara vê se voce consegue me tirar uma duvida.

int serverPort = 8000; //define a porta de recepção do comando OSC
int destPort= 9000; //define a porta de envio do comando OSC

Existem duas portas uma pra uma pra enviar comandos do OSC para o arduino (quando ocorre acende uma luz VERDE no software) e outra porta para receber dados do arduino no software (quando ocorre acende uma luz VERMELHA no software).

Sabe me dizer como faço pra receber uma informação do arduino?
Como seria um código para isso?

Muito obrigado!!!

Vou testar hj chegando em casa!

Valeu pela postagem, ajuda em meu andamento

mil desculpas... to tanto tempo longe do projeto q preciso estudar novamente... ahuahuahua na vdd abandonei, agora arrumei um tempinho e tive q vir ateh o forum para olha-lo novamente... 

espero q tenha obtido sucesso!

Seu projeto e interessante talvez os nossos amigos que faz parte dessa comunidade, que tenha mais experiência no assunto possa ajudar nesse desafio meio que complicado.. vou da uma estudar sobre o assunto, vou fica na disposição pra te ajudar nesse desafio.. 

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço