рдЖрдИрдЖрд░ рд░рд┐рдореЛрдЯ рдХрдВрдЯреНрд░реЛрд▓ рджреНрд╡рд╛рд░рд╛ рд░реЛрдмреЛрдЯ рдирд┐рдпрдВрддреНрд░рдг рд╕реАрдЦрдирд╛


рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдореИрдВ рд░реЛрдмреЛрдЯ-рдореАрддрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реБрдЖ ред рдЗрд╕ рддрд░рд╣ рдХреЗ рд╢рд╛рдВрдд рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдмрдирд╛рдиреЗ рдФрд░ рд░реЛрдмреЛрдЯ рдХреЗ рд╢реБрд░реБрдЖрддреА рд▓реЙрдиреНрдЪ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓реЙрдиреНрдЪ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж рджрд┐рдорд┐рддреНрд░реАред
рд░реЛрдмреЛрдЯ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмреНрд▓реВрдЯреВрде рдФрд░ рд╡рд╛рдИ-рдлрд╛рдИ (рдПрдВрдбреНрд░реЙрдЗрдб рд╣реЗрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдХреБрдЫ рд╕рдордп рдмрд╛рдж рдореИрдВ рд░рд┐рдореЛрдЯ рдХрдВрдЯреНрд░реЛрд▓ рд╕реЗ рдорд┐рддрд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдкреВрд░реНрдгрдХрд╛рд▓рд┐рдХ рд░реЛрдмреЛрдЯ рдкрд░ рдмреЛрд░реНрдб рдореЗрдВ, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдЖрдИрдЖрд░ рд░рд┐рд╕реАрд╡рд░ рдерд╛ (рдЖрдЦрд┐рд░рдХрд╛рд░, рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдЖрдИрдЖрд░ рдпреБрджреНрдз рдХреЗ рд▓рд┐рдП рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛), рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХреЛрдб рддрдХ рдерд╛ред рдмрд╣реБрдд рдЬрд▓реНрджреА рдореИрдВ IRremote.h рд▓рд╛рдЗрдмреНрд░реЗрд░реА рджреНрд╡рд╛рд░рд╛ рдЬрд╛рд░реА рд░рд┐рдореЛрдЯ рдХрдВрдЯреНрд░реЛрд▓ рдХреБрдВрдЬреА рдХреЗ "рдХреЛрдб" рдХреЛ рдкрдврд╝ рдФрд░ рд▓рд┐рдЦрдХрд░ рдЕрдкрдиреЗ рдЯреЗрд▓реАрд╡рд┐рдЬрди рд░рд┐рдореЛрдЯ рдХрдВрдЯреНрд░реЛрд▓ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдЗрди "рдХреЛрдб" рдХреЛ рдХреЛрдб рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рдерд╛, рдЬреЛ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдирд╣реАрдВ рдерд╛: рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рддрд┐рднрд╛рдЧреА рдХреЛ рдХреЛрдб рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкрдврд╝рдирд╛ рдФрд░ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рд░рд┐рдореЛрдЯ рдХрдВрдЯреНрд░реЛрд▓ рдпрд╛ рдХрдорд╛рдВрдб рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдмрджрд▓рддреЗ рд╕рдордп, рдореБрдЭреЗ рд╕реНрдХреЗрдЪ рдореЗрдВ рдЗрди рд░рд┐рдореЛрдЯ рдХрдВрдЯреНрд░реЛрд▓ рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдФрд░ рдпрд╣ рдХрд┐рд╕реА рднреА рд░рд┐рдореЛрдЯ рдХрдВрдЯреНрд░реЛрд▓ рдХреЛ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдФрд░ рдмрд╕ рдЗрд╕рдХреЗ рд╕рд╛рде Mitya рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ!


рд░реЛрдмреЛрдЯ рд░рд┐рдореЛрдЯ рдХрдВрдЯреНрд░реЛрд▓ рдХрдорд╛рдВрдб рд╕реАрдЦрдирд╛


рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХреНрдпреЛрдВ рдФрд░ рд╣рд╛рдБ? рдЖрдЦрд┐рд░рдХрд╛рд░, EEPROM рдХреЗ Arduino 512 рдмрд╛рдЗрдЯреНрд╕ рдкрд░ рд╕рд╡рд╛рд░, рдЬреЛ 128 рдЯреАрдореЛрдВ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред (рдПрдХ "рдХреЛрдб" 4 рдмрд╛рдЗрдЯреНрд╕ рд▓реЗрддрд╛ рд╣реИ)ред рдореБрдЭреЗ рдЕрднреА 17 рдЯреАрдореЗрдВ рдорд┐рд▓реА рд╣реИрдВред рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИ рдХрд┐ рд░рд┐рдореЛрдЯ рдХрдВрдЯреНрд░реЛрд▓ рд╕реАрдЦрдиреЗ рд╡рд╛рд▓реЗ рд░реЛрдмреЛрдЯ рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдореИрдВ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рд░реЛрдмреЛрдЯ рдХреЗ рдЯреЗрд▓реАрдлреЛрди рднрд╛рдЧ рдХреА рднрд╛рдЧреАрджрд╛рд░реА рдХреЗ рдмрд┐рдирд╛ рднреА рдЙрддрдирд╛ рд╣реА рд╕рд░рд▓ рдФрд░ рд╡рд╛рдВрдЫрдиреАрдп рд╣реЛрдЧрд╛ (рдЕрдЪрд╛рдирдХ рдХреЛрдИ рд░реЛрдмреЛрдЯ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░реЗрдЧрд╛ рдФрд░ рдЙрд╕рдХреЗ рдкрд╛рд╕ рдПрдВрдбреНрд░реЙрдЗрдб рдлреЛрди рдирд╣реАрдВ рд╣реЛрдЧрд╛)ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд░реЛрдмреЛрдЯ рдХреА рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж, рдЗрд╕рдореЗрдВ рдПрдХ рд╕реНрдХреЗрдЪ рднрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рдмрд┐рдирд╛ рдХрд┐рд╕реА рдмрджрд▓рд╛рд╡ рдХреЗ рддреБрд░рдВрдд рд░реЛрдмреЛрдЯ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдЫреЛрдЯреА рдЬреАрдд рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬреЛ рдирдП рдкреНрд░рддрд┐рднрд╛рдЧреА рдХреЛ рдмрд╣реБрдд рдЦреБрд╢ рдХрд░реЗрдЧреА рдФрд░ рдЙрд╕рдХреЗ рдкрд╛рд╕ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреА рдкреНрд░реЗрд░рдгрд╛ рд╣реЛрдЧреА (рд░реЛрдмреЛрдЯ рдХреЗ рдПрдВрдбреНрд░реЙрдЗрдб рдФрд░ рд╡рд┐рдВрдбреЛрдЬ-рдкрд╛рд░реНрдЯреНрд╕ рдХреЗ рд╕рдВрдпреЛрдЬрди)ред - рд╣рдордиреЗ рддрдп рдХрд┐рдпрд╛ рдХрд┐ рдирдП рдкреНрд░рддрд┐рднрд╛рдЧреА рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдпрд╣ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдореЗрдВ рдПрдХ рд╡реНрдпрдХреНрддрд┐ рдПрдХ рд╕рдХрд╛рд░рд╛рддреНрдордХ рд░рд┐рд╡рд░реНрд╕ рджреЗрдЦрддрд╛ рд╣реИред рд╡рд┐рдХрд╛рд╕ рд╕реЗ рдХрдиреЗрдХреНрд╢рди, рдФрд░ рдЖрдзреЗ рд░рд╛рд╕реНрддреЗ рдХреЛ рдирд╣реАрдВ рдЫреЛрдбрд╝рд╛ рдЕрдЧрд░ рдХреБрдЫ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд░рд┐рдореЛрдЯ рдХрдВрдЯреНрд░реЛрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░рд┐рдореЛрдЯ рдХрдВрдЯреНрд░реЛрд▓ рдЯреАрдореЛрдВ рдкрд░ рдирд┐рд░реНрджреЗрд╢ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рд░реЛрдмреЛрдЯ рдХреЛ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЙрд╕реЗ рд╕реАрдЦрдиреЗ рдХрд╛ рд╕рдордп рд╣реИ, рд╡рд╣ рдореЛрд░реНрд╕ рдХреЛрдб рдореЗрдВ рд░рд┐рдореЛрдЯ рдХрдВрдЯреНрд░реЛрд▓ рдкрд░ рдХрд┐рд╕реА рднреА рдХреБрдВрдЬреА рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░реЗрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдХреНрд╖рд░ K (рдореИрдВрдиреЗ рдЕрдкрдиреА рдкрддреНрдиреА рдХрд╛ рдирд╛рдо рдЕрдкрдиреА рдкрддреНрдиреА рдХрддреНрдпреБрд╖рд╛ рдХреЗ рдирд╛рдо рдкрд░ рд░рдЦрд╛ рд╣реИ), рдЕрд░реНрдерд╛рдд рд▓рдВрдмрд╛ рдкреНрд░реЗрд╕, рдлрд┐рд░ рдЫреЛрдЯрд╛, рдлрд┐рд░ рд╕реЗ рд▓рдВрдмрд╛ рдФрд░ рдЫреЛрдЯрд╛ред
рдЙрд╕рдХреЗ рдмрд╛рдж, рд░реЛрдмреЛрдЯ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рдЯреНрд░реЗрдирд┐рдВрдЧ рдореЛрдб рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рд╡рд╣ рдПрдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рдмрд╕ рдЗрд╕ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдлрд┐рд░ рдЕрдЧрд▓реЗ рдФрд░ рдЕрдВрддрд┐рдо рдХрд╛рд░реНрд░рд╡рд╛рдИ рддрдХред
рдЕрдВрдд рдореЗрдВ, рд╕рднреА рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдХрддреНрдпреБрд╢рд╛ рдиреЗ рдЙрд╕реЗ рдЦреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдордВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реБрдП рдиреГрддреНрдп рдореЗрдВ рдШреВрдордирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред



рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ


рдпрд╣ рд╕рдм рд╣рдорд╛рд░реЗ рд╕реНрдХреЗрдЪ robo_body.ino.
рд╕рднреА рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рд╣реИрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдпреЛрдЬрдирд╛ рдЕрдВрддрд░рд░рд╛рд╖реНрдЯреНрд░реАрдп рд╕реНрддрд░ рдкрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рд░реВрд╕реА рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдмреНрд▓реЙрдХ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЬреЛрдбрд╝рд╛ :)
рд╕рднреА рдХреЛрдб рдореЗрдВ рдХрдИ рдмреНрд▓реЙрдХ рд╣реЛрддреЗ рд╣реИрдВ:

рдкреБрд░рд╛рдиреЗ рдЖрджреЗрд╢реЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ

рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░, рдкреБрд░рд╛рдиреЗ рдХрдорд╛рдВрдб рдХреЛ рдореЗрдореЛрд░реА рд╕реЗ рд▓реЛрдб рдХрд░реЗрдВред рдпрджрд┐ рдЙрдиреНрд╣реЗрдВ рдкрд╣рд▓реЗ рджрд░реНрдЬ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рддреЛ рдХреБрдЫ рднреА рдбрд░рд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
 #include <EEPROM.h> ... const int IR_TOTAL_COMMANDS = 17; // Total Number of commands, that can be send by IR control unsigned long IrCommands[IR_TOTAL_COMMANDS]; // All command from remote control // Read all IR commands from EEPROM for(int i=0; i<sizeof(IrCommands); i++) { *((byte*)&IrCommands + i) = EEPROM.read(i); } 


IR рд░рд┐рдореЛрдЯ рдХрдВрдЯреНрд░реЛрд▓ рдкрд░ рдХреАрд╕реНрдЯреНрд░реЛрдХ рдХреА рдЬрд╛рдБрдЪ

рд╣рдо рдЬрд╛рдВрдЪрддреЗ рд╣реИрдВ рдХрд┐ рд░рд┐рдореЛрдЯ рдХрдВрдЯреНрд░реЛрд▓ рдХреЗ рдмрдЯрди рджрдмрд╛рдП рдЧрдП рд╣реИрдВ рдФрд░ рдХрд┐рддрдиреЗ рд╕рдордп рддрдХ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдХрдорд╛рдВрдб рд╣реИрдВрдбрд▓рд░ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред
рд░рд┐рдореЛрдЯ рдХрдВрдЯреНрд░реЛрд▓ рдкрд░ рдХрд┐рд╕реА рднреА рдмрдЯрди рдХреЛ рджрдмрд╛рдиреЗ рдХреЗ рдмрд╛рдж irrecv.decode(&results); рдмрдЯрди рдХреЛрдб рдХреЛ results.value рдореЗрдВ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдпрджрд┐ рдмрдЯрди рдХреЛ рдЕрднреА-рдЕрднреА рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрджрд┐ рдмрдЯрди рджрдмрд╛рдпрд╛ рдФрд░ рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдмрдЯрди рдХреЛрдб рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ IR_COMMAND_SEPARATOR = 0xFFFFFFFF рдмрдЯрди рдЬрд╛рд░реА рд╣реЛрдиреЗ рддрдХ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЖрд╡реГрддреНрддрд┐ рдХреЗ рд╕рд╛рде рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рджрдмрд╛рдиреЗ рдХреА рдЕрд╡рдзрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ - рддреЗрдЬреА рд╕реЗ IrRemoteButtonState = 1 , рд▓рдШреБ IrRemoteButtonState = 2 - рдХрдорд╛рдВрдб рдХреЗ рдмрд╛рдж рдПрдХ IR_COMMAND_SEPARATOR рдЖрдпрд╛, рдФрд░ рд▓рдВрдмреЗ IrRemoteButtonState = 3 - рджреЛ рдпрд╛ рдЕрдзрд┐рдХ IR_COMMAND_SEPARATOR ред
рдЕрд╡рдзрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рддреЗрдЬ рдФрд░ рдЫреЛрдЯреЗ рд╕рдордХрдХреНрд╖ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред

CheckIrCommands() рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдореБрдЦреНрдп loop() рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

 // Check if any IR remote buttons pressed void CheckIrCommands() { // If we're in programm mode, just check if buttons vere pressed there if(IsInIrProgrammMode) { IrProgrammatorProcess(); return; } if (irrecv.decode(&results)) { // Button was pressed for LONG or SHORT time, but not VERY SHORT ) if(results.value==IR_COMMAND_SEPARATOR) { if(IrRemoteButtonState<3) { // Set the IR remote button state IrRemoteButtonState++; } // Update last pressed button state IrLastCommandsState[0] = IrRemoteButtonState; }else { IrRemoteLastCommand = results.value; IrRemoteButtonState = 1; // Saving last pressed buttons and their state - we will use it to determine when to start IR programmator. for(int i=IR_LAST_COMMANDS_BUFFER_SIZE-1; i>0; i--) { IrLastCommandsState[i] = IrLastCommandsState[i-1]; IrLastCommandsValue[i] = IrLastCommandsValue[i-1]; } IrLastCommandsValue[0] = IrRemoteLastCommand; IrLastCommandsState[0] = 2; // For programmator mode short and very short press of the button is equal. checkIrHit(); // Check if robot was hit by another robot } ProcessIrCommands(); irrecv.resume(); } } 


