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

рдФрд░ рдпрд╣ Arduino рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдХреА рд╢реИрд▓реА рдореЗрдВ рдПрдХ рдЖрд░реЗрдЦ рд╣реИред

рдЕрдм рдбрд┐рдЬрд╛рдЗрди рдФрд░ рдХрд╛рдо рдХрд╛ рддрд░реНрдХред рдпреЛрдЬрдирд╛ рдФрд░ рдлреЛрдЯреЛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ред
рдЪрд╛рд░ рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЙрдкреНрд╕ рдХреА рдкреНрд░рд╛рдкреНрдд рдирд▓рд┐рдпреЛрдВ рдХреЛ рдЪрд╛рд░ рдмреЛрддрд▓реЛрдВ рдореЗрдВ рдЧрд┐рд░рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпреЗ рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрд╕реЗрд╕ MOSFET рдХреНрд╖реЗрддреНрд░ рдкреНрд░рднрд╛рд╡ рдЯреНрд░рд╛рдВрдЬрд┐рд╕реНрдЯрд░ рдкрд░ рдЗрдХрдЯреНрдареЗ рдЪрд╛рд░ рдХреБрдВрдЬреА рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реИрдВред рдЪрд╛рдмрд┐рдпрд╛рдБ, рдмрджрд▓реЗ рдореЗрдВ, рдХрд┐рд╕реА рднреА Arduina рдХреЗ 3,5,6,9 рдЯрд░реНрдорд┐рдирд▓реЛрдВ рд╕реЗ рдЬреБрдбрд╝реА рд╣реБрдИ рд╣реИрдВ (рдЖрдЧреЗ рдЕрдЧрд░ рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ **, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ Arduina рдХрд╛ рдирд┐рд╖реНрдХрд░реНрд╖)ред рдпрд╣ рдХрд╛рд░реНрдпрдХрд╛рд░реА рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдХрд╛рд░реНрдпрдХрд╛рд░реА рднрд╛рдЧ рдХрд╛ рддрд░реНрдХ рдкрд╛рдВрдЪ рдкреЛрдЯреЗрдВрд╢рд┐рдпреЛрдореАрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреНрд░рдо рдореЗрдВ: рдЯрд░реНрдорд┐рдирд▓ рдП 4 рд╕реЗ рдЬреБрдбрд╝реЗ рд╕рдмрд╕реЗ рдмрд╛рдПрдВ рдкреЛрдЯреЗрдВрд╢рд┐рдпреЛрдореАрдЯрд░ рдХреЗ рд╕рд╛рде, рдЧреНрд▓рд╛рд╕ рдХрд╛ рд╡реЙрд▓реНрдпреВрдо рд╕реЗрдЯ рдХрд░реЗрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдХреЙрдХрдЯреЗрд▓ рддреИрдпрд╛рд░ рдХрд░реЗрдВрдЧреЗред рдЗрд╕рдХреЗ рдКрдкрд░ рдЖрдкрдХреЛ 1628 рдПрд▓ рдИ рдбреА рдХрд╛ рдкреИрдорд╛рдирд╛ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рддрдерд╛рдХрдерд┐рдд рдкрд┐рдХреНрд╕реЗрд▓ рдбрдмреНрд▓реНрдпреВрдПрд╕ 2812 рдмреА рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЬрдм рд╣рдо рдкрд╣рд▓реЗ рдкреЛрдЯреЗрдВрд╢рд┐рдпреЛрдореАрдЯрд░ рдХреЛ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдореЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдПрд▓ рдИ рдбреА рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдЬрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рд╢рд░реНрдд рд░реВрдк рд╕реЗ рдХрд╛рдВрдЪ рдХреА рдорд╛рддреНрд░рд╛ рджрд┐рдЦрд╛рддреЗ рд╣реБрдПред рдпрд╣ рд╕реНрдХреЗрд▓ 11 рдкрд┐рди рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реИред
рдЕрдЧрд▓реЗ рдЪрд╛рд░ рд╕реНрд▓рд╛рдЗрдб рдкреЛрдЯреЗрдВрд╢рд┐рдпреЛрдореАрдЯрд░ (рдЯрд░реНрдорд┐рдирд▓реЛрдВ рдП 0, рдП 1, рдП 2, рдП 3 рд╕реЗ рдЬреБрдбрд╝реЗ) рдХреЗ рд╕рд╛рде рд╣рдо рдЙрд╕ рдкреЗрдп рдХреА рдХреБрд▓ рдорд╛рддреНрд░рд╛ рдХрд╛ рдЕрдиреБрдкрд╛рдд рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╣рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдмреЛрддрд▓ рд╕реЗ рдбрд╛рд▓рдирд╛ рд╣реИред рд╕реНрд▓рд╛рдЗрдбрд░реНрд╕ рдХреЗ рдКрдкрд░ 8 рдПрд▓ рдИ рдбреА рдХреЗ рдЫреЛрдЯреЗ рдкреИрдорд╛рдиреЗ рд╣реИрдВ (рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдПрдХ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ)ред рдмрдврд╝рддреЗ рд╣реБрдП рдкреЛрдЯреЗрдВрд╢рд┐рдпреЛрдореАрдЯрд░, рд╣рдо рдЕрдиреБрдкрд╛рдд рдФрд░ рдЫреЛрдЯреЗ рддрд░рд╛рдЬреВ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ, рдиреАрдЪреЗ рд╕реЗ рдКрдкрд░ рддрдХ, рдкреНрд░рддреНрдпреЗрдХ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд░рдВрдЧ рдХреЗ рд╕рд╛рде рдЪрд┐рддреНрд░рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдЙрд╕реА рд╕рдордп, рдмрд╛рдПрдВ рд▓рдВрдмреЗ рдкреИрдорд╛рдиреЗ рдкрд░, рдпрд╛ рдмрд▓реНрдХрд┐, рдЗрд╕рдХрд╛ рдореВрд▓ рд░реВрдк рд╕реЗ рдЬрд▓рд╛рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рд╣рд┐рд╕реНрд╕рд╛, рдЫреЛрдЯреЗ рд▓реЛрдЧреЛрдВ рдХреЗ рдЕрдиреБрдкрд╛рдд рдореЗрдВ рдЙрд╕реА рд░рдВрдЧреЛрдВ рдореЗрдВ рдЪрд┐рддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рддреБрд░рдВрдд рдХреЙрдХрдЯреЗрд▓ рдХреА рд░рдЪрдирд╛ рджреЗрдЦреЗрдВред рд╣рдо рдмрдЯрди рджрдмрд╛рддреЗ рд╣реИрдВ (рдкрд┐рди 7), рдФрд░ рдкрдВрдк рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдмрд╛рдПрдВ рд╕реЗ рджрд╛рдПрдВ рдореБрдбрд╝рддреЗ рд╣реИрдВ, рдЧрд┐рд▓рд╛рд╕ рдореЗрдВ рдкреЗрдп рдлрд┐рдЯрд┐рдВрдЧ рдХрд░рддреЗ рд╣реИрдВред
рд╕реНрдХреЗрдЪ рдореЗрдВ, рдЖрдк рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
1. рд╕рднреА рддрд░рд╛рдЬреВ рдХреЗ рд╕рдХреНрд░рд┐рдп рд░рдВрдЧ, рдЙрдирдХреА рдкреГрд╖реНрдарднреВрдорд┐ рд░реЛрд╢рдиреАред
2. рдкрдВрдкреЛрдВ рдХреА рдЧрддрд┐, рдкрд▓реНрд╕-рдЪреМрдбрд╝рд╛рдИ рдореЙрдбреБрд▓рди рджреНрд╡рд╛рд░рд╛ред рдЗрд╕рд▓рд┐рдП, рдкрдВрдкреЛрдВ рдореЗрдВ рд░рд┐рд▓реЗ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЯреНрд░рд╛рдВрдЬрд┐рд╕реНрдЯрд░ рд╕реНрд╡рд┐рдЪред рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдпрджрд┐ рдЖрдк, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдХрд╛рд░ рдЧреНрд▓рд╛рд╕ рд╡реЙрд╢рд░ рдкрдВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рд╡рд╣ рдмрд╣реБрдд рдЙрддреНрдкрд╛рджрдХ рд╣реИред
3. рдХрд╛рдВрдЪ рдХреА рдЕрдзрд┐рдХрддрдо рднреМрддрд┐рдХ рдорд╛рддреНрд░рд╛ред рдбрд┐рдлрд╝реЙрд▓реНрдЯ 750 рдорд┐рд▓реАрд▓реАрдЯрд░ рд╣реИред
4. рд░реАрдбрдЖрдЙрдЯ рдФрд░ рд╕рдВрдХреЗрдд рдХреЗ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рджреНрд░рд╡ рд╕рдХреНрд╢рди рдХрд╛ рд╕рдордпред рдпрд╣ рдПрдХ рдард╣рд░рд╛рд╡ рдХреЗ рджреМрд░рд╛рди рдЦрд╛рд▓реА рдЯреНрдпреВрдм рдХреЛ рднрд░рдирд╛ рд╣реИред
5. рдЕрдЧрд▓реА рдмреЛрддрд▓ рд╕реЗ рдкрд░реЛрд╕рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд░реБрдХреЗрдВред
6. рдПрд▓ рдИ рдбреА рдореЗрдВ рддрд░рд╛рдЬреВ рдХрд╛ рдЖрдХрд╛рд░ред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ 16 рдПрд▓рдИрдбреА рд╣реИрдВ рдФрд░ рдЫреЛрдЯреЗ рдореЗрдВ рдЖрда рдПрд▓рдИрдбреА рд╣реИрдВред рдЖрдк рдЕрдкрдиреА рдЗрдЪреНрдЫрд╛рдиреБрд╕рд╛рд░ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╕реБрдВрджрд░ рд╣реЛрдЧрд╛ред
рдХреБрдЫ рдЗрд╕ рддрд░рд╣ред
рдпрд╣ рдПрдХ рдбреЗрдореЛ рд╡реАрдбрд┐рдпреЛ рд╣реИред
рдореИрдВ рд╢реБрд░реБрдЖрдд рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдбрд┐рдЬрд╛рдЗрди рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВред Arduin рдореЗрдВ рд╕реНрдХреЗрдЪ рдбрд╛рд▓реЗрдВ рдФрд░ рдмрд╛рд░рдЯреЗрдВрдбрд░ рдХреА рд╕реЗрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдЦреЗрд▓реЗрдВред рдЬрдм рдЖрдкрдХреА рдЖрдБрдЦреЗрдВ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдЕрднреНрдпрд╕реНрдд рд╣реЛ рдЬрд╛рддреА рд╣реИрдВ рдФрд░ рдЖрдк рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдирдП рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрдЯреЙрдк рдмрдЯрди рдпрд╛ рдЖрдЗрд╕ рдмрдЯрдиред рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЖрдЗрд╕ рдХреНрдпреВрдм рдХреА рдорд╛рддреНрд░рд╛ рдХреЗ рдЕрдиреБрдкрд╛рдд рдореЗрдВ рдкреЗрдп рдХреА рдХреБрд▓ рдорд╛рддреНрд░рд╛ рдХреЛ рдХрдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╡рдпрд╕реНрдХ рдиреМрд╕рд┐рдЦрд┐рдпрд╛ рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдкрдХрдбрд╝ рд▓реЗрдВрдЧреЗред рдФрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рдзреАрд░реЗ-рдзреАрд░реЗ рдбрд┐рдЬрд╛рдЗрди рдФрд░ рдХреЛрдб рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ рдФрд░ рдЕрдкрдиреЗ рдмрдЪреНрдЪреЛрдВ рдХреЗ рд╕рд╛рде рдХрдИ рдФрд░ рд╕реНрддрд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рдЖрддреНрдо-рд╕рдореНрдорд╛рди рдмрдврд╝рд╛рдПрдВрдЧреЗред
рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдкреНрддрд╛рд╣рд╛рдВрдд рд╣реИ!
рдФрд░ рдирд┐рд╖реНрдХрд░реНрд╖ рдореЗрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рд╡реАрдбрд┐рдпреЛ рдореЗрдВ, рдореИрдВ рдЯрд┐рдкреНрдкрдгреА рдФрд░ рд╕реБрдЭрд╛рд╡ рджреЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред рдореИрдВ рдЗрд╕реЗ рдирд┐рд░рдВрддрд░рддрд╛ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦреВрдВрдЧрд╛ред
рдпрд╣рд╛рдВ рдХреЛрдб (рд╕реНрдХреЗрдЪ) рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ ред рдпрд╛ рджреЗрдЦреЗрдВ:
рдЖрдкрдХреЛ Adafruit_NeoPixel.h - рдПрд▓рдИрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдФрд░
PinChangeInt.h -
рдЕрдВрддрд░рд╛рд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЪрд╛рд╣рд┐рдПред
#include <Adafruit_NeoPixel.h> #include <PinChangeInt.h> #define START_PIN 7 #define LEDS_PIN 11 #define VOLUME_1_PIN A0 #define VOLUME_2_PIN A1 #define VOLUME_3_PIN A2 #define VOLUME_4_PIN A3 #define TOTAL_VOLUME_PIN A4 #define ACT_1_PIN 3 #define ACT_2_PIN 5 #define ACT_3_PIN 6 #define ACT_4_PIN 9 #define DRINKS_NUM 4 #define PIXEL_IN_STICK 8 #define PIXEL_IN_DRINK PIXEL_IN_STICK #define PIXEL_IN_VOLUME (2 * PIXEL_IN_STICK) #define PIXEL_NUM (DRINKS_NUM * PIXEL_IN_DRINK + PIXEL_IN_VOLUME) #define VOLUME_START_PIXEL 0 #define DRINKS_START_PIXEL (VOLUME_START_PIXEL + PIXEL_IN_VOLUME) #define DRINK_START_PIXEL(DRINK) (DRINKS_START_PIXEL + DRINK * PIXEL_IN_DRINK) #define BACKGROUND_COLOUR ((uint32_t) 0x000001) #define SHADOW_1_COLOUR ((uint32_t) 0x000100) #define SHADOW_2_COLOUR ((uint32_t) 0x000100) #define SHADOW_3_COLOUR ((uint32_t) 0x000100) #define SHADOW_4_COLOUR ((uint32_t) 0x000100) #define PROCESS_1_COLOUR ((uint32_t) 0xFF0000) #define PROCESS_2_COLOUR ((uint32_t) 0x0100ff) #define PROCESS_3_COLOUR ((uint32_t) 0x111100) #define PROCESS_4_COLOUR ((uint32_t) 0xFF00FF) #define VOLUME_PROCESS_COLOUR ((uint32_t) 0x888888) #define DataThreshold ((uint16_t) (1024/PIXEL_IN_DRINK)) #define DataThresholdVol ((uint16_t) (1024/PIXEL_IN_VOLUME)) #define PROCESS (1 << 0) #define mlToTimeCoef 10 // 1 , #define MIN_VOLUME 1 // , #define MAX_VOLUME ((uint32_t) 750) // #define mlForLED ((float)((float)MAX_VOLUME / (float)PIXEL_IN_VOLUME)) #define PREPROCESS_DELAY ((uint32_t) 2000) // #define PUMP_POWER ((uint16_t) 255) // 0 () 255 () #define WaitShowDelay ((uint16_t) 300) //2 * WaitShowDelay - #define WaitCycle 3 // = WaitCycle * 2 * WaitShowDelay #define EndDelay ((uint16_t) 2500) // typedef struct { uint8_t VolPin; uint8_t ActPin; uint16_t Volume; // uint32_t ProcColour; uint32_t ShadColour; float mlVol; // uint8_t LEDsNum; uint8_t LEDsPos; } DrinkType; Adafruit_NeoPixel LEDS = Adafruit_NeoPixel(PIXEL_NUM, LEDS_PIN, NEO_GRB + NEO_KHZ800); uint8_t State = 0; uint16_t TotalVolume = 0; float TotalVolml = 0; uint8_t TotVolActLEDs = 0; bool ColourMix = false; uint32_t NewColour = 0; bool SystemChange = false; DrinkType Drinks[DRINKS_NUM]; void setup() { digitalWrite(START_PIN, HIGH); uint8_t VolPINs[DRINKS_NUM] = {VOLUME_1_PIN, VOLUME_2_PIN, VOLUME_3_PIN, VOLUME_4_PIN}; uint8_t ActPINs[DRINKS_NUM] = {ACT_1_PIN, ACT_2_PIN, ACT_3_PIN, ACT_4_PIN}; uint32_t ProcCOLOURs[DRINKS_NUM] = {PROCESS_1_COLOUR, PROCESS_2_COLOUR, PROCESS_3_COLOUR, PROCESS_4_COLOUR}; uint32_t ShadCOLOURs[DRINKS_NUM] = {SHADOW_1_COLOUR, SHADOW_2_COLOUR, SHADOW_3_COLOUR, SHADOW_4_COLOUR}; for(uint8_t i = 0; i < DRINKS_NUM; i++) { Drinks[i].VolPin = VolPINs[i]; Drinks[i].ActPin = ActPINs[i]; pinMode(Drinks[i].ActPin, OUTPUT); digitalWrite(Drinks[i].ActPin, LOW); Drinks[i].Volume = 0; Drinks[i].ProcColour = ProcCOLOURs[i]; Drinks[i].ShadColour = ShadCOLOURs[i]; Drinks[i].LEDsPos = 0; } PCintPort::attachInterrupt(START_PIN, &START_ISR, FALLING); LEDS.begin(); for(byte i=0; i < PIXEL_NUM; i++) LEDS.setPixelColor(i, BACKGROUND_COLOUR); LEDS.show(); } //---------------------------------------- void loop() { if ((State & PROCESS) != PROCESS) { uint16_t Data; for(uint8_t cup = 0; cup < DRINKS_NUM; cup++) { Data = analogRead(Drinks[cup].VolPin); if (abs(Data - Drinks[cup].Volume) >= DataThreshold) { Drinks[cup].Volume = Data; if (Drinks[cup].Volume > 975) Drinks[cup].Volume = 1024; uint8_t StartPixel = DRINK_START_PIXEL(cup); for(byte i = StartPixel; i < (StartPixel + PIXEL_IN_DRINK); i++) LEDS.setPixelColor(i, Drinks[cup].ShadColour); for(byte i = StartPixel; i < (StartPixel + (Drinks[cup].Volume / DataThreshold)); i++) LEDS.setPixelColor(i, Drinks[cup].ProcColour); SystemChange = true; } } Data = analogRead(TOTAL_VOLUME_PIN); if (abs(Data - TotalVolume) >= DataThresholdVol) { TotalVolume = Data; if (TotalVolume > 975) TotalVolume = 1024; TotVolActLEDs = TotalVolume / DataThresholdVol; for(byte i = VOLUME_START_PIXEL; i < (VOLUME_START_PIXEL + PIXEL_IN_VOLUME); i++) LEDS.setPixelColor(i, BACKGROUND_COLOUR); SystemChange = true; } if (SystemChange) { TotalVolml = (float)((TotalVolume * MAX_VOLUME) / 1024); uint16_t MinVol = 1025; for(uint8_t cup = 0; cup < DRINKS_NUM; cup++) { if ((Drinks[cup].Volume < MinVol) && (Drinks[cup].Volume != 0)) MinVol = Drinks[cup].Volume; } float OnePartVol = 0; for(uint8_t cup = 0; cup < DRINKS_NUM; cup++) { Drinks[cup].mlVol = (float)Drinks[cup].Volume / (float)MinVol; OnePartVol += Drinks[cup].mlVol; } OnePartVol = TotalVolml / OnePartVol; for(uint8_t cup = 0; cup < DRINKS_NUM; cup++) { Drinks[cup].mlVol *= OnePartVol; Drinks[cup].LEDsNum = Drinks[cup].mlVol / mlForLED; if ((Drinks[cup].mlVol > 0) && (Drinks[cup].LEDsNum < 1)) Drinks[cup].LEDsNum = 1; } uint8_t LEDsSum = 0; for(uint8_t cup = 0; cup < DRINKS_NUM; cup++) LEDsSum += Drinks[cup].LEDsNum; if ((LEDsSum > 0) && (LEDsSum <= TotVolActLEDs)) { uint8_t LedsNumMAX = Drinks[0].LEDsNum; uint8_t LedsNumMAXPos = 0; for(uint8_t cup = 1; cup < DRINKS_NUM; cup++) { if (Drinks[cup].LEDsNum > LedsNumMAX) { LedsNumMAX = Drinks[cup].LEDsNum; LedsNumMAXPos = cup; } } Drinks[LedsNumMAXPos].LEDsNum += TotVolActLEDs - LEDsSum; Drinks[0].LEDsPos = VOLUME_START_PIXEL; for(uint8_t cup = 1; cup < DRINKS_NUM; cup++) Drinks[cup].LEDsPos = Drinks[cup - 1].LEDsPos + Drinks[cup - 1].LEDsNum; ColourMix = false; } else if (LEDsSum > TotVolActLEDs) { for(uint8_t cup = 0; cup < DRINKS_NUM; cup++) { Drinks[cup].LEDsNum = TotVolActLEDs; Drinks[cup].LEDsPos = VOLUME_START_PIXEL; } ColourMix = true; NewColour = 0; for(uint8_t cup = 0; cup < DRINKS_NUM; cup++) NewColour |= Drinks[cup].ProcColour; } bool EmptyCup = true; for(uint8_t cup = 0; cup < DRINKS_NUM; cup++) { if (Drinks[cup].LEDsNum != 0) { EmptyCup = false; break; } } if (EmptyCup) { for(byte i = VOLUME_START_PIXEL; i < (VOLUME_START_PIXEL + TotVolActLEDs); i++) LEDS.setPixelColor(i, VOLUME_PROCESS_COLOUR); } else { if (ColourMix) { for(byte i = VOLUME_START_PIXEL; i < (VOLUME_START_PIXEL + TotVolActLEDs); i++) LEDS.setPixelColor(i, NewColour); } else { for(uint8_t cup = 0; cup < DRINKS_NUM; cup++) { if (Drinks[cup].LEDsNum != 0) { for(byte i = Drinks[cup].LEDsPos; i < (Drinks[cup].LEDsPos + Drinks[cup].LEDsNum); i++) LEDS.setPixelColor(i, Drinks[cup].ProcColour); } } } } SystemChange = false; } LEDS.show(); } else { uint8_t LEDSPos[DRINKS_NUM]; uint8_t LEDSNum[DRINKS_NUM]; for(uint8_t cup = 0; cup < DRINKS_NUM; cup++) { LEDSPos[cup] = Drinks[cup].LEDsPos; LEDSNum[cup] = Drinks[cup].LEDsNum; } for(uint8_t cup = 0; cup < DRINKS_NUM; cup++) { if (Drinks[cup].LEDsNum != 0) { float Volume = Drinks[cup].mlVol; uint16_t VolCnt = 0; uint16_t mlPerLEDCoef = Volume / LEDSNum[cup]; analogWrite(Drinks[cup].ActPin, PUMP_POWER);// delay(PREPROCESS_DELAY); while (Volume >= MIN_VOLUME) { delay(mlToTimeCoef * MIN_VOLUME); Volume -= MIN_VOLUME; VolCnt += MIN_VOLUME; { if (VolCnt >= mlPerLEDCoef) { if (ColourMix) { } else { if (LEDSNum[cup] != 0) { for(byte i = VOLUME_START_PIXEL; i < (VOLUME_START_PIXEL + PIXEL_IN_VOLUME); i++) LEDS.setPixelColor(i, BACKGROUND_COLOUR); if (LEDSNum[cup] > 0) LEDSNum[cup]--; for(uint8_t i = 0; i < DRINKS_NUM; i++) { if (LEDSPos[i] > 0) LEDSPos[i]--; } for(uint8_t i = 0; i < DRINKS_NUM; i++) { if (Drinks[i].LEDsNum != 0) { for(byte j = LEDSPos[i]; j < (LEDSPos[i] + LEDSNum[i]); j++) LEDS.setPixelColor(j, Drinks[i].ProcColour); } } } } LEDS.show(); VolCnt = 0; } } } analogWrite(Drinks[cup].ActPin, 0);// if (cup < (DRINKS_NUM - 1)) { uint8_t StickNum = cup + 1; uint8_t StartPixel = DRINK_START_PIXEL(StickNum); for (uint8_t BlinkTime = 0; BlinkTime < WaitCycle; BlinkTime++) { for(byte i = StartPixel; i < (StartPixel + PIXEL_IN_DRINK); i++) LEDS.setPixelColor(i, Drinks[cup+1].ShadColour); LEDS.show(); delay(WaitShowDelay); for(byte i = StartPixel; i < (StartPixel + (Drinks[cup+1].Volume / DataThreshold)); i++) LEDS.setPixelColor(i, Drinks[cup+1].ProcColour); LEDS.show(); delay(WaitShowDelay); } } } } delay(EndDelay); if (ColourMix) { for(byte i = VOLUME_START_PIXEL; i < (VOLUME_START_PIXEL + TotVolActLEDs); i++) LEDS.setPixelColor(i, NewColour); } else { for(uint8_t cup = 0; cup < DRINKS_NUM; cup++) { if (Drinks[cup].LEDsNum != 0) { for(byte i = Drinks[cup].LEDsPos; i < (Drinks[cup].LEDsPos + Drinks[cup].LEDsNum); i++) LEDS.setPixelColor(i, Drinks[cup].ProcColour); } } } State &= ~PROCESS; } } //---------------------------------------- void START_ISR() { State |= PROCESS; }