Paso 4: programas
IRsensor:
#ifndef _IRSENDREV_H_
#define _IRSENDREV_H_
len, start_H, start_L, nshort, nlong, data_len, datos [data_len]...
#define D_LEN 0
#define D_STARTH 1
#define D_STARTL 2
#define D_SHORT 3
#define D_LONG 4
#define D_DATALEN 5
#define D_DATA 6
#define USECPERTICK 50 / / interrupción de microsegundos por reloj tick
#define RAWBUF 300 / / longitud de búfer de duración cruda
Marcas tienden a ser demasiado 100us y espacios 100us demasiado corto
cuando debido al desfase del sensor.
#define MARK_EXCESS 100
#define __DEBUG 0
Resultados devueltos desde el decodificador
clase decode_results {}
público:
volatile unsigned int * rawbuf; Intervalos de crudo en Estados Unidos.5 garrapatas
int rawlen; Número de registros de rawbuf.
};
clase principal de recepción de IR
clase IRSendRev
{
privado:
resultados de la decode_results;
//**************************rev**********************************
privado:
int decode(decode_results *results);
void enableIRIn();
público:
void Init (int revPin); init
void Init();
unsigned char Recv (unsigned char * revData); //
unsigned char IsDta(); Si IR obtener datos
void Clear(); eliminar los datos del IR
//**************************send*********************************
privado:
void sendRaw (unsigned int buf [], int len, int hz);
privado:
anular marca (int usec);
espacio vacío (int usec);
void enableIROut(int khz);
público:
void enviar (unsigned char * idata, unsigned char Politecnico);
};
extern IRSendRev IR;
#endif
Sensor de polvo:
int pin = 8;
duración largo sin firmar;
starttime largo sin firmar;
unsigned sampletime_ms largo = 30000; //sampe 30s;
lowpulseoccupancy largo sin signo = 0;
relación de flotador = 0;
concentración de flotador = 0;
void setup() {}
Serial.Begin(9600);
pinMode(8,INPUT);
startTime = millis (); //get el tiempo actual;
}
void loop() {}
duración = pulseIn (pin, LOW);
lowpulseoccupancy = lowpulseoccupancy + duración;
Si ((millis()-starttime) > sampletime_ms) //if el tiempo sampel == 30s
{
cociente = lowpulseoccupancy/(sampletime_ms*10.0); Porcentaje de número entero 0 = > 100
concentración = 1.1 * pow (relación 3)-3.8 * pow (cociente 2) +520 * cociente + 0,62; mediante la curva de la hoja de especificaciones
Serial.Print ("concentración =");
Serial.Print(Concentration);
Serial.println ("pcs/0.01cf");
Serial.println("\n");
lowpulseoccupancy = 0;
startTime = millis();
}
}