рдЯреАрдо рдХреА рдкрд░рд┐рднрд╛рд╖рд╛

ProcessIrCommands() рдлрд╝рдВрдХреНрд╢рди рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЬреНрдЮрд╛рдд рдХреБрдВрдЬрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕ рдХреЛ рджрдмрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕реА рдХрдорд╛рдВрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред
рдпрджрд┐ рдХрдорд╛рдВрдб рдЕрдЬреНрдЮрд╛рдд рд╣реИ, рддреЛ рд▓рд░реНрдирд┐рдВрдЧ рдореЛрдб рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЛрд░реНрд╕ рдХреЛрдб (рд▓реЙрдиреНрдЧ-рд╢реЙрд░реНрдЯ-рд▓реЙрдиреНрдЧ-рд╢реЙрд░реНрдЯ) рдореЗрдВ рдПрдХ рд╣реА рдмрдЯрди рджрдмрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪреЗрдВред

 void ProcessIrCommands() { if(IrRemoteLastCommand==0) return; // The signal was not good enough to get the signal data // Check for known commands and executing them for(int i=0; i<IR_TOTAL_COMMANDS; i++) { if(IrCommands[i]==IrRemoteLastCommand) { executeIrCommand(i); return; } } // We recieved unknown command. Let's check if we need to enter in programmator mode. (Same button should be pressed in the following order: LONG->SHORT->LONG->SHORT if((IrLastCommandsValue[0]==IrLastCommandsValue[1])&&(IrLastCommandsValue[0]==IrLastCommandsValue[2])&&(IrLastCommandsValue[0]==IrLastCommandsValue[3]) &&(IrLastCommandsState[0]==2)&&(IrLastCommandsState[1]==3)&&(IrLastCommandsState[2]==2)&&(IrLastCommandsState[1]==3)) { // Starting Programmator mode. IrServoStep = IR_SERVO_STEP_PROGRAM_MODE; // Maximun step for Programm mode, so that user will notice servo movement IsInIrProgrammMode = true; IrProgrammatorStep = 0; executeIrCommand(0); // Executing command and waiting for user to press the button to save it. } } 


рдЯреАрдо рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди

 void executeIrCommand(int cmd) { switch(cmd) { case 0: // move forward moveMotor( "G", IR_MOVE_SPEED ); break; case 1: // move backwards moveMotor( "G", -IR_MOVE_SPEED ); break; case 2: // turn left moveMotor( "L", -IR_MOVE_SPEED ); moveMotor( "R", IR_MOVE_SPEED ); break; case 3: // turn right moveMotor( "L", IR_MOVE_SPEED ); moveMotor( "R", -IR_MOVE_SPEED ); break; case 4: //stop moveMotor( "G", 0 ); break; case 5: // Move Horizontal Head Left moveHead( "H", servoHeadHorizontal.read()-IrServoStep ); break; case 6: // Move Horizontal Head Right moveHead( "H", servoHeadHorizontal.read()+IrServoStep ); break; case 7: // Move Vertical Head Up moveHead( "V", servoHeadVertical.read()-IrServoStep ); break; case 8: // Move Vertical Head Down moveHead( "V", servoHeadVertical.read()+IrServoStep ); break; case 9: //no noSwinger.startSwing(90, 1, 400, 2.5, 60, 0.75, true); break; case 10: //yes yesSwinger.startSwing(60, 1, 400, 2.5, 30, 0.8, true); break; case 11: //tail tailSwinger.startSwing(90, 1, 250, 6, 70, 0.9, true); break; case 12: // Mood executeAction("M", 0x0102, true ); break; case 13: // Mood executeAction("M", 0x0103, true ); break; case 14: // Mood executeAction("M", 0x0104, true ); break; case 15: // Mood executeAction("M", 0x0105, true ); break; case 16: // Mood executeAction("M", 0x0106, true ); break; } } 


рдпрд╛рдж рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЖрджреЗрд╢

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

 void IrProgrammatorProcess() { if (irrecv.decode(&results)) { if((results.value!=IR_COMMAND_SEPARATOR)&&(results.value!=0)&&(results.value!=IrLastCommandsValue[0])) { IrCommands[IrProgrammatorStep]=results.value; if(IrProgrammatorStep==IR_TOTAL_COMMANDS-1) // Was it the last command? { // Save all IR commands to EEPROM for(int i=0; i<sizeof(IrCommands); i++) { EEPROM.write(i, *((byte*)&IrCommands + i) ); } IsInIrProgrammMode = false; IrServoStep = IR_SERVO_STEP_DEFAULT; executeIrCommand(2); // Tell the user that we finished programm mode }else { executeIrCommand(++IrProgrammatorStep); } } irrecv.resume(); } } 


SVN рдореЗрдВ рдкреВрд░реНрдг рдХреЛрдб: http://code.google.com/p/robot-mitya/source/checkout

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


All Articles