Go Down

Topic: Problemas con pwm y visual basic 2010 (Read 2498 times) previous topic - next topic

JoseUno

Mar 27, 2012, 05:32 pm Last Edit: Mar 27, 2012, 05:38 pm by JoseUno Reason: 1
Hola, tengo una arduino UNO y estoy realizando un programilla en vb 2010 para activar y desactivar salidas etc.., realizé uno que me ponia las distintas salidas en nivel alto y bajo mandando un valor en Chr mediante vb por ejemplo la mandaba 10 y se ponia en estado alto el pin 11 por ejemplo y si le mandaba un 20 lo ponia en estado bajo, hasta ahi todo bien, encendia los leds uno por uno o todos a la vez y perfecto.
El problema viene cuando he intentado controlar una salida pwm de arduino, lo intento con la salida 5 y creo una barra de desplazamiento en vb para poder mandarle los valores de 0 a 255, lo consigo sin muchos problemas, le conecto un led y segun muevo la barra de desplazamiento brilla mas o menos, pero... cuando por ejemplo mando cualquier otro comando ya sea para encender otro led mediante otra salida o lo que sea se me enciende el led que tengo conectado a la salida pwm.
Resumiendo, que cualquier valor que yo le mande en chr mediante visualbasic me repercute en la salida pwm, ya sea si le mando un 300 que si le mando un 500, ¿habria alguna forma de discriminar para que la salida pwm solo acepte un rango en particular y no se me active esa salida cada vez que por ejemplo activo otra salida del arduino? curiosamente solo ocurre con las pwm, pego el codigo del arduino que estoy usando para probar esto.

Code: [Select]
// Usar una salida pwm a traves del puerto serie

int pwm = 5;
int led = 11;                       //Declaramos el Pin 5 como pwm
int SerialValue = 0;              //Declaramos el Pin 11 como pwm
void setup() {
 pinMode(pwm, OUTPUT);            //Indicamos el pin como salida
 pinMode(led, OUTPUT);
 Serial.begin(9600);              //Arrancamos comunicacion serial
 
}
void loop() {
 while (Serial.available()) {
 SerialValue = Serial.read();    
 if (SerialValue > 0){             //le decimos que si los datos del puerto serie son mayor que 0  
 analogWrite(pwm, SerialValue);   //enviamos el dato al pin analogico
 }
 while (Serial.available()) {
 SerialValue = Serial.read();
 if(SerialValue == 300 ){     // si le mandamos el valor 300 se pone en estado alto pin 11
   digitalWrite(led, HIGH);
 }
                           
 
 }
 }
}


En este caso se me enciende el led que tengo conectado al pwm(salida5) al activar la salida 11 la cual tengo otro led conectado.

No se si es que es fallo en los operadores de comparacion o que es lo que ocurre.
Muchas gracias.

Omnicoptero

#1
Mar 27, 2012, 05:58 pm Last Edit: Mar 27, 2012, 06:01 pm by Omnicoptero Reason: 1
la unica forma es que envies y resivas los dos comandos juntos para poder discrminar el dato.

ejemplo: //code arduino

if (Serial.available()>2) {
   
   
   brightness[0] = Serial.read();  // led-5
   brightness[1] = Serial.read(); // control brightness led 11
   
  Serial.flush();  
 }
     analogWrite(pwm, brightness[0] );

if(brightness[1]  == 255 ){     // si le mandamos el valor 300 se pone en estado alto pin 1
   digitalWrite(led, HIGH);
 }
else  digitalWrite(led, LOW);
 



JoseUno

Hola, gracias por la ayuda pero claro al mandar los 2 datos a la vez  se me activarian las dos salidas y eso no me interesa, la gracia esta en por ejemplo dejar a media intensidad el led que va conectado a la salida pwm y encender o apagar el led que esta en la 11 o en cualquier otra salida sin que repercuta en el led del pwm, que eso es lo que me ocurre. Yo entendí tu ejemplo asi, corrigeme si me equivoco.

Es como si  arduino interpretara el valor de 300 como un 160 en la escala de pwm, porque se queda a media intensidad y eso pasa si le mando otros valores tambien, veo que vacias el buffer del serial no se si eso me ayudará, no osbtante seguire probando, gracias por las ideas.

Omnicoptero

USTED PUEDE PONER  DOS BOTONES, UNO PARA EN ENCENER/APAGAR Y OTRO PARA CAMBIER EL BRILLO.
EL CHISTE ES QUE CUANDO hace click EN UNO DE ELLOS MODIFICA EL ESTADO DE UNO DE LOS DATOS Y EL
OTRO DATO COPIA EL ESTADO ANTERIOR o copia el estado el dato de boton 2, POR LO QUE NO AFECTA ESTADO DE SEGUNDO BOTON.ESPERO
HABERME EXPRESDO BIEN.

Quote
Es como si  arduino interpretara el valor de 300


el envio al "el arduino", solo interpreta de 0-255, si usted envia 300, se pasa de la escala volviendo
a un 160 por ejemplo.

para enviar nnumeros> 255, el metodo que se emplea, o por lo menos es la unica forma que encontre
es la descomposicion del numero a enviar en bits, y luego en el arduino se vuelve a componer el numero.

JoseUno

Vale creo que mas o menos lo entendí, voy a intentar ponerlo en practica, otra cosa, si quisiera controlar por ejemplo otra salida pwm al mismo tiempo... ¿como podria hacer para mandar valores de entre 0 y255 pero que no me afecte a la primera pwm? ¿yo podria mandar valores por ejemplo de 300 a 555 y luego decirle a arduino que me los mapee entre 0 y 255 para esa segunda salida pwm? si me pudierais poner algun ejemplo de esto me ayudaria mucho ya que la idea es controlar las distintas salidas cada una independiente, pero bueno ahora a ver si resuelvo lo de antes. Gracias compañero por dedicar tu tiempo y un saludo.

Omnicoptero

lo mismo men. pones un tercer boton, y envias tres datos. copias el el estado de los restantes-para que no te afecte los dos botones

Go Up