#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); } }
En este blog publicaremos información sobre ARDUINO y otros temas relacionados con la asignatura de tecnología industrial de 2º Bach. del instituto I.E.S. Parque de Monfragüe
miércoles, 6 de marzo de 2019
Código arduino del detector de metales
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario