"рдХреНрдпрд╛ рдорд╛рд░рд┐рдирд╕?" рдпрд╛ рд╣рдо Xamarin (Android) рдкрд░ рдПрдХ рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмреНрд▓реВрдЯреВрде рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ

рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВрдиреЗ UART рдХреЗ рдмреНрд▓реВрдЯреВрде рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ CANNY 3 рдЫреЛрдЯреЗ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХрд╛ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдерд╛ред рдФрд░ рдЬрдм рд╕реЗ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрди рдордИ рдХреА рдЫреБрдЯреНрдЯрд┐рдпреЛрдВ рдкрд░ рдирд╣реАрдВ рдЪрд▓реЗрдВрдЧреЗ, рддрдм рддрдХ рд▓рд╛рдн рдХреЗ рд╕рд╛рде рд╕рдордп рдмрд┐рддрд╛рдирд╛ рдФрд░ рдЕрднреА рднреА рд╡рд╛рджрд╛ рдирд┐рднрд╛рдирд╛ рддрдп рдерд╛ред рд▓реЗрдХрд┐рди рд╕рд┐рд░реНрдл рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЛ рдмреНрд▓реВрдЯреВрде рдЕрдбреЙрдкреНрдЯрд░ HC-06 рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ Habr рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред

рдЗрд╕рд▓рд┐рдП, рд╣рдо рдХреЗрд╡рд▓ рд╕рдм рдХреБрдЫ рдХрдиреЗрдХреНрдЯ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╣рдо C # рдФрд░ Xamarin рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рд╕рд░реНрдХрд┐рдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрджрд┐рдо Android рдПрдкреНрд▓рд┐рдХреЗрд╢рди рднреА рд▓рд┐рдЦреЗрдВрдЧреЗред

рдпрджрд┐ рдЖрдк "рд╕реАрдорд╛ рд╕реНрд╡рд┐рдЪ" рдФрд░ рд░реАрдб рд╕реНрд╡рд┐рдЪ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рд╣реИ, рддреЛ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗред



рдпрд╣рд╛рдВ рд╣рдо рдЖрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ:

рднрд╛рдЧ I: рдкрд░рд┐рдЪрдп
рднрд╛рдЧ II: CANNY 3 рдЫреЛрдЯреЗ
рднрд╛рдЧ III рдХреЗ рд▓рд┐рдП рд╕рд░реНрдХрд┐рдЯ рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ : рд╣рдо рдПрдВрдбреНрд░реЙрдЗрдб рдкрд╛рд░реНрдЯ IV рдХреЗ рд▓рд┐рдП рдЬрд╝рд╛рдорд░реАрди рдкрд░ рдПрдХ рдЖрд╡реЗрджрди рд▓рд┐рдЦрддреЗ рд╣реИрдВ
: рдирд┐рд╖реНрдХрд░реНрд╖

рднрд╛рдЧ I: рдкрд░рд┐рдЪрдп


рдореИрдВ рд╕реА # рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб рдХреЗ рд╕рдореНрдорд┐рд▓рди рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдПрдХ рдЕрдЪреНрдЫреЗ рд╕реЗ рд╢реБрд░реВ рдХрд░реВрдВрдЧрд╛, рддреЛ рдЗрд╕ рдмрд╛рд░ рд▓реЗрдЦ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЫреЛрдЯрд╛ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдкрд╣рд▓реЗ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдмреБрдирд┐рдпрд╛рджреА рддрдХрдиреАрдХреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХреА рдереАред рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рди рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ рдЙрди рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рджреА рдЧрдИ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА CANYYNY рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рддрд░реАрдХреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХреА рд╣реИ:

  1. "рдПрдХ, рджреЛ, рддреАрди - рдХреНрд░рд┐рд╕рдорд╕ рдХрд╛ рдкреЗрдбрд╝ рдЬрд▓рд╛рдУ!" рдпрд╛ CANNY 3 рдЫреЛрдЯреЗ рдирд┐рдпрдВрддреНрд░рдХ рдкрд░ рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рдирдЬрд╝рд░ - рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдордиреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдпрд╛ рдХрд┐ рдирд┐рдпрдВрддреНрд░рдХ рдХреНрдпрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде CannyLab рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдореВрд▓ рдмрд╛рддреЗрдВред
  2. "рдбреЗрд╕реНрдЯрд┐рдиреЗрд╢рди рдХреЗ рдкрд╛рд╕ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдорд╛рд░реНрдЧрджрд░реНрд╢рдХ рд╣реИрдВ ..." рдпрд╛ рд╣рдо CANNY 3 рдЫреЛрдЯреЗ рдФрд░ рдПрдХ рдлреЛрдЯреЛрд░рд┐рд╕реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рджреАрдкрдХ рдХреЗ рдирд┐рдпрдВрддреНрд░рдг рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ - рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдордиреЗ USB рд╡рд░реНрдЪреБрдЕрд▓ COM-рдкреЛрд░реНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реБрдП, рд╕реЗрдВрд╕рд░ рдХреЛ ADC рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдирд┐рдпрдВрддреНрд░рдХ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рдЙрдЪреНрдЪ рдЖрд╡реГрддреНрддрд┐ рд╡рд╛рд▓реЗ PWM рдХреЛ рджреЗрдЦрд╛ред
  3. ┬л ...┬╗ (CANNY Arduino) Raspberry PI тАФ UART, .

рдЗрд╕ рд▓реЗрдЦ рдХреЛ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ, рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛: CANNY 3 рдЫреЛрдЯреЗ рдирд┐рдпрдВрддреНрд░рдХ, HC-06 рдмреНрд▓реВрдЯреВрде рдПрдбрд╛рдкреНрдЯрд░, рд▓рд┐рдорд┐рдЯ рд╕реНрд╡рд┐рдЪ (рдЯреНрд░реЗрдорд╛ рдореЙрдбреНрдпреВрд▓), рд░реАрдб рд╕реНрд╡рд┐рдЪ, рдкреБрд░рд╛рдиреЗ рд╡рд╛рдпрд░реНрдб рд╣реЗрдбрдлрд╝реЛрди, рдмреНрд░реЗрдбрдмреЛрд░реНрдб, рддрд╛рд░, рдордЧрд░рдордЪреНрдЫред

рд╣рдо рдПрдХ рдРрд╕реА рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рдПрдХ рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рджреЛ рд╕реЗрдВрд╕рд░ рдХреА рд╕реНрдерд┐рддрд┐ рдкрд░ рдирдЬрд╝рд░ рд░рдЦрддрд╛ рд╣реИ рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЕрд▓рд╛рд░реНрдо рдзреНрд╡рдирд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

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

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



рдЦреИрд░, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдПрдХ рдиреЛрдЯред рдореИрдВ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдкрд░рдо рд╕рддреНрдп рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рджреГрдврд╝рддрд╛ рд╕реЗ рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВред рдореИрдВрдиреЗ рдЦреБрдж рд╕реЗ рдкрд╣рд▓реА рдмрд╛рд░ рдХрдИ рдХрд╛рдо рдХрд┐рдП, рд╡реЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдмреЗрд╣рддрд░ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред


рднрд╛рдЧ II: CANNY 3 рдЫреЛрдЯреЗ рдХреЗ рд▓рд┐рдП рд╕рд░реНрдХрд┐рдЯ рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдЬреЛрдбрд╝рдирд╛


рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рддрд╛рдХрд┐ рдХреЙрдкреАрд░рд╛рдЗрдЯ рдореЗрдВ рдХрд┐рд╕реА рдХреЛ рднреА рдареЗрд╕ рди рдкрд╣реБрдВрдЪреЗ, рдореИрдВрдиреЗ рдордВрдЪ рд╕реЗ рдЙрдзрд╛рд░ рд▓рд┐рдпрд╛ рдерд╛ , рд▓реЗрдХрд┐рди рдЕрдкрдиреЗ рдЖрдк рд╕реЗ рдореИрдВрдиреЗ HC-06 рд╕реЗ рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ , рдЗрд╕реЗ "рд╕реАрд░рд┐рдпрд▓ рдмреНрд▓реВрдЯреВрде рдЯрд░реНрдорд┐рдирд▓" рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдФрд░ рдХреБрдЫ рдЬрдм рдЖрд░реЗрдЦ рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣рд╛ рдерд╛ рдЖрдкрдХрд╛ рдХрд╛рд░реНрдпред

рдХрдиреЗрдХреНрд╢рди рдЖрд░реЗрдЦ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:



рд╕реАрдорд╛ рд╕реНрд╡рд┐рдЪ рдФрд░ рд░реАрдб рд╕реНрд╡рд┐рдЪ рдХрдВрдЯреНрд░реЛрд▓рд░ рдирдВрдмрд░ 6 рдФрд░ рдирдВрдмрд░ 5 рдХреЗ рдЯрд░реНрдорд┐рдирд▓реЛрдВ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВ, рд╣реЗрдбрдлрд╝реЛрди рдЯрд░реНрдорд┐рдирд▓ рдирдВрдмрд░ 4 (рдЗрд╕рдореЗрдВ рдЖрд░рдПрдл рдкреАрдбрдмреНрд▓реВрдПрдо рд╣реИ), рдпреВрдПрдЖрд░ рдЖрд░рдПрдХреНрд╕ рдЯрд░реНрдорд┐рдирд▓ рдирдВрдмрд░ 1, рдпреВрдПрдЖрд░рдЯреА TX рдЯрд░реНрдорд┐рдирд▓ рдирдВрдмрд░ 2, рдЯрд░реНрдорд┐рдирд▓ рдирдВрдмрд░ 3 рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ "+ 5 рд╡реА", рдЖрдЙрдЯрдкреБрдЯ "-" - "рдЧреНрд░рд╛рдЙрдВрдб" рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдореЗрдВ рдРрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:



рдореИрдВрдиреЗ CannyLab рд╕рдВрд╕реНрдХрд░рдг 1.42 рдореЗрдВ CANNY 3 рдЫреЛрдЯреЗ рдХреЗ рд▓рд┐рдП рдЖрд░реЗрдЦ (рдХрд╛рд░реНрдпрдХреНрд░рдо) рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛, рд╢рд╛рдпрдж рд╡рд┐рдХрд╛рд╕ рдХреЗ рдЕрдиреНрдп рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдФрд░ рдЕрдиреНрдп рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЗ рд╕рд╛рде, рдЖрд░реЗрдЦ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛ред

рдпрд╣рд╛рдБ рдХреНрдпрд╛ рд╣реБрдЖ рд╣реИ:



рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ UART рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рд╕реЗ рдЬреБрдбрд╝реЗ рдмреНрд▓реЙрдХ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдбрд┐рд╕рд╛рдЗрдб рдХрд┐рдП рдЧрдП рдереЗ ред

рдЖрдЗрдП рд╢реЗрд╖ рджреЛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЬрд╛рдБрдЪ рдХрд░реЗрдВред

