рдкреАрд╕реА рдФрд░ рд╕реЙрдХреЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдЖрдИрдЖрд░ рд░рд┐рдореЛрдЯред рднрд╛рдЧ реи

рднрд╛рдЧ 1
рдХрд▓ рдореИрдВрдиреЗ рдПрдХ Arduino- рдЖрдзрд╛рд░рд┐рдд USB-IRPC рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреАред рдХреНрдпреЛрдВ? рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд▓реЗрдЖрдЙрдЯ рдХреЛ рдХреИрд╕реЗ рдЬрд▓реНрджреА рд╕реЗ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рдЬрдЯрд┐рд▓рддрд╛ рдпрд╣рд╛рдВ рд╡рд┐рд╢реЗрд╖ рдирд╣реАрдВ рд╣реИред
рдЖрдЬ рд╣рдо рдЙрдореНрдореАрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ рд╕рдм рдХреБрдЫ рдХрд░реЗрдВрдЧреЗред рд╢реБрд░реБрдЖрдд рд╕реЗ рд╣реА - рдХреЙрдиреНрд╕реЗрдкреНрдЯ, PCB, LUT рд╕реЗред рд╣рдо рдкрдиреНрдиреА-рд▓реЗрдкрд┐рдд рдлрд╛рдЗрдмрд░рдЧреНрд▓рд╛рд╕ рдХреЗ рдПрдХ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдПрдХ рдореБрдЯреНрдареА рднрд░ рднрд╛рдЧреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рдмрджрд▓ рджреЗрдВрдЧреЗред рдмреЗрд╢рдХ рдорд╛рдорд▓реЗ рдХреЗ рд╕рд╛рде, рд╣рдо рд╕рд╛рд╡рдзрд╛рди рд░рд╣рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╣реИ рдирд╛?
рдпрд╣рд╛рдБ рд╣рдорд╛рд░рд╛ рд▓рдХреНрд╖реНрдп рд╣реИ:
USB-IRPC Bare Front
USB-IRPC рдирдВрдЧреЗ рдореЛрд░реНрдЪрд╛
USB-IRPC Finished
USB-IRPC рд╕рдорд╛рдкреНрдд рд╣реБрдИ

рддреЛ, рд╣рдо рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдХреЗрд╡рд▓ USB-IRPC рдХреЛ рдЖрд░реЗрдЦ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд░рд┐рд▓реЗ рдХреЗ рд╕рд╛рде рд╕реЙрдХреЗрдЯ рдореЙрдбреНрдпреВрд▓ рдФрд░ LED рдХреЗ рд╕рд╛рде IR рд░рд┐рд╕реАрд╡рд░ "рдмрд╛рд╣реНрдп" рд╣реИрдВ рдФрд░ рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЗ рдмрд┐рдирд╛ рдХрд░реЗрдВрдЧреЗред
рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдПрдХ рд╕рд░реНрдХрд┐рдЯ рдФрд░ рдПрдХ рд╕рд░реНрдХрд┐рдЯ рдмреЛрд░реНрдб рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП DipTrace рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛:

рдЗрд╕рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рджреЛрд╖ рд╣реИ - рддрддреНрд╡реЛрдВ рдХрд╛ рдмрд╣реБрдд рд╕рдореГрджреНрдз рдкреБрд╕реНрддрдХрд╛рд▓рдп рдирд╣реАрдВ, рдФрд░ рдЙрд╕ рдкрд░ рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЦреЛрдЬ рднреА рдирд╣реАрдВред рд▓реЗрдХрд┐рди рдЖрдЗрдЯрдо рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЕрдм рддрдХ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдХрдо рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реИ :)
рдпрд╣рд╛рдБ рд╕реНрд╡рдпрдВ рдЖрд░реЗрдЦ рд╣реИ (рд▓рд┐рдВрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдФрд░ рдореВрд▓ рдЖрдХрд╛рд░ рдореЗрдВ рдЦреБрд▓рдХрд░ рдкреВрд░реНрдг рдЖрдХрд╛рд░ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рджреЗрдЦрдирд╛ рдмреЗрд╣рддрд░ рд╣реИ):
USB-IRPC Scheme
USB-IRPC рдпреЛрдЬрдирд╛
рдХреЗрдВрджреНрд░ рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ U1 рд╣реИ - рдореИрдВрдиреЗ Atmega168PA-AU рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди Atmega88 рдФрд░ Atmega328P рдХрд░реЗрдЧрд╛ред рдлрд░реНрдорд╡реЗрдпрд░ рдХрд╛ рдЖрдХрд╛рд░ 4 рдХреЗрдмреА рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рд╣реИред
16 MHz рдХреА рдЖрд╡реГрддреНрддрд┐ рдкрд░ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ (MK) рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдХреНрд╡рд╛рд░реНрдЯреНрдЬ X1 рдХреЗ рд╕рд╛рде рдХреИрдкреЗрд╕рд┐рдЯрд░ C4 рдФрд░ C5 рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕реА 2 - рдмрд╕ рдПрдХ рдЕрд╡рд░реБрджреНрдз рд╕рдВрдзрд╛рд░рд┐рддреНрд░, рдкрд╛рд╡рд░ рд╕рд░реНрдХрд┐рдЯ рдореЗрдВ рддрд░рдВрдЧ рдХреЛ рдереЛрдбрд╝рд╛ рдЪрд┐рдХрдирд╛ рдХрд░рддрд╛ рд╣реИред
R3 рдФрд░ U2 рдХрд╛ рдПрдХ рдмреНрд▓реЙрдХ рдкреАрд╕реА рдкрд╛рд╡рд░ рдмрдЯрди рдХреЛ "рдкреНрд░реЗрд╕" рдХрд░рдиреЗ рдХрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдЬреЗ 1 - рдкрд╛рд╡рд░ рдмрдЯрди рдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдорджрд░рдмреЛрд░реНрдб рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдиреЗрдХреНрдЯрд░ред
S1 - рд░реАрд╕реЗрдЯ рдмрдЯрдиред рдпрд╣ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд╕рдордп рдХрд╛рдо рдЖ рд╕рдХрддрд╛ рд╣реИред
J5 рдФрд░ J6 - ISP6 рдХрдиреЗрдХреНрдЯрд░ рдЗрди-рд╕рд░реНрдХрд┐рдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (рдлрд░реНрдорд╡реЗрдпрд░)ред
J2 - рд╕реЙрдХреЗрдЯ рдореЙрдбреНрдпреВрд▓ рдХреЛ рд░рд┐рд▓реЗ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЙрдХреЗрдЯред
J3 - IR рд░рд┐рд╕реАрд╡рд░ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдПрд▓рдИрдбреА рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдиреЗрдХреНрдЯрд░ред
рдбреА 1 - рдПрдХ рд╡рд░реНрддрдорд╛рди-рд╕реАрдорд┐рдд рдЕрд╡рд░реЛрдзрдХ рдЖрд░ 1 рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреБрдбрд╝рд╛ рдПрдХ рдПрд▓рдИрдбреА рдмреЛрд░реНрдб рдкрд░ рдПрдХ рдмрд╛рд╣рд░реА рдПрд▓рдИрдбреА рдХреА рдирдХрд▓ рдХрд░рддрд╛ рд╣реИред рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА, рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рдмрд╛рдж рдпрд╣ рдмреЙрдХреНрд╕ рдХреЗ рдЕрдВрджрд░ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЯрд╛рдВрдХрд╛ рд▓рдЧрд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред рдЖрд░ 4 - рд░рд┐рд╕реАрд╡рд░ рдореЙрдбреНрдпреВрд▓ рдкрд░ рд░рд┐рдореЛрдЯ рдПрд▓рдИрдбреА рдХреЗ рд▓рд┐рдП рд░реЛрдХрдиреЗрд╡рд╛рд▓рд╛ред
рдЬреЗ 4 - рдпреВрдПрд╕рдмреА рдорд┐рдиреА-рдмреА рдХрдиреЗрдХреНрдЯрд░ред
D2 рдФрд░ D3 3.6V рдЬреЗрдирд░ рдбрд╛рдпреЛрдб рд╣реИрдВред
R5, R6, R7 - V-USB рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рд░реЛрдзрдХред
рдпрд╣рд╛рдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдкреВрд░реА рдпреЛрдЬрдирд╛ред
рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ, рдЗрд╕реЗ .sch рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ (DipTrace)
рдореБрджреНрд░рд┐рдд рд╕рд░реНрдХрд┐рдЯ рдмреЛрд░реНрдб рдХреЛ рдЕрд▓рдЧ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реЛ рдЧрдпрд╛ред рдпрд╣ рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рдЕрдиреБрднрд╡ рд╣реИ рдФрд░ рдПрдХ рдкрд░рдд рдореЗрдВ рдПрдХ рдХрдВрдбрдХреНрдЯрд░ рдХреЛ рдЕрд▓рдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рдерд╛, рдореБрдЭреЗ рдЬрдореНрдкрд░ рдЫреЛрдбрд╝рдирд╛ рдкрдбрд╝рд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рднреВрд▓ рдЧрдпрд╛ рдХрд┐ рдмреЛрд░реНрдб рдкрд░ рдкреНрд▓рдЧ рджреВрд╕рд░реА рддрд░рдл рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ, рдФрд░ рдлрд┐рд░ рдореБрдЭреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдкреНрд▓рдЧ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред рдореИрдВрдиреЗ рднреА рдЧрд▓рддреА рд╕реЗ рдСрдкреНрдЯреЛрдХреЙрдкреНрд▓рд░ рдХреЛ рдЧрд▓рддреА рд╕реЗ рддреИрдирд╛рдд рдХрд░ рджрд┐рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЗрд╕реЗ рдЯрд╛рдВрдХрд╛ рд▓рдЧрд╛рдиреЗ рд╕реЗ рдирд╣реАрдВ рд░реЛрдХрддрд╛ рдерд╛ред рдореИрдВрдиреЗ рдпрд╣ рд╕рдм рдореБрджреНрд░рд┐рдд рд╕рд░реНрдХрд┐рдЯ рдмреЛрд░реНрдб рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рддрдп рдХрд┐рдпрд╛ рдерд╛ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдбрд╛рдЙрдирд▓реЛрдб рдХреЗ рд▓рд┐рдП рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдерд╛ред рддреЛ рдЖрдкрдХрд╛ рдмреЛрд░реНрдб рдореЗрд░реА рддрд╕реНрд╡реАрд░реЛрдВ рдореЗрдВ рдПрдХ рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реЛрдЧрд╛ред рдмреЗрд╣рддрд░ рдХреЗ рд▓рд┐рдП :)
рддрддреНрд╡реЛрдВ рдХреА рд╕реАрд▓рд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди, рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рддрд╛рдВрдмреЗ рдХреА рдкрдЯрд░рд┐рдпреЛрдВ рдХреЗ рдмрд╣реБрдд рдХрд░реАрдм рд╕реЗ рднрд░рдиреЗ рд╕реЗ рдЕрд╕реБрд╡рд┐рдзрд╛ рдмрдврд╝ рдЬрд╛рддреА рд╣реИ рдФрд░ рднрд░рд╛рд╡ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рджреНрд╡реАрдкреЛрдВ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдорд┐рд▓ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдкрдЯрд░рд┐рдпреЛрдВ рдХреЛ рдЪреМрдбрд╝рд╛ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣рд╛рдБ рдХреНрдпрд╛ рд╣реБрдЖ:

