Autor Tema: control remoto ir  (Leído 2089 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado monge_22

  • PIC10
  • *
  • Mensajes: 17
control remoto ir
« en: 05 de Abril de 2006, 10:04:00 »
Hola buenas estoy haciendo un proyecto que controla un step motor y consta de dos partes.
Una de las partes es controlar el motor con un ordenador esta parte ya la tengo casi terminada solo me quedan unos pequeyos retoques.
La segunda que es con la que ahora estoy empezando es el control del step motor un un mando a distancia.
Tengo un mando a distancia Philips rc5991 del cual solo uso tres botones:
- encender y las teclas del volumen que son para girar hacia la izquierda y hacia la derecha. He buscado por internet y el codigo que he encontrado para el control de las teclas del volumen esta en la siguiente pagina:

http://www.xs4all.nl/~sbp/knowledge/ir/rc5.htm

donde por ejemplo tengo del bit1 al bit14 la siguiente secuencia para el volumen +

110 00000 010000

y para el volumen menos

110 00000 010001

Hasta aqui creo que lo interpreto bien.

Ahora me he mirado la pagina de nocturno66 y he cogido solo la parte del del programa del dimer que creo que me vale, xo yo no quiero memorizar la tecla porque supuestamente siempre voy a usar la misma y se el codigo.

Mi pregunta es de que forma tengo que me morizar la variable volumen + y volumen -, para ello tengo declarado long izqalta y long izqbaja(esto por ejemplo es para el volumen +)


#include <16f877A.h>
#use delay(4000000)
#use fast_io(A)

#bit MANDO = PORTA.0

long izqalta = ???;
long izqbaja = ???;
long decalta = ???;
long decbaja = ???;
long lectura1, lectura2, antirrebotes;
int recibiendo, pasos, par;



void teclapulsada()
{
   if(lectura1 == izqalta & lectura2 == izqbaja)
   {
      movimientodelmotoraizqdas;
   }
   else if(lectura1 == deralta & lectura2 == derbaja)
   {
      movimientodelmotoraderecha;
   }

#INT_TIMER0

void temp()
{
   set_timer0(86);
   //circuito antirrebotes:

   if(!recibiendo)
      if(antirrebotes<2000)
         antirrebotes++;
   if(MANDO == 0 & !recibiendo) // Aqui estamos detectando una pulsacion de la tecla
   {   
      recibiendo = 1;
      pasos = 0;
   };
   if(recibiendo == 1 & (par%8)== 0)
   {
      if(pasos < 16)
         lectura1 = lectura1*2 + MANDO;
      else
         lectura2 = lectura2*2 + MANDO;
      pasos = pasos + 1;
      if(pasos == 32)
      {
         //si no hay ruido continuamos
         if (lectura1 != 0XEFFF & lectura2 != 0xFFFF)&(lectura1 !=0 & lectura2 != 0)
         {
            teclapulsada();
         }
      recibiendo = 2;
      lectura1 = 0;
      lectura2 = 0;
      pasos = 0;
      antirrebotes = 0;
      }
   };
   if (recibiendo > 1 & (par%8)==0)
   {
      recibiendo ++;
      if(recibiendo >= 4)
         recibiendo = 0;
   };
   par++
}
void main()
{
   set_tris_A(0b00011000);
   OPTIONREG=OPTIONREG & 0x7F;      // activa las pullups internas
   setup_timer_0(RTCC_INTERNAL | RTCC_DIV_2);
   enable_interrupts(INT_TIMER0);
   enable_interrupts(INT_EXT);
   enable_interrupts(GLOBAL);
   set_timer0(86);
   while(1);
 }

Un saludo a todos


Desconectado zerovlc

  • PIC10
  • *
  • Mensajes: 28
Re: control remoto ir
« Respuesta #1 en: 15 de Septiembre de 2011, 07:25:50 »
no se si he entendido bien tu problema, pero he entendido que lo que quieres es asignar a tus variables :

long izqalta = ???;
long izqbaja = ???;
long decalta = ???;
long decbaja = ???;

unos valores constantes, yo lo haria de la siguiente forma despues de estas lineas de codigo

#include <16f877A.h>
#use delay(4000000)
#use fast_io(A)

coloca la siguiente instruccion #define izqalta 0b(secuencia en binario 8 bits) sin el parentesis de manera que te quede asi:
#include <16f877A.h>
#use delay(4000000)
#use fast_io(A)
#define izqalta 0b00110000 //parte alta del volumen+
#define izqbaja 0b00010000 // parte baja del volumen +
#define decalta 0b00110000 //parte alta del volumen-
#define decbaja 0b00010001 // parte baja del volumen -

supongo que con esto te servira asi cuando nombres izqalta ya te asignara el valor binario 00110000