Go Down

Topic: COMO GUARDAR SEÑALES EN UNA VARIABLE (Read 2363 times) previous topic - next topic

pincho41700

Hola a todos,
tengo que inyectar una señal a un pin de arduino y guerdarla en una variable como por ejemplo uint32_t senal.
como lo podria hacer?
agradeceria los consejos o algun programilla,
muchas gracias de antemano
un saludo

luisilva

¿Pero, que tipo de señal es? ¿Es una señal analógica y variable que tienes que crear?

pincho41700

gracias luisilva por contestar.
la señal es digital
lo que quiero hacer es recibir datos de un mando a distancia y guardarla en una variable y atraves de ella hacer lo que se quiera desde arduino.
como se podria hacer?
un saludo.

surbyte

Es como que quieres guardar los datos raw de un comando IR. Hay muchos ejemplos de eso.
Basicamente define un vector de mamaño apropiado y guarda en secuencia el comando recibido y luego lo puedes ejecutar en el mismo orden.
Esa es una opción.
La segunda opción algo mas inteligente es una variante mejor, es usar un puntero del mismo tipo que el vector anterior.
En principio son lo mismo, solo que la versión puntero usa la memoria justa y la versión vector puede desaprovechar memoria pero esto si hablas de muchos comandos y estas justo de recursos.
Busca ejemplos IR, hay varios en este foro.

pincho41700

gracias surbyte por contestar
he encontrado un codigo y no lo entiendo , a ver si me podrias ayudar

solo quiero saber la funcion  void inputPin()
no entiendo esta linea
value<<=1;
      value|=0;
      ++pos;

(<<=); esto que significa no encuentro por ningun lado esto.


//CONTROL REMOTO IR


#define TRAIN_LENGTH 32
#define LOW_LIMIT 600
#define HIGH_LIMIT 1800
#define INIT_LIMIT 4000
#define IN 2
#define LED 13

long start,delta=0;
uint32_t value;
int pos=0;
boolean has_value=false;
unsigned int key[10];

void inputPin()
{
  noInterrupts();
  if(has_value)return;
  if(digitalRead(IN)==HIGH)
  {
    start=micros();
  }
  else
  {
    delta=micros()-start;
    if(delta<LOW_LIMIT)
    {
      value<<=1;
      value|=0;
      ++pos;
    }
    else if(delta<HIGH_LIMIT)
    {
      value<<=1;
      value|=0;
      ++pos;
    }
    else if(delta>INIT_LIMIT)
    {
      value=0;
      pos=0;
    }
    if(pos==TRAIN_LENGTH)
    {
      has_value=true;
    }
   
  }
  interrupts();
}

void setup(){
  key[0]=0x9768;
  key[1]=0xCF30;
  key[2]=0xE718;
  key[3]=0x857A;
  key[4]=0xEF10;
  key[5]=0xC738;
  key[6]=0xA55A;
  key[7]=0xBD42;
  key[8]=0xB54A;
  key[9]=0xAD52;
 
  Serial.begin(115200);
  pinMode(IN,INPUT);
  pinMode(LED,OUTPUT);
  digitalWrite(LED,LOW);
 
  attachInterrupt(0,inputPin,CHANGE);
 
}

void loop(){

  int i;
  if(has_value)
  {
    Serial.print("V: ");
    Serial.println(value & 0x0000FFFF,HEX);
    i=0;
  while(i<10 && (key!=(value &0x0000FFFF))) ++i;
  Serial.println(i);
  while(i--)
  {
    digitalWrite(LED,HIGH);
    delay(400);
    digitalWrite(LED,LOW);
    delay(200);
  }
  has_value=false;
  pos=0;
 
  }
}


un saludo

luisilva

#5
Sep 15, 2014, 08:19 pm Last Edit: Sep 15, 2014, 08:21 pm by luisilva Reason: 1

(...)
no entiendo esta linea
value<<=1;
     value|=0;
     ++pos;

(<<=); esto que significa no encuentro por ningun lado esto.

(...)


Eso es el desplazamiento de todos los bits a la izquierda de un bit. El símbolo << es el desplazamiento y el 1 es el número de bits.
Por ejemplo si la variable value tiene el valor 1011 0101 después del desplazamiento tendrá 0110 1010. Todos los bits se desplazan una casa a la izquierda, el que quedaría más a la izquierda desaparece y por la derecha entra un 0.

Puedes ver más detalles aquí.

pincho41700


Go Up