рд░реЗрдб рдХрд╛рд░реНрдкреЗрдЯ рдПрдХ рдРрд╕рд╛ рдЬрдореНрдкрд░ рд╣реИ рдЬрд┐рд╕реЗ рдкрд╛рд░реНрдЯрд┐рд╕рд┐рдкреЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдПрдХ рдЕрдЪреНрдЫрд╛ рдмреЛрдирд╕ DipTrace - рдореБрджреНрд░рд┐рдд рд╕рд░реНрдХрд┐рдЯ рдмреЛрд░реНрдб рдХреИрд╕реЗ рджрд┐рдЦреЗрдЧрд╛ рджреЗрдЦрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд╕рднреА рддрддреНрд╡ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рд╕рдкрд╛рдЯ рд░реВрдк рдореЗрдВ рд╕рдордЧреНрд░ рдкрд░рд┐рдгрд╛рдо рдЕрднреА рднреА рдмрд╣реБрдд рдЕрдзрд┐рдХ рджреГрд╢реНрдп рд╣реИ:

рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдмреЛрд░реНрдб рдкрд░ рдореИрдВрдиреЗ рдЬреЗ 7 рдХрдиреЗрдХреНрдЯрд░ рдХреЛ рдЬреЛрдбрд╝рд╛ рд╣реИ - рдкреАрд╕реА рдХреЗрд╕ рд╕реЗ рдкрд╛рд╡рд░ рдмрдЯрди рдХрдиреЗрдХреНрдЯрд░ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЗ 1 рдХреЗ рд╕рд╛рде рд╕рдорд╛рдирд╛рдВрддрд░ рдПрдХ рдЬреЛрдбрд╝реА рдЕрдзрд┐рдХ рдкрд┐рдиред
рдареАрдХ рд╣реИ, рд╕рд░реНрдХрд┐рдЯ рдФрд░ рд╕реИрдВрдкрд▓ рдкреАрд╕реАрдмреА рддреИрдпрд╛рд░ рд╣реИрдВ, рд╣рдо рдкреБрд░реНрдЬреЗ рдЦрд░реАрджрддреЗ рд╣реИрдВ рдФрд░ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВред

рднрд╛рдЧреЛрдВ рдХреА рд╕реВрдЪреА:


U1 - Atmega168PA-AU - TQFP-32 рдкреИрдХреЗрдЬ рдореЗрдВ - 64 рд░реВрдмрд▓ (icdarom рдореЗрдВ, рдиреНрдпреВрдирддрдо рдЖрджреЗрд╢ 1500 рд░рдЧрдбрд╝рдирд╛, рдбрд┐рд▓реАрд╡рд░реА 200) рд╕реЗ рд╣реИ, рдЖрдк 130 рд░рдЧрдбрд╝ рдЦрд░реАрдж рд╕рдХрддреЗ рд╣реИрдВред Atmega88PA-AU рдпрд╛ Atmega328P-AU рдХрд░реЗрдЧрд╛

рдЖрдЙрдЯрдкреБрдЯ рддрддреНрд╡:
U2 - PC817, PDIP4 рд╕рдВрд▓рдЧреНрдирдХ
рдПрд╕ 1 - рдбреАрдЯреАрдПрд╕ -61 рдмрдЯрди 6x4-6.3ред
рдбреА 2, рдбреА 3 - 3.6 рд╡реА рдЬреЗрдирд░ рдбрд╛рдпреЛрдб
рдЬреЗ 2, рдЬреЗ 3 - рдкреАрдмреАрдПрд╕ -4
рдЬреЗ 5, рдЬреЗ 6 - рдкреАрдмреАрдПрд╕ -3
рдЬреЗ 1, рдЬреЗ 7 - рдкреАрдмреАрдПрд╕ -2

SMD рддрддреНрд╡реЛрдВ рдХрд╛ рдЖрдХрд╛рд░ 0805 рд╣реИ
R1, R4 - 390ohm
R5, R6 - 68ohm
R7 - 2.2 kOhm
рдбреА 1 - рдПрд▓рдИрдбреА (рдХреЛрдИ рднреА рд░рдВрдЧ, рдореЗрд░реЗ рдкрд╛рд╕ рдирд╛рд░рдВрдЧреА рд╣реИ)
рдЬреЗ 4 - рдпреВрдПрд╕рдмреА рдорд┐рдиреАрдмреА рдХрдиреЗрдХреНрдЯрд░
рд╕реА 1, рд╕реА 2 - 0.1 ╬╝F рд╕рд┐рд░реЗрдорд┐рдХ рдХреИрдкреЗрд╕рд┐рдЯрд░ред
рд╕реА 4, рд╕реА 5 - 22 рдкреАрдПрдл рд╕рд┐рд░реЗрдорд┐рдХ рдХреИрдкреЗрд╕рд┐рдЯрд░
X1- 16MHz рдХреНрд╡рд╛рд░реНрдЯреНрдЬ
рдЖрд░ 3 - 100 рдУрдоред
рдЖрд░ 2 - 10 рдХреЛрд╣рдо

рд░реЗрдбрд┐рдпреЛ рдмрд╛рдЬрд╛рд░ рдкрд░ рдЖрдЙрдЯрдкреБрдЯ рддрддреНрд╡реЛрдВ рдХреЛ рдЦрд░реАрджрд╛ рдЬрд╛рддрд╛ рд╣реИ - рд▓рдЧрднрдЧ 50 рд░реВрдмрд▓ред
рдореИрдВрдиреЗ $ 9.85 рдХреЗ рдкреИрдХ рдХреЗ рд▓рд┐рдП рддреБрд░рдВрдд рдПрд╕рдПрдордбреА рддрддреНрд╡реЛрдВ рдХреЛ рдЦрд░реАрджрд╛ - рдкреНрд░рддреНрдпреЗрдХ рд░реЛрдХрдиреЗрд╡рд╛рд▓рд╛ рдореВрд▓реНрдп рдХреЗ 40 рдЯреБрдХрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдзрд╛рд░рд┐рддреНрд░ рдХреЗ 30ред