" рдкреНрд░рд╛рдкреНрдд UART рд╕рдВрджреЗрд╢ " рдмреНрд▓реЙрдХ рдореЛрд╣рд┐рдиреА (рд╣реЗрдбрдлрд╝реЛрди) рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, UART рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдпрд╣ рдЬрд╛рдВрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ UART рдореЗрдВ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рд╣рдо рдПрдХ рдХреЛ D- рдЯреНрд░рд┐рдЧрд░ рдЗрдирдкреБрдЯ тАЬEтАЭ рдкрд░ рднреЗрдЬрддреЗ рд╣реИрдВ, рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЯреНрд░рд┐рдЧрд░ тАЬDтАЭ рдЗрдирдкреБрдЯ рд╕реЗ рдореВрд▓реНрдп рдХреЛ рдХреЙрдкреА рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╣рдо UART рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╕рдВрджреЗрд╢ рд╕реЗ рдкрд╣рд▓реЗ рджреЛ рдЕрдХреНрд╖рд░ рд▓рд┐рдЦреЗрдВрдЧреЗред рдореИрдВ рд╕рдм рдХреБрдЫ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЖрдЧреЗ рдПрдХ рд╕рд░рд▓ рдпреЛрдЬрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ 00 рд╕реЗ 99 рддрдХ рдХреА рдХреЛрдИ рднреА рд╕рдВрдЦреНрдпрд╛ UART рджреНрд╡рд╛рд░рд╛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЖрдПрдЧреА, рд╣рдо рдЗрд╕ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдПрдХ рдкреНрд░рддреАрдХрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдПрдХ рдореЗрдВ рдмрджрд▓ рджреЗрдВрдЧреЗ (рдореИрдВ рдкрдврд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдХрдирд╡рд░реНрдЯрд░ рдмреНрд▓реЙрдХ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ , рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ "рдкреНрд▓рдЧ" рдерд╛)ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░рдореБрдЦ рдПрдЬ рдбрд┐рдЯреЗрдХреНрдЯрд░ рдХреЗ рдЗрдирдкреБрдЯ рдкрд░ рдХреЛрдИ рднреА "> 0" рдПрдХрд▓ рд╕рд┐рдЧреНрдирд▓ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ, рдЬреЛ рдЖрд░рдПрдл рдкреАрдбрдмреНрд▓реВрдПрдо рдореЛрдб рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реБрдП 5 рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ 5 рдкрд░ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред

рдЖрдк рдЖрд░рдПрдл рдкреАрдбрдмреНрд▓реВрдПрдо рдХреА рднрд░рдиреЗ рдХреА рдЕрд╡рдзрд┐ рдХреЗ рд╕рд╛рде рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдЦреЗрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рд╣реЗрдбрдлрд╝реЛрди рдореЗрдВ рдзреНрд╡рдирд┐ рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░реЗрдЧреАред

рдЪрд▓реЛ рдмреНрд▓реЙрдХ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ"рд╕рдВрджреЗрд╢ рдХрд╛ рдЧрдарди ред " рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рдЗрд╕рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрд╕рд╛рдорд╛рдиреНрдп рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдЗрд╕ рддрдереНрдп рд╕реЗ рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрд╛рдпрд╛ рдерд╛ рдХрд┐ рд╕реАрд░рд┐рдпрд▓ рдмреНрд▓реВрдЯреВрде рдЯрд░реНрдорд┐рдирд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд╕рд╛рде рдФрд░ рдЬрд╝рдорд╛рд░рд┐рди рдореЗрдВ рдПрдХ рд╣реА рдмреНрд▓реВрдЯреВрде рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рдПред

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

рдореИрдВрдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕рдВрдЪрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╣реИ, рдЬреЛ рдмрд┐рдирд╛ рдиреБрдХрд╕рд╛рди рдХреЗ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рд╣реИред

рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рд░реАрдб рд╕реНрд╡рд┐рдЪ рдФрд░ рд╕реАрдорд╛ рд╕реНрд╡рд┐рдЪ рдХреА рдЕрд╕рддрдд рд╕реНрдерд┐рддрд┐ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддреЗ рд╣реИрдВред рдпрд╣реА рд╣реИ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ 4 рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдВрдпреЛрдЬрди рд╣реИрдВ: рд░реАрдб рд╕реНрд╡рд┐рдЪ рдФрд░ рд╕реАрдорд╛ рд╕реНрд╡рд┐рдЪ рдмрдВрдж рд╣реИрдВ, рдХреЗрд╡рд▓ рдПрдХ рдЪрд╛рд▓реВ рд╣реИ, рджреЛрдиреЛрдВ рдЪрд╛рд▓реВ рд╣реИрдВред

рдЪреВрдВрдХрд┐ рд░реАрдб рд╕реНрд╡рд┐рдЪ рдФрд░ рд▓рд┐рдорд┐рдЯ рд╕реНрд╡рд┐рдЪ рдПрдХ рдЕрд╕рддрдд рд╕рдВрдХреЗрдд (0/1) рджреЗрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд░реАрдб рд╕рд┐рдЧреНрдирд▓ рдХреЗ рдореВрд▓реНрдп рдХреЛ 2 рд╕реЗ рдЧреБрдгрд╛ рдХрд░рддреЗ рд╣реИрдВред рдЕрдм рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╕рдВрдХреЗрддреЛрдВ рдХрд╛ рдпреЛрдЧ рд╣рдореЗрдВ 0 рд╕реЗ 3 рддрдХ рдорд╛рди

рджреЗрдЧрд╛ ред рдЕрдм рд╣рдо рдЗрд╕ рдореВрд▓реНрдп рдореЗрдВ рдкрдЪрд╛рд╕ рдЬреЛрдбрд╝ рдХреЗ рд╕рд╛рде рдПрдХ рдЧреИрд░-рд╕реНрдкрд╖реНрдЯ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ CannyLab UART рдХреЛ рдХреБрдЫ рдкрд╛рддреНрд░реЛрдВ рдХреЛ рднреЗрдЬрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд 3 рдХреЗ рдмрдЬрд╛рдп, рдЪрд▓реЛ 03 рдХрд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛ рдХрд┐ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рдЦреЛрдиреЗ рдХрд╛ рдЬреЛрдЦрд┐рдо рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рди 01 рд╕реЗ, рд╕реНрдорд╛рд░реНрдЯрдлреЛрди рдкрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ "0" рдХреЛ рдкрдврд╝ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛрдЧреАред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбреЗрдЯрд╛ рдХреЛ рдмрджрд▓рдирд╛ рдФрд░ рдмрджрд▓рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреБрдЫ рдЕрдХреНрд╖рд░ рдпрд╛ рд╕реНрдерд╛рди рдХреЗ рд╕рд╛рде рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд╛ "рдбреА 1" рдЪрд░рд┐рддреНрд░, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЗрд╕реЗ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдореИрдВрдиреЗ рдорд╛рди рдХреЛ 01 рд╕реЗ 51 (02 рд╕реЗ 52, рдЖрджрд┐) рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ред рдкрд╛рдБрдЪ рдПрдХ рд╕рд┐рдЧреНрдирд▓ рдирд╣реАрдВ рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕реНрдорд╛рд░реНрдЯрдлреЛрди рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реНрддрд░ рдкрд░ рдХрд╛рдЯ рджрд┐рдпрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рд╣рдореЗрд╢рд╛ рдЧрд╛рд░рдВрдЯреА рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рд╕рдВрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧреА рд╣рд┐рд╕реНрд╕рд╛ рдмрдирд╛ рд░рд╣реЗред

