Envio de información de Arduino a VB6.0 y de VB6.0 a Arduino


Este post es para entender el funcionamiento de la comunicación de Arduino con Visual Basic 6.0 y viceversa. He realizado un pequeño programa que nos permite la comunicación desde Arduino a Visual Basic 6.0 mediante puerto serie y de Visual Basic 6.0 a Arduino.

Para comprobar la comunicación desde Arduino a Visual Basic 6.0 vamos a controlarla mediante un pulsador conectado al pin 12 de nuestro Arduino y para comprobar el envío desde Visual Basic 6.0 a Arduino disponemos de un led conectado al pin 13.

El programa en Visual Basic 6.0 también es bastante sencillo, cuenta con dos botones, dos labels, un control de puerto serie y un temporazidor (Timer), para realizar cada 20 ms, en este caso, una acción automáticamente. Aquí una imagen de la aplicación:

Aquí tenéis el código hecho en Visual Basic 6.0:

Option Explicit

Dim dato As String 'Variable para guarda el dato recibido por el puerto serie

'Botón de conectar
Private Sub cmdConectar_Click()
Serie.PortOpen = True   'Abrimos el puerto serie
cmdConectar.Enabled = False 'Deshabilitamos botón de conectar
cmdDesconectar.Enabled = True 'Habilitamos botón de conectar
Timer1.Enabled = True 'Habilitar temporizador
End Sub

'Botón de desconectar
Private Sub cmdDesconectar_Click()
Serie.PortOpen = False  'Cerramos el puerto serie
cmdConectar.Enabled = True 'Habilitamos botón de conectar
cmdDesconectar.Enabled = False 'Deshabilitamos botón de desconectar
Timer1.Enabled = False 'Deshabilitamos temporizador
End Sub

'Función que se realiza automáticamente cada 20 ms
Private Sub Timer1_Timer()
dato = Left(Serie.Input, 1) 'Cortamos el dato que nos llega por puerto serie
'para solamente tener un único caracter
pulsador.Caption = dato 'Asigamos ese dato a nuestra label para mostrar el estado
'del pulsador
Serie.Output = pulsador.Caption 'Enviamos al arduino nuestro dato recibido por puerto serie
End Sub

El código arduino es bastante básico pero que sirve perfectamente para entender la comunicación serie entre VB y Arduino:

//Programa de comunicación bilateral Arduino-Visual Basic 6.0
//Mediante un pulsador enviamos información a visual y desde visual
//dependiendo del estado de ese pulsador mandamos una orden a arduino
//para encender un lez o apagarlo.
//Programa realizado por Regata

int boton=12; //pulsador conectado en pin 12
int led=13;   //led conectado en pin 13

void setup()
{
Serial.begin(9600); //Configuración de puerto serie
pinMode(led,OUTPUT); //Indicamos led como salida
//NOTA: no hace falta indicar el pulsador como entrada
}

void loop()
{
Serial.print(digitalRead(boton),DEC); //Enviamos por puerto serie el
//estado del pulsador hacia VB
if (Serial.available())  //Comprobamos si hay datos desde VB hacia Arduino
{
byte dato; //Variable donde guardaremos el dato recibido por puerto serie
dato=Serial.read();  //Guardamos el dato recibido
switch(dato)
{
case '0': //Apagamos el led si recibimos '0' por puerto serie
digitalWrite(led,LOW);
break;
case '1': //Encendemos el led si recibimos '1' por puerto serie
digitalWrite(led,HIGH);
break;
}
}
delay(30);
}

Aquí tenéis el esquema de conexión:

Y por último os dejo un video del funcionamiento:

Si te ha servido de ayuda esta entrada, puedes realizar un donativo para agradecer el tiempo que dedico al blog y ayudar a hacer más entradas.

donativo_paypal

Módulo bluetooth gp-gc021


Me ha llegado a casa un nuevo juguete con el que cacharrear, se trata de un módulo bluetooth GP-GC021 de sure electronics, que compré por ebay a un precio próximo a los 12. Esto me va a servir para poder aprender a comunicar nuestro Arduino o Pinguino PIC mediante bluetooth con cualquier dispositivo que tenga bluetooth, en mi caso lo voy a intentar hacer con mi telefono móvil, un htc desire s que lleva sistema android y que gracias a la appinventor podremos diseñar nuestros programas de control a medida.