рдореИрдВрдиреЗ рдмреЙрдХреНрд╕ рдХреЛ 40p рдХреЗ рд▓рд┐рдП icdarom рдореЗрдВ рд▓рд┐рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ 65 рд░рдВрдЧреЛрдВ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд░рдВрдЧреЛрдВ рдХреЗ рдЕрдиреНрдп BOX-KA08 рд╕реНрдЯреЛрд░ рдореЗрдВ рднреА рд╣реИред
рдпрд╣ рдкрд╛рд░рджрд░реНрд╢реА рднреА рд╣реЛрддрд╛ рд╣реИ:
рдЫрд╡рд┐

рдореИрдВ рдЖрдкрдХреЛ рдмреЛрд░реНрдб рдирд╣реАрдВ рдмрдирд╛рдирд╛ рд╕рд┐рдЦрд╛рдКрдБрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ LUT - DiHALT рдиреЗ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ред рд╡реИрд╕реЗ, рдЙрдиреНрд╣реЗрдВ рдЬрд╛рдо рдХреЗ рджрд┐рди рдмрдзрд╛рдИред :)
рдореИрдВ рдХреЗрд╡рд▓ рдбрд┐рдкрдЯреНрд░реЗрд╕ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреНрд╖рдгреЛрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдиреНрджреНрд░рд┐рдд рдХрд░реВрдВрдЧрд╛ред рдЬрдм рдореБрджреНрд░рдг, рджрд░реНрдкрдг рдФрд░ рдШрдЯрдХ рд░реВрдкрд░реЗрдЦрд╛ рдХреЗ рдореБрджреНрд░рдг рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордд рднреВрд▓рдирд╛:

рдЖрдк рдбрд┐рдкреНрдЯреНрд░реЗрд╕ рдХреЗ рдмрд┐рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдПрдХ PNG рдлрд╝рд╛рдЗрд▓ рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдпрд╛, FastStone рд╡реНрдпреВрдЕрд░ рдХреЛ рд▓реЗрдВ рдФрд░ рдЗрд╕ рддрд░рд╣ рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ:

рдЕрдзрд┐рдХрддрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧреБрдгрд╡рддреНрддрд╛ рдкреНрд░рд┐рдВрдЯ, рдЕрдХреНрд╖рдо рдХрд░реЗрдВ, рдЕрдзрд┐рдХрддрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓реНрдкред
600 рдкреАрдкреАрдЖрдИ рдореЗрдВ рддреИрдпрд╛рд░ рдкреАрдПрдирдЬреАред
рдлрд┐рд░ рд╕рдм рдХреБрдЫ рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рд╣реЛрддрд╛ рд╣реИ: рдЕрдиреБрд╡рд╛рдж, рдЬрд╣рд░, рдЯреЛрдирд░ рдзреЛрдирд╛, рдХрдЯ, рдЯрд┐рди, рдбреНрд░рд┐рд▓:
USB-IRPC
┬л рдпреВрдПрд╕рдмреА-IRPC ┬╗
рдореЗрд░рд╛ рдкреЗрдкрд░ рдореИрдЯ рдерд╛ рдФрд░ рдЯреЛрдирд░ рдХрд┐рдирд╛рд░реЛрдВ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдереЛрдбрд╝рд╛ рдКрдкрд░ рд▓реБрдврд╝рдХрд╛ рд╣реБрдЖ рдерд╛ - рд╢рд╛рдпрдж рдпрд╣ рд▓реЛрд╣реЗ рдХреА рддрд░рд╣ рдирд╣реАрдВ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдХреБрдЫ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рдХреЗрд╡рд▓ рд╕реМрдВрджрд░реНрдпрд╢рд╛рд╕реНрддреНрд░ рдХрд╛ рдиреБрдХрд╕рд╛рди рд╣реБрдЖ рд╣реИ рдФрд░ рдпрд╣ рдмрд╣реБрдд рдЬреНрдпрд╛рджрд╛ рдирд╣реАрдВ рд╣реИред
рдШрдЯрдХреЛрдВ рдХреЛ рдорд┐рд▓рд╛рдПрдВ рдФрд░ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВ:
USB-IRPC Bare Front
USB-IRPC рдирдВрдЧреЗ рдореЛрд░реНрдЪрд╛
USB-IRPC Bare Back
USB-IRPC рдирдВрдЧреЗ рдмреИрдХ
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореЗрд░рд╛ PC817 рдЧрд▓рдд рддрд░рдл рд╣реИ рдФрд░ рдЖрдИрдПрд╕рдкреА рдХрдиреЗрдХреНрдЯрд░ рдХреА рдХрдВрдШреА рдХреА рдкрдВрдХреНрддрд┐рдпрд╛рдВ рдЙрд▓реНрдЯреЗ рдХреНрд░рдо рдореЗрдВ рд╣реИрдВ - рдпрд╣ рдореЗрд░реА рдЧрд▓рддреА рд╣реИ, рдЖрдкрдХреЗ рдмреЛрд░реНрдб рдкрд░ рд╕рдм рдХреБрдЫ рд╕рд╣реА рд╣реЛрдЧрд╛ред
рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдЗрд╕рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдореБрдЦреМрдЯрд╛ рдмрд╣реБрдд рд╕рдлрд▓ рдирд╣реАрдВ рдерд╛, рдЬрдм рддрддреНрд╡реЛрдВ рдХреЛ рдорд┐рд▓рд╛рддреЗ рд╣реБрдП, рд╕реЛрд▓реНрдбрд░ рдкреНрд░рд╡рд╛рд╣ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, рдЬреЛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдирд┐рдХрд╛рд▓рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕ рдХреНрд╖рдг рдХреЛ рднреА рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдФрд░ рдмреЛрд░реНрдб рд▓реЗрдЖрдЙрдЯ рдХреЗ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЗрд╕реЗ рд╕рд╣реА рдХрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЛрдВрдиреЗ рдмреЛрд░реНрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ - рдпрд╣ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗред рдкрд╣рд▓рд╛ рдкреИрдирдХреЗрдХ рд╣рдореЗрд╢рд╛ рдЧрд╛рдВрдарджрд╛рд░ рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕ рдмрд╛рд░ рдФрд░ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗред

рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдФрд░ рдбрд┐рдЬрд╛рдЗрди

рдореИрдВ рдЖрдкрдХреЛ 1: 1 (USB-IRPC_pcb.jpg) рдХреЗ рдкреИрдорд╛рдиреЗ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреЗ рд╢рд┐рд▓рд╛рд▓реЗрдЦреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд░рдВрдЧреАрди рдЪрд┐рддреНрд░ рдореБрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ рдФрд░ рд╕реАрд▓рд┐рдВрдЧ рддрддреНрд╡реЛрдВ рдФрд░ рдбреНрд░рд┐рд▓рд┐рдВрдЧ рдЫреЗрдж рдХреЗ рд▓рд┐рдП рдПрдХ рдзреЛрдЦрд╛ рдкрддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред
рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдмреЙрдХреНрд╕ рдореЗрдВ рдЫреЗрджреЛрдВ рдХреЛ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдХрд╛рдЯ рд▓реЗрдВред рд╣рдо рдПрдХ рдорд╛рд░реНрдХрд░ рдпрд╛ рдкреЗрдВрд╕рд┐рд▓ рдХреЗ рд╕рд╛рде рдорд╛рдорд▓реЗ рдкрд░ рдЫреЗрдж рдХреЗ рдЖрдХреГрддрд┐ рдХреЛ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдПрдХ рд▓рд┐рдкрд┐рдХ рдЪрд╛рдХреВ рдХреЗ рд╕рд╛рде рдкреЗрдкрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдЖрдХреГрддрд┐ рдХреЛ рдХрд╛рдЯрддреЗ рд╣реИрдВ рдФрд░ рдорд╛рдорд▓реЗ рдХреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕рдВрд▓рдЧреНрди рдХрд░рддреЗ рд╣реИрдВред рдУрд░ рд╣рдордиреЗ рдПрдХ miniUSB рдХрдиреЗрдХреНрдЯрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд╛рд▓реА рджреЗрдЦреАред рд╣рдо рдмреЛрд░реНрдб рдбрд╛рд▓рддреЗ рд╣реИрдВ рдФрд░ рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ:
USB-IRPC
┬л рдпреВрдПрд╕рдмреА-IRPC ┬╗
рдпрджрд┐ рдЖрдк рдлрд░реНрдорд╡реЗрдпрд░ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдИрдПрд╕рдкреА рдХреЗ рд▓рд┐рдП рдЫреЗрдж рдХреЛ рдХрд╛рдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ - рдкрд┐рди рдХрд╡рд░ рдХреЛ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
рдлрд┐рд░ рдЪрд┐рд╣реНрдиреЛрдВ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдФрд░ рдкреЗрд╕реНрдЯ рдХрд░реЗрдВред рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдЖрдкрдХреЛ рдЖрдИрдПрд╕рдкреА рдХреЗ рд╕рд╛рде рдФрд░ рдмрд┐рдирд╛ рд╕реНрдЯрд┐рдХрд░ рд╕рдВрд╕реНрдХрд░рдг рдорд┐рд▓реЗрдЧрд╛ред рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЙрдирдХреЗ рдиреАрдЪреЗ рдЫреЗрдж рдХрд╛рдЯрддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред (рдореИрдВрдиреЗ рд░реАрд╕реЗрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЗрдж рдбреНрд░рд┐рд▓ рдХрд┐рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд╕реНрдЯрд┐рдХрд░ рдореЗрдВ рдирд╣реАрдВ рдХрд╛рдЯрд╛, рдЗрд╕реЗ рдЯреВрдердкрд┐рдХ рдХреЗ рд╕рд╛рде рдЫреЗрдж рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИ)ред

