Arduino IR-mottagaren kontroll dator (3 / 5 steg)
Steg 3: Arduino skiss
Nej ska vi titta på den kod som körs på arduino. Jag har kommenterat så mycket som möjligt, men om du inte förstår en sak låt snälla mig veta i kommentarerna.
Vad gör denna kod:
Läs IR-mottagaren och sända den över seriell anslutning till PC.
Seriell anslutning från datorn och ändra lysdioder.
uint8_t situation = 0; 3 > 1 eller 0 fick | 2 > Upprepa föregående kod
uint8_t START = 0; Upptäcka om överföringen startas
uint8_t x = 0;
uint8_t BIT = 0; Vilken bit är skicka (1/0)
uint8_t Id = 0; Vad är remote ID
uint8_t Id_inv = 0;
uint8_t Data = 0; Vilken tangent trycker på fjärrkontrollen
uint8_t Data_back = 0; Backup av fördelningsnyckeln för upprepa
uint8_t Data_inv = 0;
uint8_t Repeat = 0; passera först upprepa
/ * Variabler för att mäta puls * /
uint16_t Time_old = 0;
uint16_t tid = 0;
uint16_t TimeDelta = 0;
/ * Uppgifter från datorn * /
/ * 1 > caps lock förändrats * /
/ * 2 > NumLock förändrats * /
/ * 3 > scroll lock förändrats * /
uint8_t incomingByte = 0;
/ * LED stift * /
#define caps 24
#define numl 22
#define s.c.r.l. 23
void setup(void) {
/ * Avbryta för att läsa IR koden * /
attachInterrupt (0, IR_Read, faller);
/ * Seriell anslutning till datorprogram * /
Serial.BEGIN(9600);
/ * Ledde pins som output * /
pinMode (mössor, OUTPUT);
pinMode (numl, produktionen);
pinMode (s.c.r.l., produktionen);
/ * Ledde ut * /
digitalWrite (caps, låg);
digitalWrite (numl, låg);
digitalWrite (s.c.r.l., låg);
}
void loop(void) {
/ * Om något från datorn tas emot * /
om (Serial.available() > 0) {
/ * Läsa inkommande data * /
incomingByte = Serial.read();
Switch(incomingByte) {
fall 1: / * om 1 * /
/ * Caps Lock ledde på/av > av/på * /
digitalWrite (mössor,! digitalRead(caps));
bryta;
fall 2: / * om 2 * /
/ * Num Lock ledde på/av > av/på * /
digitalWrite (numl,! digitalRead(numl));
bryta;
fall 3: / * om 3 * /
/ * Scroll Lock ledde på/av > av/på * /
digitalWrite (s.c.r.l.,! digitalRead(scrl));
bryta;
standard:
bryta;
}
}
}
/ * Funktion för att läsa IR-mottagaren använder avbryter * /
/ * DU BEHÖVER INTE ÄNDRA NÅGOT HÄR * /
void IR_Read(void) {
Tid = micros();
om (Time_old! = 0) {
TimeDelta = tid - Time_old;
om ((TimeDelta > 12000) & &(TimeDelta < 14000)) {
START = 1;
x = 0;
situationen = 1;
ID = 0;
Id_inv = 0;
Data = 0;
Data_inv = 0;
} else om ((TimeDelta > 10000) & &(TimeDelta < 12000)) {
situationen = 2; Upprepa
} else om ((TimeDelta > 1500) & &(TimeDelta < 2500)) {
situationen = 3; //"1"
BIT = 1;
} else om ((TimeDelta > 1000) & &(TimeDelta < 1500)) {
situationen = 3; //"0"
LITE = 0;
} annat situation = 5;
om (situationen == 3) {
om (x < 8) {
ID | = BIT;
om (x < 7) Id << = 1;
x ++;
} else om (x < 16) {
Id_inv | = BIT;
om (x < 15) Id_inv << = 1;
x ++;
} else om (x < 24) {
Data | = BIT;
om (x < 23) Data << = 1;
x ++;
} else om (x < 32) {
Data_inv | = BIT;
om (x < 31) {
Data_inv << = 1;
} annat {
Serial.println(data);
Data_back = Data;
Upprepa = 0;
}
x ++;
}
} else om (situationen == 2) {
IF(REPEAT == 1) {
/ * Skicka mottagna data till datorn * /
Serial.println(Data_back);
} annat {
Upprepa = 1;
}
}
}
Time_old = tid;
}