Os voy a contar un poco sobre este dispositivo:

Se trata de un módulo bluetooth basado en el chipset BlueCore4-AudioROM. Presenta un chip GL-6B que puede operar con una memoria Flash externa de hasta 8Mbit de 16 bits. Cuando es usado con la pila de software CSR Bluetooth, provee un sistema totalmente compatible con especificación Bluetooth V2.0+EDR para comunicaciones de datos y voz.

Como características principales podemos destacar:

  • 3.3V de voltaje de operación.
  • No necesita componentes externos para su funcionamiento.
  • Interface UART.
  • Bluetooth Spec v2.0+EDR Compliant
  • Enhanced Data Rate (EDR) compliant with V2.0.E.2 of specification for both 2Mbps and
    3Mbps modulation modes.
  • Full Speed Bluetooth Operation with Full Piconet Support.
  • Support for 8Mbit External Flash Onboard.
  • Support for 802.11Co-Existence.

Ahora toca aprender a realizar programas para android con appinventor para poder sacar el máximo jugo a este módulo y poder dotar a mis futuros proyectos de comunicación inalámbrica media bluetooth.

Para practicar con él he realizado en eagle una placa para poder pinchar el módulo en un placa protobard, además de ser más cómoda para realizar los prototipos. Os dejo una imagen del módulo para que veais que pequeñito es y una imagen del fotolito que he realizado, así como el datasheet del módulo y la libreria para eagle del mismo.

Aquí teneís los ficheros (datasheet y libreria para eagle del módulo bluetooth): http://www.mediafire.com/?x3wbuxs89xh1bq0

Si te ha servido de ayuda esta entrada, puedes realizar un donativo para agradecer el tiempo que dedico al blog y ayudar a hacer más entradas.

donativo_paypal

Programador USBtinyISP


Me ha llegado a casa un programador para micros Atmel que me he pillado por ebay a un precio de 8.50€ gastos de envío incluidos. Aunque se trata de un programador de libre distribución he preferido comprarmelo, 1º por que tenía que hacerme una placa yo y comprarme todos los componentes a parte, así que me iba a costar más dinero que si lo comprará directamente, y 2º porque tendría que hacerme los cables para la conexión con la placa arduino o con cualquier placa que vaya a realizar para futuros proyectos que tengo en mente, ya que lo conecto por icsp y listo para programar desde el IDE de Arduino (la programación la explicaré en el próximo post). Os enseño una foto para que veais lo pequeño que es:

Perdonad por la calidad de la foto, en cuanto tenga la cámara conmigo actualizo el post y cambio la imagen para que se vea mejor.

Os voy a comentar un poco sobre el programador:

Es un grabado que permite la grabación de micros Atmel mediante el puerto USB del ordenador, tanto con progamas como AVRdude, AVRStudio o desde el IDE de Arduino.

Presenta las siguientes partes:

  • Un led rojo que es led de Power. El cual se enciende cuando lo conectamos al puerto USB del ordenador.
  • Un led verde que indica que el programador está ocupado.
  • Un jumper que si lo tenemos puesto alimentamos el micro a programar desde el programador usb (la corriente máxima es de 100mA), y si lo tenemos quitado el micro a programar se tiene que alimentar de una fuente externa.
  • Conector USB para comunicar el programador con el ordenador.
  • Conector ICSP: Conector de 6 pines para la grabación del micro. Es el que normalmente se usará.
  • Conector JTAG: Conector de 10 pines para la grabación mediante JTAG.

Y como siempre os dejo el esquema, el software y los drivers para windows del programador usbtinyisp:

http://www.mediafire.com/?hjub4me0165dd7c

Si te ha servido de ayuda esta entrada, puedes realizar un donativo para agradecer el tiempo que dedico al blog y ayudar a hacer más entradas.

donativo_paypal

Sensor infrarrojo TSOP1838 y Arduino


Pensando ideas para poder domotizar la habitación de mi casa, he pensado en hacer un prototipo para controlar las luces (quien dice luces dice cualquier cosa) mediante un mando a distancia que emplea el protocolo NEC, creo que uno de los más extendidos, por lo menos todos los mandos que he encontrado por casa tienen este protocolo. Para ello dispongo en mi taller de un sensor infrarrojo TSOP1838 que me compré por ebay, y los siguientes mandos para probar el circuito, aparte de probar mi nueva prototype shield para el arduino:

Estos mandos los he probado y funcionan los 3 perfecto, el único fallo es con el  más pequeño de todos que algunas teclas no me las reconoce pero el resto funcionan perfectamente, el 1º de ellos es de mi tarjeta de televisión Avermedeia TV203, el 2º es el del TDT que tengo en la tele de la habitación y el último (con el que he realizado el programa) es de un disco duro, que se me estropeo, Iomega Screenplay HD Multimedia.

Os cuento un poco de que trata el protocolo NEC de los mandos a distancia:

  • Longitud de 8 bits de dirección y 8 bits de comando.
  • Tanto la dirección como el comando son envíados dos veces a modo de CRC.
  • La primera vez envía los bits originales y la segunda los mismos pero negados.
  • Los pulsos son por modulación de amplitud.
  • La frecuencia portadora es de 38kHz (detectable por el TSOP1838).
  • La frecuencia de un bit ‘0’ es de 1.12ms y la de un bit ‘1’ es de 2.25ms.
  • En total se transmiten un bit de Start de 9ms+4.5ms=13.5ms mas 32 bits de datos.

Aquí está la conexión del sensor infrarrojo TSOP1838 según su datasheet y el patillaje del mismo (aunque yo solo conecto una resistencia de 470 ohmios que son las que uso para los leds conectada a Vcc y a la patilla 1 del TSOP1838):

Para el programa en Arduino he utilizado la libreria IRremote.h de Ken Shirriff, que simplifica mucho el uso de los mandos a distancia en nuestros programas. Os dejo a continuación un video del funcionamiento del programa así como el código del programa de dos maneras distintas, una empleando sentencias if y otra empleado switch case en su lugar:

Este es el código con sentencias if (ocupa más memoria de programa como se puede ver en la imagen de abajo que con la sentencia switch case):

/*Programa realizado por Regata 04/09/2011*/

/*Programa para control de luces (en este caso leds) mediante un mando con protocolo NEC,
ademas de encender y apagar tambien podemos controlar dos led mediante PWM para ver como
funciona*/

#include <IRremote.h> //Añadimos la libreria para el control del TSOP1838 que usamos

/*En este programa trabajo con el mando del disco duro IOMEGA SCREENPLAY HD MULTIMEDIA
Los datos de los codigos de las teclas de este mando y del mando de AVERMEDIA TV203
estan abajo del programa*/

#define RECV_PIN 12 //indicamos el pin por el que recibimos los datos del sensor TSOP1838
int i;  //Variable para salidas
boolean encendido[8]; //Matriz donde guardamos el estado de las sariables de control de los leds
int brillo1=0;  //Cuanto alumbra el led rojo
int brillo2=0;  //Cuanto alumbra el led verde

//Iniciamos la libreria para el control del sensor TSOP indicando el pin de lectura
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup()
{
//Configuramos comunicacion serie para depuracion y poder ver los codigos de las teclas
Serial.begin(9600);
//Indicamos como salidas los pines del 2 al 9
for(i=2;i<12;i++)
{
pinMode(i,OUTPUT);
}
for(i=0;i<8;i++)
{
encendido[i]=0;
}
irrecv.enableIRIn(); // Iniciamos la recepcion
}

