Linkit en IR-fjärrkontroll Blocker (3 / 4 steg)
Steg 3: Program
För att ladda upp programmet måste du installera en plugin Linkit tillsammans med arduino IDE. Du hittar instruktioner på hur man gör det i den officiella hemsidan. Du kan också hämta IDE med Linkit en plugin pre-installerat från GitHub.
#define times_to_annoy 15
#define delay_to_start_annoying 1000
#define delay_between_annoying 750
#define cooldown 15000
#define IRledPin 13
#define IRpin 7
maximal puls vi ska lyssna efter - 65 millisekunder är en lång tid
#define MAXPULSE 65000
Vad resolutionen timing bör, större är bättre
som dess "exaktare" - men för stor och du kommer inte få
exakt timing
#define RESOLUTION 20
Vi kommer att lagra upp till 100 puls par (detta är - en hel del-)
uint16_t pulser [100] [2]. par är hög och låg puls
uint8_t currentpulse = 0; index för pulser vi lagrar
#define IRpin_PIN PIND
void setup(void)
{
Serial.BEGIN(9600);
Serial.println ("redo att avkoda IR!");
}
void loop(void)
{
Serial.println ("söker en kod");
uint16_t highpulse, lowpulse; tillfällig lagring timing
highpulse = lowpulse = 0; börja med ingen puls längd
medan (digitalRead(IRpin)) {/ / Detta är för långsam!
medan (IRpin_PIN & (1 << IRpin))
{
PIN är fortfarande hög
räkna en annan några mikrosekunder
highpulse ++;
delayMicroseconds(RESOLUTION);
Om pulsen är för lång, vi "gått ut"-antingen ingenting
togs emot eller koden är klar, så skriv ut
Vi har gripit hittills, och sedan återställa
om ((highpulse > = MAXPULSE) & & (currentpulse! = 0))
{
Annoy();
currentpulse = 0;
hemkomst.
}
}
gjorde vi inte tid till så låter stash läsning
pulser [currentpulse] [0] = highpulse;
samma som ovan
tag (!. (IRpin_PIN & _BV(IRpin)))
{
PIN är fortfarande låg
lowpulse ++;
delayMicroseconds(RESOLUTION);
om ((lowpulse > = MAXPULSE) & & (currentpulse! = 0))
{
Annoy();
currentpulse = 0;
hemkomst.
}
}
pulser [currentpulse] [1] = lowpulse;
vi läsa en hög-låg puls, fortsätta!
currentpulse ++;
}
void annoy(void)
{
Serial.println ("inspelat kod!");
Delay(delay_to_start_annoying);
för (int lcv = 0; lcv < times_to_annoy; lcv ++)
{
Delay(delay_between_annoying);
pulsepulses();
}
Serial.println ("irriterande gjort för nu... söker en annan koden");
Delay(cooldown);
}
void pulsepulses(void)
{
Serial.println ("\n\r\n\rReceived: \n\rOFF \tON");
pulseIR (pulser [0] [1] * upplösning);
för (uint8_t jag = 1; jag < currentpulse; i ++)
{
delayMicroseconds (pulser [i] [0] * upplösning);
pulseIR (pulser [i] [1] * upplösning);
}
}
void pulseIR(long microsecs)
{
Vi ska räkna ner från numrera av mikrosekunder vi får höra att vänta
CLI(); Detta stänger av någon bakgrund avbryter
samtidigt (microsecs > 0) {
38 kHz är cirka 13 mikrosekunder hög och 13 mikrosekunder låg
digitalWrite (IRledPin, hög); Detta tar ca 3 mikrosekunder att hända
delayMicroseconds(10); hänga ut för 10 mikrosekunder
digitalWrite (IRledPin, låg); Detta tar också ca 3 mikrosekunder
delayMicroseconds(10); hänga ut för 10 mikrosekunder
så 26 mikrosekunder alldeles
microsecs-= 26.
}
SEI(); Detta visar dem tillbaka på
}