Étape 4: programmes
Exact :
#ifndef _IRSENDREV_H_
#define _IRSENDREV_H_
Len, start_H, start_L, nshort, nlong, data_len, données [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 / / microsecondes par clock interrompent tique
#define RAWBUF 300 / / longueur du buffer raw durée
Marques ont tendance à être 100us trop long et espaces 100us trop court
réception en raison du décalage du capteur.
#define MARK_EXCESS 100
#define __DEBUG 0
Résultats renvoyés par le décodeur
Class decode_results {}
public :
volatile unsigned int * rawbuf ; Intervalles de RAW.5 États-Unis tiques
int rawlen ; Nombre d’enregistrements dans rawbuf.
};
classe principale pour la réception IR
classe IRSendRev
{
privé :
résultats de la decode_results ;
//**************************rev**********************************
privé :
int decode(decode_results *results) ;
void enableIRIn() ;
public :
void Init (int revPin) ; init
void Init() ;
unsigned char Recv (unsigned char * revData) ; //
unsigned char IsDta() ; Si IR obtenir des données
Sub Clear() ; effacer les données IR
//**************************send*********************************
privé :
void sendRaw (unsigned int buf [], int len, int hz) ;
privé :
marque Sub (int usec) ;
espaces vides (int usec) ;
void enableIROut(int khz) ;
public :
annuler l’envoi (unsigned char * idata, unsigned char ifreq) ;
};
extern IRSendRev IR ;
#endif
Capteur de poussière :
broche int = 8 ;
unsigned longue durée ;
unsigned long starttime ;
unsigned long sampletime_ms = 30000 ; //sampe 30 s ;
unsigned long lowpulseoccupancy = 0 ;
ratio de flotteur = 0 ;
concentration de flotter = 0 ;
void setup() {}
Serial.Begin(9600) ;
pinMode(8,INPUT) ;
StartTime = millis (); //get l’heure actuelle ;
}
void loop() {}
durée = pulseIn (broches, faible) ;
lowpulseoccupancy = lowpulseoccupancy + durée ;
Si ((millis()-starttime) > sampletime_ms) //if le temps sampel == 30 s
{
ratio = lowpulseoccupancy/(sampletime_ms*10.0) ; Pourcentage de l’entier 0 = > 100
concentration = 1,1 * pow (rapport, 3)-3.8 * pow (ratio, 2) +520 * ratio + 0,62 ; à l’aide de la courbe de la fiche technique
Serial.Print (« concentration = ") ;
Serial.Print(concentration) ;
Serial.println ("pcs/0.01cf") ;
Serial.println("\n") ;
lowpulseoccupancy = 0 ;
StartTime = millis() ;
}
}