void loop()
{
//Si tenemos datos de lectura debido a que se pulsa una tecla en el mando
if (irrecv.decode(&results))
{
//Mostramos por puerte serie dicho codigo en Hexadecimal(para depuracion)
Serial.print("Codigo: 0x") ;
Serial.println(results.value,HEX) ;
//Comprobamos si es la TECLA 1
if(results.value==0x2FC827D)
{
//Comprobamos si esta encendido el led, si lo esta lo apagamos
if(encendido[0]==1)
{
digitalWrite(2,LOW);
encendido[0]=0;
}
//si no, lo encendemos
else
{
digitalWrite(2,HIGH);
encendido[0]=1;
}
}
//Comprobamos si es la TECLA 2
if(results.value==0x2FCB24D)
{
//Comprobamos si esta encendido el led, si lo esta lo apagamos
if(encendido[1]==1)
{
digitalWrite(3,LOW);
encendido[1]=0;
}
//si no, lo encendemos
else
{
digitalWrite(3,HIGH);
encendido[1]=1;
}
}
//Comprobamos si es la TECLA 3
if(results.value==0x2FCA25D)
{
//Comprobamos si esta encendido el led, si lo esta lo apagamos
if(encendido[2]==1)
{
digitalWrite(4,LOW);
encendido[2]=0;
}
//si no, lo encendemos
else
{
digitalWrite(4,HIGH);
encendido[2]=1;
}
}
//Comprobamos si es la TECLA 4
if(results.value==0x2FC42BD)
{
//Comprobamos si esta encendido el led, si lo esta lo apagamos
if(encendido[3]==1)
{
digitalWrite(5,LOW);
encendido[3]=0;
}
//si no, lo encendemos
else
{
digitalWrite(5,HIGH);
encendido[3]=1;
}
}
//Comprobamos si es la TECLA 5
if(results.value==0x2FC728D)
{
//Comprobamos si esta encendido el led, si lo esta lo apagamos
if(encendido[4]==1)
{
digitalWrite(6,LOW);
encendido[4]=0;
}
//si no, lo encendemos
else
{
digitalWrite(6,HIGH);
encendido[4]=1;
}
}
//Comprobamos si es la TECLA 6
if(results.value==0x2FC629D)
{
//Comprobamos si esta encendido el led, si lo esta lo apagamos
if(encendido[5]==1)
{
digitalWrite(7,LOW);
encendido[5]=0;
}
//si no, lo encendemos
else
{
digitalWrite(7,HIGH);
encendido[5]=1;
}
}
//Comprobamos si es la TECLA 7
if(results.value==0x2FCC23D)
{
//Comprobamos si esta encendido el led, si lo esta lo apagamos
if(encendido[6]==1)
{
digitalWrite(8,LOW);
encendido[6]=0;
}
//si no, lo encendemos
else
{
digitalWrite(8,HIGH);
encendido[6]=1;
}
}
//Comprobamos si es la TECLA 8
if(results.value==0x2FCF20D)
{
//Comprobamos si esta encendido el led, si lo esta lo apagamos
if(encendido[7]==1)
{
digitalWrite(9,LOW);
encendido[7]=0;
}
//si no, lo encendemos
else
{
digitalWrite(9,HIGH);
encendido[7]=1;
}
}
//Comprobamos si es la TECLA STOP
if(results.value==0x2FC20DF)
{
//Apagamos todos los leds
for(i=2;i<12;i++)
{
digitalWrite(i,LOW);
if(i<10) //Comprobamos el limite de los leds de la barra de leds
//y ponemos a 0 la variable de control de cada led
{
encendido[i-2]=0;
}
brillo1=0;
brillo2=0;
}
}
//Comprobamos si es la TECLA PLAY
if(results.value==0x2FCE817)
{
//Encendemos todos los leds
for(i=2;i<12;i++)
{
digitalWrite(i,HIGH);
if(i<10) //Comprobamos el limite de los leds de la barra de leds
//y ponemos a 1 la variable de control de cada led
{
encendido[i-2]=1;
}
brillo1=255;
brillo2=255;
}
}
//Comprobamos si es la tecla VOL+, aumentamos el brillo del led rojo
if(results.value==0x2FCB04F)
{
//Si el brillo es menor de 255 aumentamos 1 paso de 5 su brillo
if(brillo1<255)
{
brillo1=brillo1+51;
analogWrite(10,brillo1);
}
}
//Comprobamos si es la tecla VOL-, disminuimos el brillo del led rojo
if(results.value==0x2FCC837)
{
//Si el brillo es mayor de 0 disminuimos 1 paso de 5 su brillo
if(brillo1>0)
{
brillo1=brillo1-51;
analogWrite(10,brillo1);
}
}
//Comprobamos si es la tecla >>, aumentamos el brillo del led verde
if(results.value==0x2FC28D7)
{
//Si el brillo es menor de 255 aumentamos 1 paso de 5 su brillo
if(brillo2<255)
{
brillo2=brillo2+51;
analogWrite(11,brillo2);
}
}
//Comprobamos si es la tecla <<, disminuimos el brillo del led rojo
if(results.value==0x2FC38C7)
{
//Si el brillo es mayor de 0 disminuimos 1 paso de 5 su brillo
if(brillo2>0)
{
brillo2=brillo2-51;
analogWrite(11,brillo2);
}
}
delay(50); //retardo de 250 ms para evitar que el codigo se lea dos veces en una pulsacion
irrecv.resume(); // Recibimos el siguiente valor del sensor
}
}

