miércoles, 20 de marzo de 2019

Proyecto Arduino: Código del proyecto

Código:

#define SET(x,y) (x |=(1<<y))            //-Bit set / clear macros 
#define CLR(x,y) (x &= (~(1<<y)))         // | 
#define CHK(x,y) (x & (1<<y))             // | 
#define TOG(x,y) (x^=(1<<y))              //-+ 

unsigned long t0=0;         //-Ultima vez 
int t=0;                    //-Tiempo entre ints 
unsigned char tflag=0;      //-Indicador de medición flag 

float SENSITIVITY= 1000.0;  //-Adivina qué

//-Generar interrupción cada 1000 oscilaciones de la bobina de busqueda 
SIGNAL(TIMER1_COMPA_vect) 
{ 
  OCR1A+=1000; 
  t=micros()-t0; 
  t0+=t; 
  tflag=1; 
} 

void setup() 
{ 
  pinMode(13,OUTPUT);    //-bocina pin 
  digitalWrite(12,HIGH); //-NULL SW. pull up 
  //-Configurar el contador1 para contar en el pin 5 
  TCCR1A=0; 
  TCCR1B=0x07; 
  SET(TIMSK1,OCF1A); 
} 
//-Float ABS 
float absf(float f) 
{ 
  if(f<0.0) 
    return -f; 
  else 
    return f; 
} 

int   v0=0;  //-NULL value 
float f=0;   //-Medición value 
unsigned int FTW=0;    //-Click Tasa de generador 
unsigned int PCW=0;    //-Click Fase del generador 
unsigned long timer=0; //-Click timer 
void loop() 
{ 
   
  if(tflag) 
  { 
    if(digitalRead(12)==LOW)  //-Check NULL SW. 
      v0=t;                   //-Ejemplo de nuevo valor nulo 
    f=f*0.9+absf(t-v0)*0.1;   //-Promedio más de 10 muestras 
    tflag=0;                  //-Reset flag 

    float clf=f*SENSITIVITY; //-Convertir la medición en frecuencia de clic
    if(clf>10000)             
      clf=10000; 
    FTW=clf; 
  } 
   
  //-Click generator 
  if(millis()>timer) 
  { 
    timer+=10; 
    PCW+=FTW; 
    if(PCW&0x8000) 
    { 
      digitalWrite(13,HIGH); 
      PCW&=0x7fff; 
    } 
    else 
      digitalWrite(13,LOW); 
  } 


Este código utiliza el lenguaje de programación de una placa Arduino

No hay comentarios:

Publicar un comentario