рд╕рдм рдХреБрдЫ, рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рддреИрдпрд╛рд░ рд╣реИред
USB-IRPC Size
USB-IRPC рдЖрдХрд╛рд░
рдореИрдВ рд╕рд┐рд░реНрдл рдЧрд░реНрдо рдкрд┐рдШрд▓ рдЪрд┐рдкрдХрдиреЗ рд╡рд╛рд▓рд╛ рдЖрдИрдЖрд░ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рднрд░ рдЧрдпрд╛ рдФрд░ рдЗрд╕реЗ рдПрдХ рджреЛ рддрд░рдлрд╛ рдЯреЗрдк рдкрд░ рдореЙрдирд┐рдЯрд░ рд▓реЗрдЧ рд╕реЗ рдЬреЛрдбрд╝ рджрд┐рдпрд╛ред
USB-IRPC IR-Led module
" USB-IRPC IR-LED рдореЙрдбреНрдпреВрд▓ "
рдореБрдЭреЗ рдШрд░ рдкрд░ рдЙрдЬреНрдЬреНрд╡рд▓ рдкреНрд░рдХрд╛рд╢ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд╢ рд╡реНрдпрд╡рд╕реНрдерд╛ рдореЗрдВ рдпрд╣ рд▓рдЧрднрдЧ рдЕрдЧреЛрдЪрд░ рд╣реИ - рдЖрдХрд╛рд░ 1x3 рд╕реЗрдореА рд╣реИред

рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдбрд┐рд╡рд╛рдЗрд╕


рдлрд░реНрдорд╡реЗрдпрд░ рд╕реА рдореЗрдВ рдХреЛрдб :: рдмреНрд▓реЙрдХ рдЖрдИрдбреАрдИ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдХрдВрдкрд╛рдЗрд▓рд░ - AVR рдЯреВрд▓рдХрд┐рди рд╕реЗ AVR GCC
рдореИрдВ рдпрд╣рд╛рдВ рдореБрдЦреНрдп рдмрд┐рдВрджреБрдУрдВ рдХреЛ рд╕рдордЭрд╛рдКрдВрдЧрд╛ рддрд╛рдХрд┐ рдЖрдк рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛрдб рдХреЛ рд╕рдордЭ рд╕рдХреЗрдВред рд╕реНрд░реЛрдд рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкреГрд╖реНрда рдкрд░ рд╣реИрдВ, рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рд▓рд┐рдВрдХред
рдореИрдВрдиреЗ DigitalRead рдФрд░ DigitalWrite рдлрд╝рдВрдХреНрд╢рди рдХреА рдПрдХ рдкреНрд░рддрд┐ рд▓рд┐рдЦреА, рдЬреИрд╕реЗ рдореИрдВ Arduino рд╕реЗ рдХреБрдЫ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рд▓реЗрддрд╛ рд╣реВрдВ рдФрд░, рдЙрдиреНрд╣реЗрдВ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рдореИрдВ рд╕рд┐рд░реНрдл рдЙрдиреНрд╣реЗрдВ рд╡рд╛рдпрд░рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдореЗрд░реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реВрдВред
ir.h рдПрдХ IR рд░рд┐рд╕реАрд╡рд░ рд╡рд╛рд▓рд╛ рдЗрдВрдЯрд░рдлреЗрд╕ рд╣реИред рдЖрдИрдЖрд░ рд░рд┐рдореЛрдЯ рдХрдВрдЯреНрд░реЛрд▓ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреАрдиреА рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдЬреЛ рдЙрджрд╛рд╣рд░рдг рдЖрдпрд╛ рд╡рд╣ рдмреЗрд╢рд░реНрдореА рд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдерд╛ред рд▓рдЧрднрдЧ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рддред
usb_comm.h - рдПрдХ рдкреАрд╕реА рдФрд░ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдЬрд┐рд╕рдореЗрдВ рд╡реЗ рдкреНрд░реЗрд╖рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдХреЗ рд╕рд╛рде рд╡рд┐рдирд┐рдордп рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рдХреЛрдб рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред
//USB Commands #define cmdGetIRPCState 1 //   IRPC #define cmdSetDigitalPinStates 2 //       -   #define cmdDisableIR 3 //       #define cmdEnableIR 4 //       #define cmdGetIRBtnMapping 5 //         #define cmdSetIRBtnMapping 6 //         #define cmdGetIRBtn 7 //       (     ) #define cmdSetLedState 8 // /  #define cmdDoInternalFunc 9 //    IRPC #define cmdSaveToEEPROM 10 //       EEPROM #define cmdLoadFromEEPROM 11 //       EEPROM //USB pinstate bits #define PWRRelay1Bit 0 #define PWRRelay2Bit 1 #define ledBit 7 //Internal functions #define fRelay1Switch 1 #define fRelay2Switch 2 #define fPCPwrSwitch 3 struct irpcdata_t //      { uint8_t cmd; // Switches state uint8_t data[4]; // data }; 


USB рдкрд┐рдирд╕реНрдЯреЗрдЯ рдмрд┐рдЯреНрд╕ - рд░рд┐рд▓реЗ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдВрддреНрд░рдг рдмрд┐рдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдкреИрдХреЗрдЬ рдореЗрдВ рдПрд▓рдИрдбреАред
рдЖрдВрддрд░рд┐рдХ IRPC рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ:
fRelay1Switch - рд╕реНрд╡рд┐рдЪ рд░рд┐рд▓реЗ 1
fRelay2Switch - рд░рд┐рд▓реЗ 2 рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВ
fPCPwrSwitch - рдкреАрд╕реА рдкрд╛рд╡рд░ рдмрдЯрди рджрдмрд╛рдПрдВ

irpcdata_t рдбрд┐рд╡рд╛рдЗрд╕ рдФрд░ рдкреАрд╕реА рдХреЗ рдмреАрдЪ рдЖрджрд╛рди рдкреНрд░рджрд╛рди рдкреИрдХреЗрдЬ рд╕рдВрд░рдЪрдирд╛ рд╣реИред
рдкреАрд╕реА рдХреЗ рдЕрдиреБрд░реЛрдз рдкрд░ рдПрдХреНрд╕рдЪреЗрдВрдЬ рд╣реЛрддрд╛ рд╣реИред
cmd - рдХрдорд╛рдВрдб рдХреЛрдб (рдЬреИрд╕реЗ cmdGetIRPCState)
рдбреЗрдЯрд╛ [] - 4 рдмрд╛рдЗрдЯреНрд╕ рдХрд╛ рдбреЗрдЯрд╛ рд╕рд░рдгреАред рдкреНрд░рддреНрдпреЗрдХ рдЯреАрдо рдЗрд╕реЗ рдЕрдкрдиреЗ рддрд░реАрдХреЗ рд╕реЗ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рддреА рд╣реИред

irc.h - рдмрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдмрдЯрди рдХреЛрдб рдХреЗ рдкрддреНрд░рд╛рдЪрд╛рд░ред рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд░реАрдореЗрдХ рдХреЗ рд▓рд┐рдП рд░рд┐рдХреЙрд░реНрдб рдХрд┐рдпрд╛ред рдХреБрдЫ рдЗрд╕ рддрд░рд╣:
 //AverMedia RM-FR #define amTVFM 0xFE01 #define amPWR 0xFF00 #define amB1 0xFA05 #define amB2 0xF906 #define amB3 0xF807 #define amB4 0xF609 