/*Datos Mando IOMEGA SCREENPLAY HD MULTIMEDIA

TECLA 1 Codigo: 0x2FC827D
TECLA 2 Codigo: 0x2FCB24D
TECLA 3 Codigo: 0x2FCA25D
TECLA 4 Codigo: 0x2FC42BD
TECLA 5 Codigo: 0x2FC728D
TECLA 6 Codigo: 0x2FC629D
TECLA 7 Codigo: 0x2FCC23D
TECLA 8 Codigo: 0x2FCF20D
TECLA 9 Codigo: 0x2FCE21D
TECLA 0 Codigo: 0x2FC18E7
TECLA VOL+ Codigo: 0x2FCB04F
TECLA VOL- Codigo: 0x2FCC837
TECLA SETUP Codigo: 0x2FC12ED
TECLA MENU Codigo: 0x2FC6897
TECLA << Codigo: 0x2FC38C7
TECLA >> Codigo: 0x2FC28D7
TECLA AUDIO Codigo: 0x2FC926D
TECLA ANGLE Codigo: 0x2FC52AD
TECLA SUBTITLE Codigo: 0x2FCD22D
TECLA FLECHA ARRIBA Codigo: 0x2FC807F
TECLA FLECHA IZQUIERDA Codigo: 0x2FC9867
TECLA FLECHA ABAJO Codigo: 0x2FC906F
TECLA PLAY Codigo: 0x2FCE817
TECLA DISPLAY Codigo: 0x2FCD827
TECLA SEARCH Codigo: 0x2FCD02F
TECLA STOP  Codigo: 0x2FC20DF
TECLA PAUSE Codigo: 0x2FCE01F
TECLA A-B Codigo: 0x2FC40BF
TECLA REPEAT Codigo: 0x2FCC03F
TECLA SLOW Codigo: 0x2FC50AF

TECLAS QUE NO ENVIAN NINGUN CODIGO:

TECLA POWER, TECLA TITEL, TECLA |<<, TECLA >>|, TECLA FLECHA DERECHA, TECLA SLOW
*/

/*Datos mando AVERMEDIA TV203

TECLA TV/FM Codigo: 0x40BF807F
TECLA CD Codigo: 0x40BF40BF
TECLA TELETEXT Codigo: 0x40BFC03F
TECLA  POWER Codigo: 0x40BF00FF
TECLA 1 Codigo: 0x40BFA05F
TECLA 2 Codigo: 0x40BF609F
TECLA 3 Codigo: 0x40BFE01F
TECLA 4 Codigo: 0x40BF906F
TECLA 5 Codigo: 0x40BF50AF
TECLA 6 Codigo: 0x40BFD02F
TECLA 7 Codigo: 0x40BFB04F
TECLA 8 Codigo: 0x40BF708F
TECLA 9 Codigo: 0x40BFF00F
TECLA 0 Codigo: 0x40BF8877
TECLA VIDEO Codigo: 0x40BF20DF
TECLA AUDIO Codigo: 0x40BF10EF
TECLA FULL SCREEN Codigo: 0x40BF30CF
TECLA DISPLAY Codigo: 0x40BF48B7
TECLA LOOP Codigo: 0x40BFC837
TECLA PREVIEW Codigo: 0x40BF08F7
TECLA AUTOSCAN Codigo: 0x40BFA857
TECLA FREEZE Codigo: 0x40BF6897
TECLA CAPTURE Codigo: 0x40BFE817
TECLA MUTE Codigo: 0x40BF28D7
TECLA RECORD Codigo: 0x40BF9867
TECLA PAUSE Codigo: 0x40BF58A7
TECLA STOP Codigo: 0x40BFD827
TECLA PLAY Codigo: 0x40BF18E7
TECLA CIRCULO ROJO Codigo: 0x40BFB847
TECLA VOL- Codigo: 0x40BF7887
TECLA VOL+ Codigo: 0x40BFF807
TECLA CIRCULO AMARILLO Codigo: 0x40BF38C7
TECLA CIRCULO VERDE Codigo: 0xC03F807F
TECLA CHANNEL- Codigo: 0xC03F40BF
TECLA CHANNEL+ Codigo: 0xC03FC03F
TECLA CIRCULO AZUL Codigo: 0xC03F00FF

EN ESTE MANDO SE VISUALIZAN TODOS LOS CODIGOS DE LAS TECLAS
*/

Aquí está el código con la sentencia switch case en lugar de con las sentencias if:

/*Programa realizado por Regata 04/09/2011*/

/*Programa para control de luces (en este caso leds) mediante un mando con protocolo NEC,
ademas de encender y apagar tambien podemos controlar dos led mediante PWM para ver como
funciona*/

#include <IRremote.h> //Añadimos la libreria para el control del TSOP1838 que usamos

/*En este programa trabajo con el mando del disco duro IOMEGA SCREENPLAY HD MULTIMEDIA
Los datos de los codigos de las teclas de este mando y del mando de AVERMEDIA TV203
estan abajo del programa*/

#define RECV_PIN 12 //indicamos el pin por el que recibimos los datos del sensor TSOP1838
int i;  //Variable para salidas
boolean encendido[8]; //Matriz donde guardamos el estado de las sariables de control de los leds
int brillo1=0;  //Cuanto alumbra el led rojo
int brillo2=0;  //Cuanto alumbra el led verde

//Iniciamos la libreria para el control del sensor TSOP indicando el pin de lectura
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup()
{
//Configuramos comunicacion serie para depuracion y poder ver los codigos de las teclas
Serial.begin(9600);
//Indicamos como salidas los pines del 2 al 9
for(i=2;i<12;i++)
{
pinMode(i,OUTPUT);
}
for(i=0;i<8;i++)
{
encendido[i]=0;
}
irrecv.enableIRIn(); // Iniciamos la recepcion
}