рд╣рдо рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдХрдВрдЯреНрд░реЛрд▓рд░ рдореЗрдВ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ, "рд░рди" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рдЕрдЧрд░ рд╕рдм рдХреБрдЫ рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рдПрдЪрд╕реА -06 рд╕рдордп-рд╕рдордп рдкрд░ рдПрдХ рд▓рд╛рд▓ рдПрд▓рдИрдбреА рдлреНрд▓реИрд╢ рдХрд░реЗрдЧрд╛ред

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

рдмреНрд▓реВрдЯреВрде рдПрдбреЗрдкреНрдЯрд░ рдХрд╛ рдкрддрд╛ рд▓рд┐рдЦреЗрдВ, рдпрд╣ рдЕрдЧрд▓реЗ рдЕрдзреНрдпрд╛рдп рдореЗрдВ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред



рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдбреЗрдЯрд╛ рдЖрддрд╛ рд╣реИ, рд╕реЗрдВрд╕рд░ рдХреА рд╕реНрдерд┐рддрд┐ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдЖрдк "11" рднреЗрдЬрддреЗ рд╣реИрдВ, рддреЛ рд╣реЗрдбрдлрд╝реЛрди рдореЗрдВ рдПрдХ рдЧрдВрджрд╛ рдЪреАрдЦрд╝ рд╕реБрдирд╛рдИ рджреЗрддреА рд╣реИред рд╣рдо рдпрд╣рд╛рдВ рд░реБрдХ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдЗрдП рдПрдХ рдЖрджрд┐рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕реНрдХреЗрдЪ рдХрд░реЗрдВред

рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдо рдФрд░ рд╕реНрдорд╛рд░реНрдЯрдлреЛрди рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рд╕реЛрд░реНрд╕ рдХреЛрдб GitHub рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

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

рднрд╛рдЧ III: Xamarin Android рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд▓рд┐рдЦрдирд╛


рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ Xamarin, рдЗрд╕реЗ рд╣рд▓реНрдХреЗ рдврдВрдЧ рд╕реЗ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдореЛрдмрд╛рдЗрд▓ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИред рдФрд░ рд╢рд╛рдпрдж рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╕рд╡рд╛рд▓ рд╣реИ: "рдореИрдВрдиреЗ рдЗрд╕реЗ рдХреНрдпреЛрдВ рдЪреБрдирд╛?" ред рдореИрдВ рдЙрд╕реА рдирд╛рдо рдХреЗ рдЧреАрдд рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдЬрд╡рд╛рдм рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬреЛ рдкреЛрд╕реНрдпрд╛ рдХреЛрд░реЛрд▓реЗрдВрдХреЛ рдиреЗ рд▓рд┐рдЦрд╛ рд╣реИ:



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

рдЦреИрд░, рдореИрдВ рдЖрдкрдХреЛ рдлрд┐рд░ рд╕реЗ рдпрд╛рдж рджрд┐рд▓рд╛ рджреВрдВред рдпрд╣ рдЬрд╝рд╛рдорд░реАрди рд╕реЗ рдореЗрд░реА рдкрд╣рд▓реА рдореБрд▓рд╛рдХрд╛рдд рд╣реИ рдФрд░ рдпрд╣ рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рдПрдВрдбреНрд░реЙрдЗрдб рдРрдк рд╣реИред рдореЗрд░реЗ рд╡рдХреНрд░ рдХреЛрдб рдХреЛ рдиреЗрддреНрд░рд╣реАрди рдХреЙрдкреА рди рдХрд░реЗрдВ, рдЕрдЧрд░ рдЕрдЪрд╛рдирдХ рдЖрдк рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрдВрджрд░ рд╕рдорд╛рдзрд╛рди рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдЕрдкрдирд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп, рдореИрдВ рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рдкрд░ рдирд┐рд░реНрднрд░ рдерд╛ред рд▓реЗрдЦ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЪрдмрд╛рдпрд╛ рдирд╣реАрдВ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕реНрдкреИрдирд┐рд╢ рдореЗрдВ рднреА, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЕрднреА рднреА рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдореЗрд░реА рднрд┐рдиреНрдирддрд╛ рдЖрдкрдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рдкрд╛рдпрд╛ред

рдореИрдВрдиреЗ рджреГрд╢реНрдп рд╕реНрдЯреВрдбрд┐рдпреЛ 2019 рд╕рд╛рдореБрджрд╛рдпрд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд░рдо рдмрдирд╛рдпрд╛ред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЪрд┐рддреНрд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдПрдХ рдирдпрд╛ рдЦрд╛рд▓реА Android рдкреНрд░реЛрдЬреЗрдХреНрдЯ (рдЬрд╝рд╛рдорд░реАрди) рдмрдирд╛рдПрдВред



рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рддреАрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд┐рдП рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ GitHub рдкрд░ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ , рдФрд░ рдпрд╣рд╛рдВ рд╣рдо рдХреЗрд╡рд▓ рдорд╣рддреНрд╡рдкреВрд░реНрдг рднрд╛рдЧреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗ:

AndroidManifest.xml