Usbconfig.h рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, V-USB рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ред рдореИрдВрдиреЗ рдЗрд╕ рд▓реЗрдЦ рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдЦреАрдВрдЪреАред
рдпрджрд┐ рдЖрдк рдпреВрдПрд╕рдмреА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рдирд╣реАрдВ рд╕рдордЭрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╡рд╣рд╛рдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЫреВ рд╕рдХрддреЗ рд╣реИрдВред
рдЖрдзрд╛рд░рд┐рдд рдХрд╛рд░реНрдпрдХреНрд░рдо main.c.

рд╣рдо рд╕реЗрдЯрдкрд┐рдирд╕реНрдЯреИрдЯ рдореИрдХреНрд░реЛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдЖрд╡рд╢реНрдпрдХ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рдмрд┐рдЯреНрд╕ рдХреА рд╕рдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЛ рдкрд┐рдирд╕реНрдЯреЗрдЯреНрд╕ рдЪрд░ рдореЗрдВ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред
рд╣рдо рдЙрди рдкрд┐рдиреЛрдВ рдХреЛ рднреА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдирд╕реЗ рдкрд░рд┐рдзреАрдп рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВ рдФрд░ рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдмрдЯрди рдореИрдкрд┐рдВрдЧ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЬреЛ рд╣рдо рд╕реНрдЯреЛрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдореИрдХреНрд╕рдмрдЯрди рдореИрдкрд┐рдВрдЧ)ред

 //Usefull macroses #define SetPinState(Pin, State, bit) digitalWrite(Pin, State); if (State>0) pinStates |=_BV(bit); else pinStates &= ~_BV(bit); //PORTB #define PWRPin 16 // PC2 #define ledPin 9 // PB1 //PORTD #define PWRRelay1 6 // PD6 #define PWRRelay2 5 // PD5 #define MaxBtnMapings 15 


рдЪрд░ (рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд▓рд┐рдП рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдХреА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╡реЗ рдЬреНрдпрд╛рджрд╛рддрд░ рдЕрдирд╛рдбрд╝реА рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рд╣реИрдВ :)

 // uint8_t ledState = 0; //   uint8_t PWRRelay1State = 1; //   1 uint8_t PWRRelay2State = 1; //  2 uint8_t PWRPinState=0; //     uint8_t IRBtnL, IRBtnH; // ,        uint8_t IREnabled=1; //     struct btn_mapping btn_mappings[MaxBtnMapings]; //     //-- uint8_t cmd; //    uint8_t pinStates=0x00; //    (0-PWRRelay1State, 1-PWRRelay2State) uint8_t cmdReceived=0; //  PC  () //IR variables uint16_t btn; //    uint16_t LastBtn=0x00; //     //----------------- USB Section--------------------------- struct irpcdata_t pdata, pcdata; //pdata - output buffer, pcdata - input buffer 