void loop()
{
//Si tenemos datos de lectura debido a que se pulsa una tecla en el mando
if (irrecv.decode(&results))
{
//Mostramos por puerte serie dicho codigo en Hexadecimal(para depuracion)
Serial.print("Codigo: 0x") ;
Serial.println(results.value,HEX) ;
//Comprobamos si es la TECLA 1
switch(results.value)
{
case 0x2FC827D: //Comprobamos si es la TECLA 1
//Comprobamos si esta encendido el led, si lo esta lo apagamos
if(encendido[0]==1)
{
digitalWrite(2,LOW);
encendido[0]=0;
}
//si no, lo encendemos
else
{
digitalWrite(2,HIGH);
encendido[0]=1;
}
break;
case 0x2FCB24D: //Comprobamos si es la TECLA 2
//Comprobamos si esta encendido el led, si lo esta lo apagamos
if(encendido[1]==1)
{
digitalWrite(3,LOW);
encendido[1]=0;
}
//si no, lo encendemos
else
{
digitalWrite(3,HIGH);
encendido[1]=1;
}
break;
case 0x2FCA25D: //Comprobamos si es la TECLA 3
//Comprobamos si esta encendido el led, si lo esta lo apagamos
if(encendido[2]==1)
{
digitalWrite(4,LOW);
encendido[2]=0;
}
//si no, lo encendemos
else
{
digitalWrite(4,HIGH);
encendido[2]=1;
}
break;
case 0x2FC42BD: //Comprobamos si es la TECLA 4
//Comprobamos si esta encendido el led, si lo esta lo apagamos
if(encendido[3]==1)
{
digitalWrite(5,LOW);
encendido[3]=0;
}
//si no, lo encendemos
else
{
digitalWrite(5,HIGH);
encendido[3]=1;
}
break;
case 0x2FC728D: //Comprobamos si es la TECLA 5
//Comprobamos si esta encendido el led, si lo esta lo apagamos
if(encendido[4]==1)
{
digitalWrite(6,LOW);
encendido[4]=0;
}
//si no, lo encendemos
else
{
digitalWrite(6,HIGH);
encendido[4]=1;
}
break;
case 0x2FC629D: //Comprobamos si es la TECLA 6
//Comprobamos si esta encendido el led, si lo esta lo apagamos
if(encendido[5]==1)
{
digitalWrite(7,LOW);
encendido[5]=0;
}
//si no, lo encendemos
else
{
digitalWrite(7,HIGH);
encendido[5]=1;
}
break;
case 0x2FCC23D: //Comprobamos si es la TECLA 7
//Comprobamos si esta encendido el led, si lo esta lo apagamos
if(encendido[6]==1)
{
digitalWrite(8,LOW);
encendido[6]=0;
}
//si no, lo encendemos
else
{
digitalWrite(8,HIGH);
encendido[6]=1;
}
break;
case 0x2FCF20D: //Comprobamos si es la TECLA 8
//Comprobamos si esta encendido el led, si lo esta lo apagamos
if(encendido[7]==1)
{
digitalWrite(9,LOW);
encendido[7]=0;
}
//si no, lo encendemos
else
{
digitalWrite(9,HIGH);
encendido[7]=1;
}
break;
case 0x2FC20DF: //Comprobamos si es la TECLA STOP
//Apagamos todos los leds
for(i=2;i<12;i++)
{
digitalWrite(i,LOW);
if(i<10) //Comprobamos el limite de los leds de la barra de leds
//y ponemos a 0 la variable de control de cada led
{
encendido[i-2]=0;
}
brillo1=0;
brillo2=0;
}
break;
case 0x2FCE817: //Comprobamos si es la TECLA PLAY
//Encendemos todos los leds
for(i=2;i<12;i++)
{
digitalWrite(i,HIGH);
if(i<10) //Comprobamos el limite de los leds de la barra de leds
//y ponemos a 1 la variable de control de cada led
{
encendido[i-2]=1;
}
brillo1=255;
brillo2=255;
}
break;
case 0x2FCB04F: //Comprobamos si es la tecla VOL+, aumentamos el brillo del led rojo
//Si el brillo es menor de 255 aumentamos 1 paso de 5 su brillo
if(brillo1<255)
{
brillo1=brillo1+51;
analogWrite(10,brillo1);
}
break;
case 0x2FCC837: //Comprobamos si es la tecla VOL-, disminuimos el brillo del led rojo
//Si el brillo es mayor de 0 disminuimos 1 paso de 5 su brillo
if(brillo1>0)
{
brillo1=brillo1-51;
analogWrite(10,brillo1);
}
break;
case 0x2FC28D7: //Comprobamos si es la tecla >>, aumentamos el brillo del led verde
//Si el brillo es menor de 255 aumentamos 1 paso de 5 su brillo
if(brillo2<255)
{
brillo2=brillo2+51;
analogWrite(11,brillo2);
}
break;
case 0x2FC38C7: //Comprobamos si es la tecla <<, disminuimos el brillo del led rojo
//Si el brillo es mayor de 0 disminuimos 1 paso de 5 su brillo
if(brillo2>0)
{
brillo2=brillo2-51;
analogWrite(11,brillo2);
}
break;
}
delay(50); //retardo de 250 ms para evitar que el codigo se lea dos veces en una pulsacion
irrecv.resume(); // Recibimos el siguiente valor del sensor
}
}

/*Datos Mando IOMEGA SCREENPLAY HD MULTIMEDIA

TECLA 1 Codigo: 0x2FC827D
TECLA 2 Codigo: 0x2FCB24D
TECLA 3 Codigo: 0x2FCA25D
TECLA 4 Codigo: 0x2FC42BD
TECLA 5 Codigo: 0x2FC728D
TECLA 6 Codigo: 0x2FC629D
TECLA 7 Codigo: 0x2FCC23D
TECLA 8 Codigo: 0x2FCF20D
TECLA 9 Codigo: 0x2FCE21D
TECLA 0 Codigo: 0x2FC18E7
TECLA VOL+ Codigo: 0x2FCB04F
TECLA VOL- Codigo: 0x2FCC837
TECLA SETUP Codigo: 0x2FC12ED
TECLA MENU Codigo: 0x2FC6897
TECLA << Codigo: 0x2FC38C7
TECLA >> Codigo: 0x2FC28D7
TECLA AUDIO Codigo: 0x2FC926D
TECLA ANGLE Codigo: 0x2FC52AD
TECLA SUBTITLE Codigo: 0x2FCD22D
TECLA FLECHA ARRIBA Codigo: 0x2FC807F
TECLA FLECHA IZQUIERDA Codigo: 0x2FC9867
TECLA FLECHA ABAJO Codigo: 0x2FC906F
TECLA PLAY Codigo: 0x2FCE817
TECLA DISPLAY Codigo: 0x2FCD827
TECLA SEARCH Codigo: 0x2FCD02F
TECLA STOP  Codigo: 0x2FC20DF
TECLA PAUSE Codigo: 0x2FCE01F
TECLA A-B Codigo: 0x2FC40BF
TECLA REPEAT Codigo: 0x2FCC03F
TECLA SLOW Codigo: 0x2FC50AF

TECLAS QUE NO ENVIAN NINGUN CODIGO:

TECLA POWER, TECLA TITEL, TECLA |<<, TECLA >>|, TECLA FLECHA DERECHA, TECLA SLOW
*/