2 рдХреА рдЕрдиреБрдорддрд┐ рдорд╛рдирдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдЬреЛрдбрд╝реА рдЧрдИ рд╣реИрдВ:

  <uses-permission android:name="android.permission.BLUETOOTH"/>
  <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>

activity_main.xml
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрдВрдЯреЗрдирд░ (RelativeLayout) рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, LinearLayout рдХрдВрдЯреЗрдирд░ рдХреЛ рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рд░рд▓ рд╣реИред рдЗрд╕ рдХрдВрдЯреЗрдирд░ рдореЗрдВ, рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЛ рд▓рдВрдмрд╡рдд рд░реВрдк рд╕реЗ рд╕рдВрд░реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕реНрдХреНрд░реАрди рдХреА рдкреВрд░реА рдЪреМрдбрд╝рд╛рдИ рдореЗрдВ рдлреИрд▓рд╛ рд╣реЛрддрд╛ рд╣реИред

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:minWidth="25px"
    android:minHeight="25px"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/linearLayout1">
    <TextView
        android:text="Reed switch status - undefined"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/rSwitch"
        android:textSize="12pt" />
    <TextView
        android:text="End sensor status - undefined"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/EndSensor"
        android:textSize="12pt" />
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/startSiren"
        android:text="Send signal to siren" />
    <Switch
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/bltSwitch"
        android:checked="false"
        android:showText="true"
        android:text="Connect bluetooth" />
    <TextView
        android:text="status"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/status" />
</LinearLayout>

рдЬреЛ рдХреЛрдИ рднреА HTML рд▓реЗрдЖрдЙрдЯ рдпрд╛ XML рд╕реЗ рдереЛрдбрд╝рд╛ рдкрд░рд┐рдЪрд┐рдд рд╣реИ, рд╡рд╣ рдЖрд╕рд╛рдиреА рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╕рдордЭ рд╕рдХрддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рддреАрди рд░реАрдб-рдУрдирд▓реА рдЯреЗрдХреНрд╕реНрдЯ рдлрд╝реАрд▓реНрдб (TextView), рдПрдХ рд╕реНрд╡рд┐рдЪ (рд╕реНрд╡рд┐рдЪ) рд╣реИ, рдЬреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХ рдЪреЗрдХрдмреЙрдХреНрд╕ рдФрд░ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдмрдЯрди (рдмрдЯрди) рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рддрддреНрд╡реЛрдВ рдХреЛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╕реЗ рдЦреАрдВрдЪрдХрд░ рдФрд░ рдЧрд┐рд░рд╛рдХрд░ рдФрд░ рдЧреБрдг рд╡рд┐рдВрдбреЛ рдпрд╛ рдХреЛрдб рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЖрдИрдбреА, рдЯреЗрдХреНрд╕реНрдЯ рд╕реНрдЯрдмреНрд╕ рдФрд░ рдЕрдиреНрдп рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлреЙрд░реНрдо рдкрд░ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рддрд░реНрдХ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИред

MainActivity.cs

рдиреАрдЪреЗ, рд╕реНрдкреЙрдЗрд▓рд░ рдХреЗ рдиреАрдЪреЗ, рдкреВрд░рд╛ рдХреЛрдб рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рд╣реИ

рдкреВрд░реНрдг MainActivity.cs рдХреЛрдб
// based on http://alejandroruizvarela.blogspot.com/2014/01/bluetooth-arduino-xamarinandroid.html
// for this article https://habr.com/ru/post/500454/


// based on http://alejandroruizvarela.blogspot.com/2014/01/bluetooth-arduino-xamarinandroid.html
// for this article https://habr.com/ru/post/500454/


using Android.App;
using Android.OS;
using Android.Support.V7.App;
using Android.Runtime;
using Android.Widget;
using System.Linq;
using System;
using System.IO;
using Java.Util;
using Android.Bluetooth;
using System.Threading.Tasks;

namespace _6.Canny_Xanarin_Bluetooth_Android
{
    [Activity(Label = "Control Canny 3 tiny via bluetooth", Theme = "@style/AppTheme", MainLauncher = true)]
    public class MainActivity : AppCompatActivity
    {

        Button startSiren;
        TextView rSwitch;
        TextView EndSensor;
        Switch bltSwitch;
        TextView status;
        private Java.Lang.String dataToSend;
        private BluetoothAdapter mBluetoothAdapter = null;
        private BluetoothSocket btSocket = null;
        private Stream outStream = null;
        // don't forget change addres to your device:
        private static string address = "98:D3:91:F9:6C:F6";
        // MY_UUID can be saved as is
        private static UUID MY_UUID = UUID.FromString("00001101-0000-1000-8000-00805F9B34FB");
        private Stream inStream = null;


        protected override void OnCreate(Bundle savedInstanceState)
        {

            base.OnCreate(savedInstanceState);
            Xamarin.Essentials.Platform.Init(this, savedInstanceState);
            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.activity_main);

            startSiren = FindViewById<Button>(Resource.Id.startSiren);
            rSwitch = FindViewById<TextView>(Resource.Id.rSwitch);
            EndSensor = FindViewById<TextView>(Resource.Id.EndSensor);
            status = FindViewById<TextView>(Resource.Id.status);
            bltSwitch = FindViewById<Switch>(Resource.Id.bltSwitch);


            startSiren.Click += startSiren_ClickOnButtonClicked;
            bltSwitch.CheckedChange += bltSwitch_HandleCheckedChange;
            CheckBt();
        }

        private void CheckBt()
        {
            mBluetoothAdapter = BluetoothAdapter.DefaultAdapter;

            if (!mBluetoothAdapter.Enable())
            {
                Toast.MakeText(this, "Bluetooth Off",
                    ToastLength.Short).Show();
            }

            if (mBluetoothAdapter == null)
            {
                Toast.MakeText(this,
                    "Bluetooth does not exist or is busy", ToastLength.Short)
                    .Show();
            }
        }

        void startSiren_ClickOnButtonClicked(object sender, EventArgs e)
        {
            if (bltSwitch.Checked)
            {
                try
                {
                    dataToSend = new Java.Lang.String("11");
                    writeData(dataToSend);
                    System.Console.WriteLine("Send signal to siren");
                }
                catch (System.Exception execept)
                {
                    System.Console.WriteLine("Error when send data" + execept.Message);
                }

            }
            else status.Text = "bluetooth not connected";
        }
        void bltSwitch_HandleCheckedChange(object sender, CompoundButton.CheckedChangeEventArgs e)
        {
            if (e.IsChecked)
            {
                Connect();
            }
            else
            {
                status.Text = "bluetooth not connected";
                if (btSocket.IsConnected)
                {
                    try
                    {
                        btSocket.Close();
                        System.Console.WriteLine("Connection closed");
                    }
                    catch (System.Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                    }
                }
            }
        }

        public void Connect()
        {
            BluetoothDevice device = mBluetoothAdapter.GetRemoteDevice(address);
            System.Console.WriteLine("Connection in progress" + device);
            mBluetoothAdapter.CancelDiscovery();
            try
            {
                btSocket = device.CreateRfcommSocketToServiceRecord(MY_UUID);
                btSocket.Connect();
                System.Console.WriteLine("Correct Connection");
                status.Text = "Correct Connection to bluetooth";
            }
            catch (System.Exception e)
            {
                Console.WriteLine(e.Message);
                try
                {
                    btSocket.Close();
                    System.Console.WriteLine("Connection closed");
                }
                catch (System.Exception)
                {
                    System.Console.WriteLine("Impossible to connect");
                    status.Text = "Impossible to connect";
                }
                System.Console.WriteLine("Socket Created");
  
            }
            beginListenForData();

        }

        public void beginListenForData()
        {
            try
            {
                inStream = btSocket.InputStream;
            }
            catch (System.IO.IOException ex)
            {
                Console.WriteLine(ex.Message);
            }
            Task.Factory.StartNew(() => {
                byte[] buffer = new byte[1024];
                int bytes;
                
                while (true)
                {

                    try
                    {
                        bytes = inStream.Read(buffer, 0, 1024);
                        System.Console.WriteLine("bytes " + bytes.ToString());
                        if (bytes > 0)
                        {
                            
                            RunOnUiThread(() => {
                                string valor = System.Text.Encoding.ASCII.GetString(buffer).Replace("5",String.Empty);
                                // transform string for deleate all symbols except 1-4(command from canny).
                                string command = new string(valor.Where(char.IsDigit).ToArray());

                                if (command.Length > 0)
                                {
                                     status.Text="data successfully readed";
                                    System.Console.WriteLine("command  " + command);
                                    switch (Int32.Parse(command))
                                    {
                                        case 0:
                                            rSwitch.Text = "reed switch - disconnected ";
                                            EndSensor.Text = "end sensor - not pressed ";
                                            break;
                                        case 1:
                                            rSwitch.Text = "reed switch - disconnected ";
                                            EndSensor.Text = "end sensor - pressed ";
                                            break;
                                        case 2:
                                            rSwitch.Text = "reed switch - connected ";
                                            EndSensor.Text = "end sensor - not pressed ";
                                            break;
                                        case 3:
                                            rSwitch.Text = "reed switch - connected ";
                                            EndSensor.Text = "end sensor - pressed ";
                                        break;
                                    }
                                }
                            });
                        }
                    }
                    catch (Java.IO.IOException)
                    {
                        RunOnUiThread(() => {
                            EndSensor.Text = "End sensor status - undefined";
                            rSwitch.Text = "Reed switch status - undefined ";
                        });
                        break;
                    }
                }
            });
        }

        private void writeData(Java.Lang.String data)
        {
            try
            {
                outStream = btSocket.OutputStream;
            }
            catch (System.Exception e)
            {
                System.Console.WriteLine("Error with OutputStream when write to Serial port" + e.Message);
            }

            Java.Lang.String message = data;

            byte[] msgBuffer = message.GetBytes();

            try
            {
                outStream.Write(msgBuffer, 0, msgBuffer.Length);
                System.Console.WriteLine("Message sent");
            }
            catch (System.Exception e)
            {
                System.Console.WriteLine("Error with  when write message to Serial port" + e.Message);
                status.Text = "Error with  when write message to Serial port";
            }
        }


    public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
        {
            Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);

            base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
        }
    }
 }


рдЕрдм рднрд╛рдЧреЛрдВ рдореЗрдВред

рдирд╛рдо рд╕реНрдерд╛рди, рд╡рд░реНрдЧ рдШреЛрд╖рдгрд╛ рдЖрджрд┐ рдХреЗ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдмреНрд▓реЙрдХред рдореИрдВ рдпрд╛рдж рдХрд░реВрдБрдЧрд╛ред
тАГ

рд╣рдо рд╡реИрд░рд┐рдПрдмрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рдмрд╛рдж рдореЗрдВ рдпреВрдЬрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рддрддреНрд╡реЛрдВ рдХреЛ рдмрд╛рдВрдзреЗрдВрдЧреЗ:

   Button startSiren;
   TextView rSwitch;
   TextView EndSensor;
   Switch bltSwitch;
   TextView status;

рдЗрд╕рдХреЗ рдмрд╛рдж рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдХреЛрдб рдЖрддрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдореИрдВрдиреЗ рднрд░реЛрд╕рд╛ рдХрд┐рдпрд╛ рдерд╛ред рдХреБрдЫ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЪрд░ (рдХреНрд╖реЗрддреНрд░)ред

  private Java.Lang.String dataToSend;
        private BluetoothAdapter mBluetoothAdapter = null;
        private BluetoothSocket btSocket = null;
        private Stream outStream = null;
        // don't forget change addres to your device:
        private static string address = "98:D3:91:F9:6C:F6";
        // MY_UUID can be saved as is
        private static UUID MY_UUID = UUID.FromString("00001101-0000-1000-8000-00805F9B34FB");
        private Stream inStream = null;

рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ HC-06 рдореЙрдбреНрдпреВрд▓ рдХреЗ рдкрддреЗ рдХреЛ рдкрддрд╛ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЪрд▓рд╛рдПрдВред

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

рдЖрдЧреЗ рдмрдврд╝реЛред


        protected override void OnCreate(Bundle savedInstanceState)
        {

            base.OnCreate(savedInstanceState);
            Xamarin.Essentials.Platform.Init(this, savedInstanceState);
            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.activity_main);

            startSiren = FindViewById<Button>(Resource.Id.startSiren);
            rSwitch = FindViewById<TextView>(Resource.Id.rSwitch);
            EndSensor = FindViewById<TextView>(Resource.Id.EndSensor);
            status = FindViewById<TextView>(Resource.Id.status);
            bltSwitch = FindViewById<Switch>(Resource.Id.bltSwitch);


            startSiren.Click += startSiren_ClickOnButtonClicked;
            bltSwitch.CheckedChange += bltSwitch_HandleCheckedChange;
            CheckBt();
        }

рдпрд╣ рд╡рд┐рдзрд┐ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрдирд╛рдИ рдЧрдИ рд╣реИ, рд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрдп рдпреВрдЖрдИ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╡рд░реНрдЧ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдирд╛ рд╣реИ, рдФрд░ рдШрдЯрдирд╛рдУрдВ ( startSiren.Click bltSwitch.CheckedChange) рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╣реИрдВрдбрд▓рд░ рднреА рд╕рдВрд▓рдЧреНрди рдХрд░рдирд╛ рд╣реИ ред

рдмреНрд▓реВрдЯреВрде рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдХреА рдЬрд╛рдБрдЪ:


        private void CheckBt()
        {
            mBluetoothAdapter = BluetoothAdapter.DefaultAdapter;

            if (!mBluetoothAdapter.Enable())
            {
                Toast.MakeText(this, "Bluetooth Off",
                    ToastLength.Short).Show();
            }

            if (mBluetoothAdapter == null)
            {
                Toast.MakeText(this,
                    "Bluetooth does not exist or is busy", ToastLength.Short)
                    .Show();
            }
        }

рдореЛрд╣рд┐рдиреА рдЪрд╛рд▓реВ рдХрд░реЗрдВред рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рд╕рд┐рд░реНрдл рдЕрдХреНрд╖рд░ "11" рдХреЛ рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рдкрд╛рд╕ рднреЗрдЬрдирд╛:


   void startSiren_ClickOnButtonClicked(object sender, EventArgs e)
        {
            if (bltSwitch.Checked)
            {
                try
                {
                    dataToSend = new Java.Lang.String("11");
                    writeData(dataToSend);
                    System.Console.WriteLine("Send signal to siren");
                }
                catch (System.Exception execept)
                {
                    System.Console.WriteLine("Error when send data" + execept.Message);
                }

            }
            else status.Text = "bluetooth not connected";
        }

рд╕реНрд╡рд┐рдЪ рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдБрдЪ (рдпрджрд┐ рдЗрд╕реЗ рджрд╛рдИрдВ рдУрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрд╣ рдЪрд╛рд▓реВ рд╣реИ):

   void bltSwitch_HandleCheckedChange(object sender, CompoundButton.CheckedChangeEventArgs e)
        {
            if (e.IsChecked)
            {
                Connect();
            }
            else
            {
                if (btSocket.IsConnected)
                {
                    try
                    {
                        btSocket.Close();
                        System.Console.WriteLine("Connection closed");
                    }
                    catch (System.Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                    }
                }
            }
        }

рдЬрдм рдЖрдк рдЪрд╛рд▓реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдмреНрд▓реВрдЯреВрде рдХреЗ рд╕рд╛рде рдХрдиреЗрдХреНрд╢рди рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реНрд╡рдпрдВ:

   public void Connect()
        {
            BluetoothDevice device = mBluetoothAdapter.GetRemoteDevice(address);
            System.Console.WriteLine("Connection in progress" + device);
            mBluetoothAdapter.CancelDiscovery();
            try
            {
                btSocket = device.CreateRfcommSocketToServiceRecord(MY_UUID);
                btSocket.Connect();
                System.Console.WriteLine("Correct Connection");
                status.Text = "Correct Connection to bluetooth";
            }
            catch (System.Exception e)
            {
                Console.WriteLine(e.Message);
                try
                {
                    btSocket.Close();
                    System.Console.WriteLine("Connection closed");
                }
                catch (System.Exception)
                {
                    System.Console.WriteLine("Impossible to connect");
                    status.Text = "Impossible to connect";
                }
                System.Console.WriteLine("Socket Created");
  
            }
            beginListenForData();

        }

рдФрд░ рдпрд╣рд╛рдБ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ - рд╕реАрдзреЗ рдбреЗрдЯрд╛ рдкрдврд╝рдирд╛:


    public void beginListenForData()
        {
            try
            {
                inStream = btSocket.InputStream;
            }
            catch (System.IO.IOException ex)
            {
                Console.WriteLine(ex.Message);
            }
            Task.Factory.StartNew(() => {
                byte[] buffer = new byte[1024];
                int bytes;
                
                while (true)
                {

                    try
                    {
                        bytes = inStream.Read(buffer, 0, 1024);
                        System.Console.WriteLine("bytes " + bytes.ToString());
                        if (bytes > 0)
                        {
                            
                            RunOnUiThread(() => {
                                string valor = System.Text.Encoding.ASCII.GetString(buffer).Replace("5",String.Empty);
                                // transform string for deleate all symbols except 1-4(command from canny).
                                string command = new string(valor.Where(char.IsDigit).ToArray());

                                if (command.Length > 0)
                                {
                                     status.Text="data successfully readed";
                                    System.Console.WriteLine("command  " + command);
                                    switch (Int32.Parse(command))
                                    {
                                        case 0:
                                            rSwitch.Text = "reed switch - disconnected ";
                                            EndSensor.Text = "end sensor - not pressed ";
                                            break;
                                        case 1:
                                            rSwitch.Text = "reed switch - disconnected ";
                                            EndSensor.Text = "end sensor - pressed ";
                                            break;
                                        case 2:
                                            rSwitch.Text = "reed switch - connected ";
                                            EndSensor.Text = "end sensor - not pressed ";
                                            break;
                                        case 3:
                                            rSwitch.Text = "reed switch - connected ";
                                            EndSensor.Text = "end sensor - pressed ";
                                        break;
                                    }
                                }
                            });
                        }
                    }
                    catch (Java.IO.IOException)
                    {
                        RunOnUiThread(() => {
                            EndSensor.Text = "End sensor status - undefined";
                            rSwitch.Text = "Reed switch status - undefined ";
                        });
                        break;
                    }
                }
            });
        }

рдореИрдВрдиреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рдзрд┐ рдХреЗ рдХрдИ рддрддреНрд╡реЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рд╕реЗ рдПрдХ рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрдЧрд░ рд░реАрдб рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдмрдлрд░ рдореЗрдВ рдХреБрдЫ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рдЪрд░ рдореЗрдВ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ valorред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдерд╛, рд╣рдо рдмрд╕ "5" рд╕рдВрдЦреНрдпрд╛ рд╣рдЯрд╛рддреЗ рд╣реИрдВред

рдЕрдЧрд▓рд╛, рд╣рдо рдкрдврд╝реЗ рдЧрдП рд╕рдВрджреЗрд╢ рд╕реЗ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рднреА рд╡рд░реНрдгреЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВред string command = new string(valor.Where(char.IsDigit).ToArray());

рдареАрдХ рд╣реИ, рдЙрд╕рдХреЗ рдмрд╛рдж рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ, рдпрд╣ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реА рд╕рдВрдЦреНрдпрд╛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЖрдИ рд╣реИ, рд╣рдо UI рдореЗрдВ рдЗрд╕ рдпрд╛ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рдореИрдВрдиреЗ рдореВрд▓ рд░реВрдк рд╕реЗ рдЗрди рджреЛ рддрд░реАрдХреЛрдВ рдХреЛ рдирд╣реАрдВ рдмрджрд▓рд╛:

  private void writeData(Java.Lang.String data)
        {
            try
            {
                outStream = btSocket.OutputStream;
            }
            catch (System.Exception e)
            {
                System.Console.WriteLine("Error with OutputStream when write to Serial port" + e.Message);
            }

            Java.Lang.String message = data;

            byte[] msgBuffer = message.GetBytes();

            try
            {
                outStream.Write(msgBuffer, 0, msgBuffer.Length);
                System.Console.WriteLine("Message sent");
            }
            catch (System.Exception e)
            {
                System.Console.WriteLine("Error with  when write message to Serial port" + e.Message);
                status.Text = "Error with  when write message to Serial port";
            }
        }


    public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
        {
            Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);

            base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
        }
    }
 }

рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдХреЛрдб рдХрд╛ рдпрд╣ рдмреНрд▓реЙрдХ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдФрд░ рдПрдХ рдШрдЯрдирд╛ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдмреНрд▓реВрдЯреВрде рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдХреЛ рдкрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред

рдЦреИрд░, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдбреАрдмрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдорд╛рд░реНрдЯрдлреЛрди рдХрдиреЗрдХреНрд╢рди рд╕реЗрдЯ рдХрд░рдирд╛ рдмрд╛рдХреА рд╣реИ ред рдЕрдЬреАрдм рддрд░рд╣ рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:





рднрд╛рдЧ IV: рдирд┐рд╖реНрдХрд░реНрд╖


рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд┐рд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:



рдпрд╣ рдПрдВрдбреНрд░реЙрдЗрдб рдкрд░ рд╕реНрдорд╛рд░реНрдЯрдлреЛрди рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рдЕрдиреБрднрд╡ рдерд╛ред

рдореИрдВ рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдореЗрд░реЗ рдкреБрд░рд╛рдиреЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рд╡реАрдПрд╕ 2019 рдФрд░ рдЬрд╝рдорд╛рд░рд┐рди рдмрд╣реБрдд рдзреАрд░реЗ-рдзреАрд░реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред

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

рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, CANNY рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд╛рд░реЛрдВ рдХреЛ рдЯреНрдпреВрдирд┐рдВрдЧ рдХрд░рддреЗ рд╕рдордп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдШрд░реЗрд▓реВ рд╡рд╛рд▓реЗ, рддрд╛рдХрд┐ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА "рд╕реБрд╡рд┐рдзрд╛" рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рд╕реНрдорд╛рд░реНрдЯрдлреЛрди рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦрдирд╛ рд╕рдВрднрд╡ рд╣реЛред рдпрд╛рдж рд░рдЦрдиреЗ рд╡рд╛рд▓реА рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рд╡рд╛рд╣рди рдХреЗ рдСрди-рдмреЛрд░реНрдб рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рд╕рдВрдЪрд╛рд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдирд┐рдпрдВрддреНрд░рдХ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рдЗрдирдкреБрдЯ рдХреЗ рд╕рдорд╛рди рд╡реЛрд▓реНрдЯреЗрдЬ рднреА рд╣реЛрдЧрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 5 V рдХреЗ рдмрдЬрд╛рдп 12 V)ред рдмреНрд▓реВрдЯреВрде рдПрдбрд╛рдкреНрдЯрд░ рдХреА рд░рдХреНрд╖рд╛ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ рддрд╛рдХрд┐ рдпрд╣ рдЕрдирдЬрд╛рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рди рд╣реЛред

рд▓реЗрдЦ рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рд╢реНрд░рдорд╕рд╛рдзреНрдп рдирд┐рдХрд▓рд╛, рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рд╡реНрдпрд░реНрде рдирд╣реАрдВ рдерд╛ рдФрд░ рдЖрдк рдЗрд╕реЗ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗред

All Articles