DIY USB-IR-mottagare (4 / 5 steg)
Steg 4: Digispark skiss
OK nu "riktiga" koden för Digispark.
I den här koden måste du lägga till nyckelkoderna fått du i tidigare steg. Till exempel om "mute" nyckeln har koden 100 du ändra:
#define mute 240
till
#define mute 100
!! Uppmärksamhet!
När du definierar en ny nyckel, kan inte du använda blanksteg i namnet.
Och för att lägga till funktioner gå in loop funktion och lägga till/ändra nyckeln du gillar.
När du har någon fråga, fråga gärna!
/*************************************
* Här koden är skriven av Laurens Wuyts
* För frågor: laurens.wuyts
*
*
* Mikrokontroller: ATtiny85
* Dev styrelsen: Digispark
*
*************************************/
/ *** Definiera fjärrkontroll nycklar *** /
#define power 64
#define key_1 32
#define key_2 160
#define key_3 96
#define key_4 16
#define key_5 144
#define key_6 80
#define key_7 48
#define key_8 176
#define key_9 112
#define key_0 136
#define vol_up 224
#define vol_down 208
#define ch_up 72
#define ch_down 8
#define mute 240
#define nästa 172
#define prev 164
#define upp 6
#define ner 134
#define lämnade 166
#define rätt 70
#define playpause 156
#define key_stop 180
/************************************/
#include "TrinketHidCombo.h"
uint8_t situation = 0;
uint8_t START = 0;
uint8_t x = 0;
uint8_t BIT = 0;
uint8_t Id = 0;
uint8_t Id_inv = 0;
uint8_t Data = 0;
uint8_t Data_back = 0;
uint8_t Data_inv = 0;
uint8_t Repeat = 0;
uint8_t sended = 0;
uint16_t Time_old = 0;
uint16_t tid = 0;
uint16_t TimeDelta = 0;
void setup(void) {
/ * Använda INT0(P2) på Digispark * /
attachInterrupt (0, IR_Read, faller);
pinMode(1,OUTPUT);
digitalWrite(1,LOW);
TrinketHidCombo.begin();
}
void loop(void) {
IF(sended == 1) {
/ * Tilldela funktioner till knapparna * /
IF(Data_back == vol_up) {
TrinketHidCombo.pressMultimediaKey(MMKEY_VOL_UP);
} annat if(Data_back == vol_down) {
TrinketHidCombo.pressMultimediaKey(MMKEY_VOL_DOWN);
} annat if(Data_back == next) {
TrinketHidCombo.pressMultimediaKey(MMKEY_SCAN_NEXT_TRACK);
} annat if(Data_back == prev) {
TrinketHidCombo.pressMultimediaKey(MMKEY_SCAN_PREV_TRACK);
} annat if(Data_back == key_stop) {
TrinketHidCombo.pressMultimediaKey(MMKEY_STOP);
} annat if(Data_back == playpause) {
TrinketHidCombo.pressMultimediaKey(MMKEY_PLAYPAUSE);
} annat if(Data_back == mute) {
TrinketHidCombo.pressMultimediaKey(MMKEY_MUTE);
} annat if(Data_back == Power) {
TrinketHidCombo.pressSystemCtrlKey(SYSCTRLKEY_SLEEP);
} annat if(Data_back == key_0) {
TrinketHidCombo.pressKey (KEYCODE_MOD_LEFT_SHIFT, KEYCODE_0);
TrinketHidCombo.pressKey (0, 0);
} annat if(Data_back == key_1) {
TrinketHidCombo.pressKey (KEYCODE_MOD_LEFT_SHIFT, KEYCODE_1);
TrinketHidCombo.pressKey (0, 0);
} annat if(Data_back == key_2) {
TrinketHidCombo.pressKey (KEYCODE_MOD_LEFT_SHIFT, KEYCODE_2);
TrinketHidCombo.pressKey (0, 0);
} annat if(Data_back == key_3) {
TrinketHidCombo.pressKey (KEYCODE_MOD_LEFT_SHIFT, KEYCODE_3);
TrinketHidCombo.pressKey (0, 0);
} annat if(Data_back == key_4) {
TrinketHidCombo.pressKey (KEYCODE_MOD_LEFT_SHIFT, KEYCODE_4);
TrinketHidCombo.pressKey (0, 0);
} annat if(Data_back == key_5) {
TrinketHidCombo.pressKey (KEYCODE_MOD_LEFT_SHIFT, KEYCODE_5);
TrinketHidCombo.pressKey (0, 0);
} annat if(Data_back == key_6) {
TrinketHidCombo.pressKey (KEYCODE_MOD_LEFT_SHIFT, KEYCODE_6);
TrinketHidCombo.pressKey (0, 0);
} annat if(Data_back == key_7) {
TrinketHidCombo.pressKey (KEYCODE_MOD_LEFT_SHIFT, KEYCODE_7);
TrinketHidCombo.pressKey (0, 0);
} annat if(Data_back == key_8) {
TrinketHidCombo.pressKey (KEYCODE_MOD_LEFT_SHIFT, KEYCODE_8);
TrinketHidCombo.pressKey (0, 0);
} annat if(Data_back == key_9) {
TrinketHidCombo.pressKey (KEYCODE_MOD_LEFT_SHIFT, KEYCODE_9);
TrinketHidCombo.pressKey (0, 0);
} annat if(Data_back == up) {
TrinketHidCombo.pressKey (0, KEYCODE_ARROW_UP);
TrinketHidCombo.pressKey (0, 0);
} annat if(Data_back == down) {
TrinketHidCombo.pressKey (0, KEYCODE_ARROW_DOWN);
TrinketHidCombo.pressKey (0, 0);
} annat if(Data_back == left) {
TrinketHidCombo.pressKey (0, KEYCODE_ARROW_LEFT);
TrinketHidCombo.pressKey (0, 0);
} annat if(Data_back == right) {
TrinketHidCombo.pressKey (0, KEYCODE_ARROW_RIGHT);
TrinketHidCombo.pressKey (0, 0);
}
sended = 0;
} annat {
TrinketHidCombo.poll();
}
}
/ * Läsa IR koden * /
void IR_Read(void) {
digitalWrite(1,HIGH);
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 {
/ * GÖRA NÅGOT HÄR * /
sended = 1;
Data_back = Data;
Upprepa = 0;
}
x ++;
}
} else om (situationen == 2) {
IF(REPEAT == 1) {
/ * GÖRA NÅGOT HÄR * /
sended = 1;
} annat {
Upprepa = 1;
}
}
}
Time_old = tid;
digitalWrite(1,LOW);
}
Nu ladda upp skissen till digispark. Dra ur och sätta tillbaka det till datorn, vänta ~ 5 sek och njuta av din fjärrkontroll.