/*Datos mando AVERMEDIA TV203

TECLA TV/FM Codigo: 0x40BF807F
TECLA CD Codigo: 0x40BF40BF
TECLA TELETEXT Codigo: 0x40BFC03F
TECLA  POWER Codigo: 0x40BF00FF
TECLA 1 Codigo: 0x40BFA05F
TECLA 2 Codigo: 0x40BF609F
TECLA 3 Codigo: 0x40BFE01F
TECLA 4 Codigo: 0x40BF906F
TECLA 5 Codigo: 0x40BF50AF
TECLA 6 Codigo: 0x40BFD02F
TECLA 7 Codigo: 0x40BFB04F
TECLA 8 Codigo: 0x40BF708F
TECLA 9 Codigo: 0x40BFF00F
TECLA 0 Codigo: 0x40BF8877
TECLA VIDEO Codigo: 0x40BF20DF
TECLA AUDIO Codigo: 0x40BF10EF
TECLA FULL SCREEN Codigo: 0x40BF30CF
TECLA DISPLAY Codigo: 0x40BF48B7
TECLA LOOP Codigo: 0x40BFC837
TECLA PREVIEW Codigo: 0x40BF08F7
TECLA AUTOSCAN Codigo: 0x40BFA857
TECLA FREEZE Codigo: 0x40BF6897
TECLA CAPTURE Codigo: 0x40BFE817
TECLA MUTE Codigo: 0x40BF28D7
TECLA RECORD Codigo: 0x40BF9867
TECLA PAUSE Codigo: 0x40BF58A7
TECLA STOP Codigo: 0x40BFD827
TECLA PLAY Codigo: 0x40BF18E7
TECLA CIRCULO ROJO Codigo: 0x40BFB847
TECLA VOL- Codigo: 0x40BF7887
TECLA VOL+ Codigo: 0x40BFF807
TECLA CIRCULO AMARILLO Codigo: 0x40BF38C7
TECLA CIRCULO VERDE Codigo: 0xC03F807F
TECLA CHANNEL- Codigo: 0xC03F40BF
TECLA CHANNEL+ Codigo: 0xC03FC03F
TECLA CIRCULO AZUL Codigo: 0xC03F00FF

EN ESTE MANDO SE VISUALIZAN TODOS LOS CODIGOS DE LAS TECLAS
*/

Espero que os sirva de ayuda para vuestros proyectos.

Si te ha servido de ayuda esta entrada, puedes realizar un donativo para agradecer el tiempo que dedico al blog y ayudar a hacer más entradas.

donativo_paypal

Acordeón Arduino Cheat Sheet


Navegando por estos mundos de internet me he topado con una traducción y modificación de la Arduino Cheat Sheet, se trata de Acordeón Arduino. A mí me parece que está mejor explicada que la original y que también es mucho mejor para aquellos que no dominen bien el inglés. Espero que os sirva para empezar en vuestros proyectos con Arduino.

Os dejo el enlace para que la podáis descargar tanto en formato pdf como en svg y png:

http://www.mediafire.com/?20h35xy933oxzku

Si te ha servido de ayuda esta entrada, puedes realizar un donativo para agradecer el tiempo que dedico al blog y ayudar a hacer más entradas.

donativo_paypal

Arduino en particular Electrónica en general

A %d blogueros les gusta esto: