AUTONOMA HOOVER (Intel IOT) (4 / 4 steg)
Steg 4: program
IRsensor:
#ifndef _IRSENDREV_H_
#define _IRSENDREV_H_
len, start_H, start_L, nshort, nlong, data_len, data [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 / / mikrosekunder per klocka avbryta fästing
#define RAWBUF 300 / / längd på raw varaktighet buffert
Märken tenderar att vara 100us för lång och utrymmen 100us för kort
När fick på grund av sensor fördröjning.
#define MARK_EXCESS 100
#define __DEBUG 0
Resultat som returneras från dekodern
klass decode_results {
offentlig:
volatile unsigned int * rawbuf; RAW mellanrum i.5 US fästingar
int rawlen; Antalet poster i rawbuf.
};
huvudklass för att ta emot IR
klass IRSendRev
{
privat:
decode_results resultat.
//**************************rev**********************************
privat:
int decode(decode_results *results);
void enableIRIn();
offentlig:
void Init (int revPin); init
void Init();
unsigned char Recv (unsigned char * revData); //
unsigned char IsDta(); om IR få data
void förloppsindikatorförekomstens; Rensa IR-data
//**************************send*********************************
privat:
void sendRaw (unsigned int buf [], int len, int hz);
privat:
Ogiltig mark (int usec);
hålrum (int usec);
void enableIROut(int khz);
offentlig:
Annullera skicka (unsigned char * idata, unsigned char ifreq);
};
extern IRSendRev IR;
#endif
Sensor damm:
int pin = 8.
osignerade långa varaktighet;
osignerade långa starttime;
osignerade långa sampletime_ms = 30000; //sampe 30-talet;
osignerade långa lowpulseoccupancy = 0;
float ratio = 0;
flyta koncentration = 0;
void setup() {
Serial.BEGIN(9600);
pinMode(8,INPUT);
StartTime = millis (); //get den aktuella tiden.
}
void loop() {
längd = pulseIn (pin, låg);
lowpulseoccupancy = lowpulseoccupancy + varaktighet;
om ((millis()-starttime) > sampletime_ms) //if prov tiden == 30s
{
ratio = lowpulseoccupancy/(sampletime_ms*10.0); Heltal andel 0 = > 100
koncentration = 1,1 * pow (förhållande, 3)-3,8 * pow (förhållande, 2) +520 * förhållandet + 0,62; med hjälp av Specifikationsblad kurva
Serial.Print ("koncentration =");
Serial.Print(concentration);
Serial.println ("datorer/0.01cf");
Serial.println("\n");
lowpulseoccupancy = 0;
StartTime = millis();
}
}