рдкреАрд╕реА рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрдорд╛рдВрдб рдХреЛ рдкреАрд╕реАрдбреЗрдЯрд╛ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рднреЗрдЬреЗ рдЧрдП рд▓реЛрдЧреЛрдВ рдХреЛ рдкреАрдбреАрдЯрд╛ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдореБрдЦреНрдп рдЪрдХреНрд░
 int main(void) { //Initialize ports DDRB = 0b00000010; // PB1 -  DDRC = 0b00000100; // PC2 -  DDRD = 0b01100000; // PD5, PD6 -  //clear btn mappings for (i=0; i<MaxBtnMapings;i++){ btn_mappings[i].func=0; btn_mappings[i].btn_code=0; } loadStateFromEEPROM(); //USB Init & connect cli(); // Clear interrupts while perfoorming time-critical operations usbInit(); usbDeviceDisconnect(); //    ,       ! uchar i = 0; while(--i){ //  > 250 ms _delay_ms(1); } usbDeviceConnect(); //  sei(); //   //Timer1 Init for IR timer1_init(); // init IR timer loop(); return 0; } 

рд╣рдо рдкрд┐рди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд░рд┐рд▓реЗ рдФрд░ рдПрд▓рдИрдбреА рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВред
рд╣рдо рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдмрдЯрди рдХреЗ рдкрддреНрд░рд╛рдЪрд╛рд░ рдХреЛ рд╕рд╛рдл рдХрд░рддреЗ рд╣реИрдВ - рдЪрд╛рд▓реВ рд╣реЛрдиреЗ рдкрд░ рдореЗрдореЛрд░реА рдореЗрдВ рдмрд╣реБрдд рдХрдЪрд░рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
рд╣рдо рд░рд┐рд▓реЗ рдФрд░ рдПрд▓рдИрдбреА - рдкрд┐рдирд╕реНрдЯреЗрдЯреНрд╕ рдХреА рд╕реНрдерд┐рддрд┐ рдмрд╛рдЗрдЯ рдХреЛ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд▓реЛрдбрд╕реНрдЯреИрдЯрдлреНрд░реЛрдордИрдкреНрд░реЛрдо () рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред
рдЗрдВрдЯрд░рдкреНрдЯ рдХреЛ рдмрдВрдж рдХрд░реЗрдВ, рдкреАрд╕реА рд╕реЗ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ, рд░реЛрдХреЗрдВ рдФрд░ рд╣рдореЗрдВ рдвреВрдВрдврдиреЗ рджреЗрдВред рдлрд┐рд░ рдмреАрдЪ рдореЗрдВ рд╕рдХреНрд╖рдо рдХрд░реЗрдВред
рд╣рдо рдПрдХ рдЖрдИрдЖрд░ рд░рд┐рд╕реАрд╡рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯрд╛рдЗрдорд░ рддреИрдпрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рд╣рдо рдЖрдИрдЖрд░ рд░рд┐рд╕реАрд╡рд░ рдФрд░ рдкреАрд╕реА рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдЪрдХреНрд░ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:
 void loop() { // Main loop for(;;){ //    usbPoll(); //        ,     - 50 ms if (cmdReceived) {processUSBcmd();} else if (IREnabled) { remote_decode(); process_IR(); } } return; } 

рдпрд╣рд╛рдБ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ:

рдЬрдм рдкреАрд╕реА рд╣рдореЗрдВ рдкреИрдХреЗрдЬ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ usbFunctionWrite рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдм рдпрд╣ рдбреЗрдЯрд╛ рдкреИрдХреЗрдЯ - usbFunctionRead рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИред

рдЖрдЗрдП рдЙрдирдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВ:

 uchar usbFunctionRead(uchar *data, uchar len) { if(len > bytesRemaining) len = bytesRemaining; uchar *buffer = (uchar*)&pdata; if(!currentAddress) //       . { //     pdata.cmd=cmd; //last received cmd switch(cmd){ case cmdGetIRPCState: pdata.data[0]=pinStates; pdata.data[1]=IRBtnH; pdata.data[2]=IRBtnL; if (IREnabled){ //clear IR button code IRBtnL=0; IRBtnH=0; } break; case cmdGetIRBtnMapping: pdata.data[0]=pcdata.data[0]; pdata.data[1]=(btn_mappings[pcdata.data[0]].btn_code>>8); pdata.data[2]=(btn_mappings[pcdata.data[0]].btn_code & 0xFF); pdata.data[3]=btn_mappings[pcdata.data[0]].func; break; } } uchar j; for(j=0; j<len; j++) data[j] = buffer[j+currentAddress]; currentAddress += len; bytesRemaining -= len; return len; } 

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, pdata рд╕рдВрд░рдЪрдирд╛ рдХреЛ рднрд░реЗрдВ - рдЕрдЧрд░ рд╣рдореЗрдВ рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рд╕реНрдерд┐рддрд┐ (cmdGetIRPCState) рд╕реЗ рдкреВрдЫрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдкрд┐рдирд╕реНрдЯреЗрдЯреНрд╕ рдФрд░ рд░рд┐рдореЛрдЯ рдкрд░ рджрдмрд╛рдП рдЧрдП рдмрдЯрди рдХрд╛ рдХреЛрдб рд▓рд┐рдЦреЗрдВ
рдпрджрд┐ рдЖрдкрдиреЗ рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкрддреНрд░рд╛рдЪрд╛рд░ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕реЗ рднреЗрдЬреЗ рдЧрдП рдкреАрд╕реА рдкреИрдХреЗрдЬ (pcdata.data [0]) рдХреЗ рдкрд╣рд▓реЗ рдмрд╛рдЗрдЯ рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рд╕рдВрдЦреНрдпрд╛ рд▓реЗрдХрд░ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред
рдпрджрд┐ рдЖрдк рдХрдорд╛рдВрдб рдХреЛ рдирд╣реАрдВ рдкрд╣рдЪрд╛рдирддреЗ рд╣реИрдВ, рддреЛ рдмрд╕ pdata рд╕рдВрд░рдЪрдирд╛ рджреЗрдВ - рдЬрдм рдХрдорд╛рдВрдб рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкрд░рд┐рдгрд╛рдо рдЗрд╕рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВ
рдлрд┐рд░, рдмрд╛рдЗрдЯ-рдмрд╛рдп-рдмрд┐рдЯ рд╣рдо рдбреЗрдЯрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдкрд╛рд░рд┐рдд рд╕реВрдЪрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдирд╛ рдкреИрдХреЗрдЬ рд▓рд┐рдЦрддреЗ рд╣реИрдВред

 uchar usbFunctionWrite(uchar *data, uchar len) { uchar *buffer = (uchar*)&pcdata; uchar j; for(j=0; j<len; j++) buffer[j]=data[j]; cmdReceived=1; //     return 1; } 

рдпрд╣рд╛рдВ рдпрд╣ рдФрд░ рднреА рд╕рд░рд▓ рд╣реИ - рд╣рдо рдмрд╕ рдкреАрд╕реАрдбреЗрдЯрд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдкреИрдХреЗрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рдмрд┐рдирд╛ рдХрд┐ рдХреНрдпрд╛ рд╣реИ, рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛USUScmd () рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рд╣рдореЗрдВ рдЬрд▓реНрдж рд╕реЗ рдЬрд▓реНрдж рдирд┐рдпрдВрддреНрд░рдг рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдмрд╛рдзрд╛ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред

рдФрд░ рдпрд╣рд╛рдБ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡рд╣:
 void processUSBcmd(){ cmd=pcdata.cmd; switch(cmd) { case cmdSetDigitalPinStates: //Get pin states from USB cmd PWRRelay1State=(pcdata.data[0] & _BV(PWRRelay1Bit)); PWRRelay2State=(pcdata.data[0] & _BV(PWRRelay2Bit)); ledState=(pcdata.data[0] & _BV(ledBit)); //Execute cmd SetPinState(PWRRelay1, PWRRelay1State, PWRRelay1Bit); SetPinState(PWRRelay2, PWRRelay2State, PWRRelay2Bit); break; case cmdGetIRPCState: if (PWRRelay1State>0) pinStates |=_BV(PWRRelay1Bit); else pinStates &= ~_BV(PWRRelay1Bit); if (PWRRelay2State>0) pinStates |=_BV(PWRRelay2Bit); else pinStates &= ~_BV(PWRRelay2Bit); if (ledState>0) pinStates |=_BV(ledBit); else pinStates &= ~_BV(ledBit); break; case cmdGetIRBtn: pdata.data[1]=IRBtnH; pdata.data[2]=IRBtnL; IRBtnL=0; IRBtnH=0; break; case cmdSetLedState: ledState=(pcdata.data[0] & _BV(ledBit)); SetPinState(ledPin, ledState, ledBit); break; case cmdEnableIR: IREnabled=1; break; case cmdDisableIR: IREnabled=0; IRBtnL=0xFF; IRBtnH=0xFF; break; case cmdSetIRBtnMapping: btn_mappings[pcdata.data[0]].btn_code=(uint16_t)(pcdata.data[1]<<8)+pcdata.data[2]; btn_mappings[pcdata.data[0]].func=pcdata.data[3]; break; case cmdDoInternalFunc: switch (pcdata.data[0]){ case fRelay1Switch: PWRRelay1State=!PWRRelay1State; SetPinState(PWRRelay1, PWRRelay1State, PWRRelay1Bit); break; case fRelay2Switch: PWRRelay2State=!PWRRelay2State; SetPinState(PWRRelay2, PWRRelay2State, PWRRelay2Bit); break; case fPCPwrSwitch: digitalWrite(PWRPin, 1); _delay_ms(100); digitalWrite(PWRPin, 0); break; } break; case cmdLoadFromEEPROM: loadStateFromEEPROM(); break; case cmdSaveToEEPROM: saveStatetoEEPROM(); break; } _delay_ms(5); cmdReceived=0; } 

рдкреНрд░рд╛рдкреНрдд рдХрдорд╛рдВрдб (pcdata.cmd рдлрд╝реАрд▓реНрдб рдореЗрдВ рдЗрд╕рдХрд╛ рдХреЛрдб) рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдо pcdata.data рдкреИрдХреЗрдЬ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддреЗ рд╣реИрдВ
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдкрд╛рд░рджрд░реНрд╢реА рд╣реИред
рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, cmdReceived рдзреНрд╡рдЬ рд░реАрд╕реЗрдЯ рдХрд░реЗрдВред

Process_IR () рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, рд╣рдо 16-рдмрд┐рдЯ рдмрдЯрди рдХреЛрдб рдПрдХрддреНрд░ рдХрд░рддреЗ рд╣реИрдВ:
  // button code is 16 bit btn=(adrH_code << 8) + adrL_code; 

рдпрджрд┐ рдХреЛрдб 0 рдирд╣реАрдВ рд╣реИ, рддреЛ рдХреБрдЫ рджрдмрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдкреАрд╕реА рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рдЭрдВрдбрд╛ рд╕реЗрдЯ рдХрд░реЗрдВ рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рдПрд▓рдИрдбреА рдХреЛ рдкреНрд░рдХрд╛рд╢ рдореЗрдВ рд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдпрд╣ рджрд┐рдЦрд╛рдПрдВ рдХрд┐ рд╣рдордиреЗ рджрдмрд╛рдП рдЧрдП рдмрдЯрди рдХреЛ рджреЗрдЦрд╛ред
  //Button pressed if (btn>0x00) { LastBtn=btn; IRBtnL=adrL_code; IRBtnH=adrH_code; ledState=1; } 

рдЕрдЧрд▓рд╛, рдореИрдВ рдЕрдкрдиреЗ рд░рд┐рдореЛрдЯ рдХрдВрдЯреНрд░реЛрд▓ рдХреЗ рдмрдЯрди рдХреЛрдб рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ:
  //Button is "Power" if ((btn==ykPWR) || (btn==amPWR)) { PWRPinState=1; } switch (LastBtn){ // case ykB1: case amSNAPSHOT: PWRRelay1State=!PWRRelay1State; SetPinState(PWRRelay1, PWRRelay1State, PWRRelay1Bit); break; // case ykB2: case am16CH: PWRRelay2State=!PWRRelay2State; SetPinState(PWRRelay2, PWRRelay2State, PWRRelay2Bit); break; } 

"рдкрд╛рд╡рд░" рдмрдЯрди рдкрд░, рд░рд┐рдореЛрдЯ рдХрдВрдЯреНрд░реЛрд▓ рдмрдЯрди рдЬрд╛рд░реА рд╣реЛрдиреЗ рддрдХ рдкреАрд╕реА рдкрд╛рд╡рд░ рдмрдЯрди рджрдмрд╛рдПрдВред
рджреЛ рдЕрдиреНрдп рдмрдЯрдиреЛрдВ рджреНрд╡рд╛рд░рд╛ рдореИрдВ рд░рд┐рд▓реЗ рд╕реНрдерд┐рддрд┐ рд╕реНрд╡рд┐рдЪ рдХрд░рддрд╛ рд╣реВрдВред

рдлрд┐рд░ рд╣рдо рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдмрдЯрди рдХреЛрдб рдХреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкрддреНрд░рд╛рдЪрд╛рд░ рдХреА рд╕рд░рдгреА рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ - рдпрд╣ рдЕрдиреНрдп рд░рд┐рдореЛрдЯ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╣реИ, рдкрддреНрд░рд╛рдЪрд╛рд░ рдкреАрд╕реА cmdSetIRBtnMapping рдЖрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдкреНрд░рддрд┐ рдмрдЯрди рдПрдХ рдХрдорд╛рдВрдбред рдЗрд╕ рдХрдорд╛рдВрдб рдХреА рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдЬреЛ рд╣рдордиреЗ рдКрдкрд░ рджреЗрдЦреА рд╣реИ processUSBcmd () рдореЗрдВ
  for (i=0; i<MaxBtnMapings;i++){ if (btn==btn_mappings[i].btn_code) { switch (btn_mappings[1].func){ case fRelay1Switch: PWRRelay1State=!PWRRelay1State; SetPinState(PWRRelay1, PWRRelay1State, PWRRelay1Bit); break; case fRelay2Switch: PWRRelay2State=!PWRRelay2State; SetPinState(PWRRelay2, PWRRelay2State, PWRRelay2Bit); break; case fPCPwrSwitch: digitalWrite(PWRPin, 1); _delay_ms(100); digitalWrite(PWRPin, 0); break; } } } 


рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЖрдИрдЖрд░ рд░рд┐рд╕реАрд╡рд░ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдмрд╛рдзрд┐рдд рдХрд░рдиреЗ рдФрд░ рд╕рдордп-рд╕рдордп рдкрд░ рдкреНрд░рджреВрд╖рд┐рдд рдХрд░рдиреЗ рдФрд░ usbPoll рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░реЗрдВ, рдЕрдиреНрдпрдерд╛ рдкреАрд╕реА рд╣рдореЗрдВ рдЦреЛ рджреЗрдЧрд╛ - "рдпреВрдПрд╕рдмреА рдбрд┐рд╡рд╛рдЗрд╕ рдорд╛рдиреНрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ"ред
рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдПрдХ рдХрд╛рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЕрд▓реНрдлрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╛рдорд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдХрдИ рдЯреБрдХрдбрд╝реЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдиреЛрдЯрд┐рд╕ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░рд┐рдореЛрдЯ рдХрдВрдЯреНрд░реЛрд▓ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдпрдХрд╛рд░реА рдЕрднреА рддрдХ рдЯрд┐рдкреНрдкрдгреА рдирд╣реАрдВ рдХреА рдЧрдИ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкреАрд╕реА рд╕реЗ рдмрдЯрди рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдХреА рд╕реЗрдЯрд┐рдВрдЧ рдЕрднреА рддрдХ рдирд╣реАрдВ рд▓рд┐рдЦреА рдЧрдИ рд╣реИ, рд╕рдордп рдирд╣реАрдВ рдерд╛ред рдЦреИрд░, рдХрднреА-рдХрднреА рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдбрд┐рд╡рд╛рдЗрд╕ рдкреАрд╕реА рд╕реЗ рдХрдорд╛рдВрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ рдФрд░ рд░рд┐рдореЛрдЯ рдХрдВрдЯреНрд░реЛрд▓ рдХреЗ рдмрдЯрди рдкрд░ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдИрдЖрд░ рд░рд┐рд╕реАрд╡рд░ рд╕рд░реНрд╡реЗрдХреНрд╖рдг рдХреА рд▓рдВрдмреА рдЕрд╡рдзрд┐ рдХреЗ рдХрд╛рд░рдг рд╣реИ, рдЗрд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рджреБрд░реНрд▓рдн рд╣реИ рдФрд░ рдЗрд╕рд╕реЗ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рдЕрд╕реБрд╡рд┐рдзрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред

рдЕрдм рдкреАрд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдкрд░ рдЬрд╛рдПрдВред
рдореИрдВ рдкреНрд░рдореБрдЦ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реВрдВрдЧрд╛ рддрд╛рдХрд┐ рдЖрдк рд╕реНрд░реЛрдд рдХреЛ рд╕рдордЭ рд╕рдХреЗрдВред
рдореИрдВ рдЖрдкрдХреЛ MKey рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓рдЧрдЗрди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдКрдВрдЧрд╛ - рдпрд╣ рд╕рдордЭрдирд╛ рдЖрд╕рд╛рди рд╣реИред
рдкреНрд▓рдЧрдЗрди рдбреЗрд▓реНрдлреА 7 рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдПрдордХреЗ рдпреВрдирд┐рдХреЛрдб рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдбреЗрд▓реНрдлреА 2010 рдореЗрдВ рдЖрдкрдХреЛ рдПрдПрдирдПрд╕рдЖрдИ рд╕реЗ рдкрд░реЗрд╢рд╛рди рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЕрддрд┐рд░рд┐рдХреНрдд рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рд╕реЗ, рдХреЗрд╡рд▓ JVCL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдореБрдЦреНрдп рдХрд╛рд░реНрдп uHID.pas рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рдпрд╣ рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рдЙрд╕реА рдХрдорд╛рдВрдб рдХреЙрдиреНрд╕реНрдЯреЗрдВрдЯ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ред
рдкреИрдХреЗрдЬ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рд╣реА рд░рд┐рдХреЙрд░реНрдб, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ - рд░рд┐рдкреЛрд░реНрдЯрдЖрдИрдбреА - рд╣рдо рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╣рдореЗрд╢рд╛ 0 рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд░рд┐рдкреЛрд░реНрдЯ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмрд╕ рдПрдХ рд╣реА рдХрд╛рдлреА рд╣реИред
рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗрд╡рд▓ рдЖрдИрдбреА рдбрд┐рд╡рд╛рдЗрд╕ рд╣реИрдВ - рд╡реЗрдВрдбрд░ рдЖрдИрдбреА (рд╡рд┐рдж), рдЙрддреНрдкрд╛рдж рдЖрдИрдбреА (рдкреАрдЖрдИрдбреА) рдФрд░ рдбрд┐рд╡рд╛рдЗрд╕рдиреЗрдоред Vid рдФрд░ Pid рджреНрд╡рд╛рд░рд╛, рд╣рдо рдЕрдкрдиреЗ рдХрдиреЗрдХреНрдЯ рдХрд┐рдП рдЧрдП HID рдЙрдкрдХрд░рдгреЛрдВ рдореЗрдВ рдЦреЛрдЬ рдХрд░реЗрдВрдЧреЗред
 const //USB-IRPC IDs Vid=$16C0; Pid=$05DF; DeviceName='USB-IRPC'; //PC<->IRPC TIRPCReport= packed record reportID:byte; //not used, shoud be 0 cmd:byte; data: array [0..3] of byte; end; 


рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд╕рд╛рде рд╕рднреА рд╕рдВрдЪрд╛рд░ рдХрд╛рд░реНрдп рдПрдХ рдХрдХреНрд╖рд╛ рдореЗрдВ рдПрдХрддреНрд░ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ
  TIRPC=class private Dev:TJvHidDevice; HID:TJvHidDeviceController; fIRButtons:TStringList; fIRName:string; fIRLoaded:boolean; function IsConnected: boolean; public constructor Create; destructor Destroy; override; procedure Connect; procedure Disconnect; function ReadIRPCState(var Report:TIRPCReport):boolean; procedure WriteIRPCcmd(cmd:TIRPCReport); procedure LoadIRcodes(irFile:string); function BtnName(btnCode:word):string;overload; function BtnName(btnCode:string):string;overload; property Connected:boolean read IsConnected; property Device:TJvHidDevice read Dev; property IRButtons:TStringList read fIRButtons; property IRName:string read fIRName; end; 


рджреЗрд╡ рдлрд╝реАрд▓реНрдб рдбрд┐рд╡рд╛рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрддрдХ рд╣реИ, рд╣рдо рдЗрд╕реЗ рддрдм рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдХрдиреЗрдХреНрд╢рди рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ (рдХрдиреЗрдХреНрдЯ)ред
рдЬрдм рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ (рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ) рдпрд╣ рд╢реВрдиреНрдп рдкрд░ рд╕реЗрдЯ рд╣реИред

рд╡рд┐рдзрд┐рдпрд╛рдВ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рджрд┐рдЦрд╛рдКрдВрдЧрд╛, рдмрд╛рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рдЙрд╕реА рдХреНрд░рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИрдВ:
 procedure TIRPC.Connect; begin if Assigned(dev) then Exit; HID.CheckOutByID(Dev,VID,Pid); end; 


рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд┐рддрд┐ (рдХрдиреЗрдХреНрдЯреЗрдб рд╕рдВрдкрддреНрддрд┐) рджреЗрд╡ рд╕реВрдЪрдХ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ - рдпрджрд┐ рдпрд╣ рдЦрд╛рд▓реА рдирд╣реАрдВ рд╣реИ, рддреЛ рдХрдиреЗрдХреНрд╢рди рд╕рдлрд▓ рдерд╛ред

WriteIRPCcmd (cmd: TIRPCReport) рд╡рд┐рдзрд┐ рдЙрд╕ рдкреИрдХреЗрдЯ рдХреЗ рд╕рд╛рде рдХрдорд╛рдВрдб рднреЗрдЬрддреА рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рдкреНрд░реА-рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред
ReadIRPCState рд╡рд┐рдзрд┐ (var рд░рд┐рдкреЛрд░реНрдЯ: TIRPCReport): рдмреВрд▓рд┐рдпрди zaroshivaet рдПрдХ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдПрдХ рдкреИрдХреЗрдЯред рдпрджрд┐ рдкреИрдХреЗрдЯ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖ рдерд╛, рддреЛ рдпрд╣ рд╕рд╣реА рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдФрд░ рдкреИрдХреЗрдЯ рд╕реНрд╡рдпрдВ рд░рд┐рдкреЛрд░реНрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд▓реЛрдбрд┐рд░рдХреЛрдбреНрд╕ (irFile: string); - рд░рд┐рдореЛрдЯ рдХрдВрдЯреНрд░реЛрд▓ рдХреЗ рдмрдЯрдиреЛрдВ рдХреЗ рдирд╛рдо рдХреЗ рдкрддреНрд░рд╛рдЪрд╛рд░ рдХреА рдлрд╛рдЗрд▓ рдХреЛ рдЙрдирдХреЗ рдХреЛрдб рдореЗрдВ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИред рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдПрдХ рд╕рд░рд▓ рдкреНрд░рд╛рд░реВрдк рд╣реИ: рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рд╕реЗ рдЕрд▓рдЧ рдмрдЯрди рдХрд╛ рдирд╛рдо рдФрд░ рдХреЛрдб рд╣реЛрддрд╛ рд╣реИ
TVFM, $ FE01
рдпрд╣ рд╡рд┐рдзрд┐ рдкреНрд▓рдЧрдЗрди рдореЗрдВ рдорд╛рдВрдЧ рдореЗрдВ рдирд╣реАрдВ рд╣реИ - рдмрдЯрди рдХреЛрдб рдХреЛ рдорд┐рдХреНрд╕ рдХреЛ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрдк рдЦреБрдж рдЗрд╕реЗ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рдпрд╣ рдирд╣реАрдВ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдЗрд╕реЗ рдХреНрдпрд╛ рднреЗрдЬрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдЖрдк рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдирд╡ рдмрдЯрди рдирд╛рдо рджрд┐рдЦрд╛ рд╕рдХрддреЗ рд╣реИрдВред
BtnName рдлрд╝рдВрдХреНрд╢рди 16 рдмрд┐рдЯ рдорд╛рди рдпрд╛ рд╣реЗрдХреНрд╕ рдХреЗ рд╕рд╛рде рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХреЛрдб рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдмрдЯрди рдХрд╛ рдирд╛рдо рд▓реМрдЯрд╛рддрд╛ рд╣реИред
рдлрд╝рдВрдХреНрд╢рди BtnName (btnCode: рд╢рдмреНрдж): рд╕реНрдЯреНрд░рд┐рдВрдЧ; рдЕрдзрд┐рднрд╛рд░;
рдлрд╝рдВрдХреНрд╢рди BtnName (btnCode: string): рд╕реНрдЯреНрд░рд┐рдВрдЧ; рдЕрдзрд┐рднрд╛рд░;
IRButtons рдкреНрд░реЙрдкрд░реНрдЯреА рдореЗрдВ рдмрдЯрди рдФрд░ рдЙрдирдХреЗ рдХреЛрдб рдХреА рдПрдХ рд╕реВрдЪреА рд╣реЛрддреА рд╣реИ
рд╕рдВрдкрддреНрддрд┐ IRButtons: TStringList рдкрдврд╝реЗрдВ fIRButtons;
IRname рд╕рдВрдкрддреНрддрд┐ - рд▓реЛрдбрд░рдХреЛрдб рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рд▓реЛрдб рдХрд┐рдП рдЧрдП рд░рд┐рдореЛрдЯ рдХрдВрдЯреНрд░реЛрд▓ рдХрд╛ рдирд╛рдо (рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо .ir рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдмрд┐рдирд╛)ред
рдкреНрд░реЙрдкрд░реНрдЯреА IRName: string read fIRName;

рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рдкреИрдХреЗрдЬ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ?

 function TIRPC.ReadIRPCState; begin Result:=false; if not Assigned(dev) then Exit; Result:=dev.GetFeature(report,sizeof(TIRPCReport){Dev.Caps.FeatureReportByteLength}); end; 

GetFeature рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдкреИрдХреЗрдЯ рдХреЗ рд▓рд┐рдП рдмрдлрд░ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рдкреИрдХреЗрдЯ рдХреЛ рдЗрд╕рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдХреЛрдИ рдХрдиреЗрдХреНрд╢рди рдирд╣реАрдВ рд╣реИ, рддреЛ рд╡рд┐рдзрд┐ рдЭреВрдареА рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧреАред
рдкреИрдХреЗрдЯ рдХреЛ рдЙрд╕реА рддрд░рд╣ рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
  dev.SetFeature(cmd,SizeOf(cmd)); 


рджрд░рдЕрд╕рд▓ рдкреНрд▓рдЧрдЗрди рдЦреБрдж рдПрдХ dll рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛ рд╣реИред
рдЙрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЕрдкреЗрдХреНрд╖рд┐рдд рдХрд╛рд░реНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ:
рд╕рдХреНрд╖рдо, рдЕрдХреНрд╖рдо, GetName, GetInfo, GetVer, GetAuthor, IsInteractive, IsHavetettings;
рддрджрдиреБрд╕рд╛рд░, рд╕рдХреНрд╖рдо рдореЗрдВ, рд╣рдо рдХрдиреЗрдХреНрдЯ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЯрд╛рдЗрдорд░ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд░реАрдбрд╕реНрдЯреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рддреНрдпреЗрдХ 500 рдПрдордПрд╕ рдХреЛ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдкреНрд░рджреВрд╖рд┐рдд рдХрд░реЗрдЧрд╛, рдФрд░ рдпрджрд┐ рдпрд╣ рдмрдЯрди рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ MKey рдХреЛ рднреЗрдЬреЗрдВ:

 function Enable: boolean; stdcall; begin IRPCPlugin:=TIrPCPlugin.Create; IRPCPlugin.IRPC.Connect; tmrReadState:=TTimer.Create(nil); tmrReadState.Interval:=500; tmrReadState.OnTimer:=IRPCPlugin.ReadState; tmrReadState.Enabled:=true; result:=true; end; 


 procedure TIRPCPlugin.ReadState(Sender: TObject); var mainWnd:hWnd; pluginact:string; Btn:Word; begin IRPCPlugin.IRPC.Connect; If not IRPCPlugin.IRPC.Connected then MessageBox(0,'IRPC device not connected', 'IRPC', MB_ICONEXCLAMATION); if rep.cmd<>cmdGetIRPCState then begin rep.cmd:=cmdGetIRPCState; IRPCPlugin.IRPC.WriteIRPCcmd(rep); end; IRPCPlugin.IRPC.ReadIRPCState(rep); Btn:=rep.data[1] shl 8+rep.data[2]; If btn<>0 then begin pluginact:=Format('%x',[Btn]); mainwnd:=Findwindow('TMainForm', 'MKey'); SendMessage(mainwnd, WM_PLUGIN, plugin_interface_version, DWORD(PChar(pluginact))); end; end; 

рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ:
 function Disable: boolean; stdcall; begin IRPCPlugin.IRPC.Disconnect; FreeAndNil(IRPCPlugin); FreeAndNil(tmrReadState); result:=true; end; 


рдкреНрд▓рдЧ-рдЗрди рдФрд░ рдкреВрд░реНрдг рдирд┐рдпрдВрддреНрд░рдг рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдпреВрдПрдЪрдЖрдИрдбреА рдореЙрдбреНрдпреВрд▓ рд╕рдорд╛рди рд╣реИрдВред
рдореИрдВрдиреЗ рдЕрдм рддрдХ рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рд╕рдВрдХрд▓рд┐рдд рд░реВрдк рдореЗрдВ рд░рдЦрд╛ рд╣реИ, рдореИрдВ рд╕реНрд░реЛрдд рдХреЛрдб рдЕрдкрд▓реЛрдб рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкрд░ рдХрд╛рдо рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рдЕрднреА рднреА рдПрдХ рдЧрдбрд╝рдмрдбрд╝ рд╣реИ :) рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рд╕рднреНрдп рд╡рд┐рдХрд▓реНрдк рдХреИрд╕реЗ рд╣реЛрдЧрд╛, рдореИрдВ рдЗрд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдореЗрдВ рдбрд╛рд▓реВрдВрдЧрд╛ред
рдЬрдмрдХрд┐ рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
рдЫрд╡рд┐


рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рд╕рдм рдХреБрдЫ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрддрд╛рдпрд╛ред рдпрджрд┐ рдЖрдкрдХреЗ рдХреЛрдИ рдкреНрд░рд╢реНрди рд╣реИрдВ, рддреЛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдкреВрдЫреЗрдВ, рдореИрдВ рдЙрддреНрддрд░ рджреЗрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ред

рд╕реНрд░реЛрдд рдХреЛрдб


Source: https://habr.com/ru/post/In152034/


All Articles