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

рдЫрд╡рд┐

рд╣рдо Sphero рдФрд░ рдЗрд╕рдХреЗ SDK рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред
рдПрдЬреЗрдВрдбрд╛ рдЯреИрдмрд▓реЗрдЯ рдХреЗ рдПрдХреНрд╕реЗрд▓реЗрд░реЛрдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░реЛрдмреЛрдЯ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдмрд╛рдзрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЯрдХрд░рд╛рд╡ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд░рд╣рд╛ рд╣реИред

рд╕рд┐рджреНрдзрд╛рдВрдд рдХреА рдмрд┐рдЯ


рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдЬрд╛рдВрдЪ рдХреА рдХрд┐ рд╕реНрдлреАрд░реЛ рдХреМрди рд╣реИ рдФрд░ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 2013 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рдВрдбреЛрдЬ 8.1 рдкрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдХреИрд╕реЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рдПред
рдЕрдм рд╣рдо рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЪреАрдЬреЛрдВ рд╕реЗ рдирд┐рдкрдЯреЗрдВрдЧреЗред рд╣рдо рдЯреИрдмрд▓реЗрдЯ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рджрд┐рд╢рд╛рдУрдВ рдореЗрдВ рдЭреБрдХрд╛рдХрд░ "рд╕реНрдЯреАрдпрд░" рдХрд░рдирд╛ рд╕реАрдЦреЗрдВрдЧреЗ рдФрд░ рдПрдХ рдмрд╛рдзрд╛ рдХреЗ рд╕рд╛рде рдЯрдХрд░рд╛рд╡ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВрдЧреЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреЗ рдЯреЗрдмрд▓реЗрдЯ рдХреЗ рдПрдХреНрд╕реЗрд▓реЗрд░реЛрдореАрдЯрд░ рдФрд░ рдмрд╛рд╣рд░реА рджреБрдирд┐рдпрд╛ рдХреЗ рд╕рд╛рде рд░реЛрдмреЛрдЯ рдХреЗ рдЯрдХрд░рд╛рд╡ рд╕реЗрдВрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред

accelerometer

рд╡рд┐рдВрдбреЛрдЬ 8.1 рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдФрд░ WinRT рдСрдмреНрдЬреЗрдХреНрдЯ рдореЙрдбрд▓ рд╕рдорд░реНрдерди рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реЗрдВрд╕рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдбрд┐рд╡рд╛рдЗрд╕ рдЙрдирдХреЗ рдкрд╛рд╕ рд╣реИ:

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

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

рдЫрд╡рд┐

рдЖрдк рдПрдХреНрд╕реЗрд▓реЗрд░реЛрдореАрдЯрд░ рд░реАрдбрд┐рдВрдЧ рдИрд╡реЗрдВрдЯ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред

рдПрдХреНрд╕реЗрд▓реЗрд░реЛрдореАрдЯрд░ рдЗрд╡реЗрдВрдЯ рд╕рдмреНрд╕рдХреНрд░рд┐рдкреНрд╢рди
protected override void OnNavigatedTo(NavigationEventArgs e) { тАж Accelerometer _accelerometer = Accelerometer.GetDefault(); _accelerometer.ReadingChanged += new TypedEventHandler<Accelerometer, AccelerometerReadingChangedEventArgs>(ReadingChanged); тАж } async private void ReadingChanged(object sender, AccelerometerReadingChangedEventArgs e) { тАж } 


рд╡рд┐рд╕реНрдерд╛рдкрди

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдореЗрдВ рдЯреИрдмрд▓реЗрдЯ рд╕реЗ рдПрдХреНрд╕реАрд▓реЗрд░реЛрдореАрдЯрд░ рдбреЗрдЯрд╛ рдорд┐рд▓рд╛ рд╣реИред рдЕрдм рд╣рдореЗрдВ рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рд╕реНрдлреЗрд░реЛ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
Windows 8.1 рдХреЗ рд▓рд┐рдП Sphero SDK рдореЗрдВ рдПрдХ рд░реЛрд▓ рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ Sphero рдХреЗ рдЖрдВрджреЛрд▓рди рдХреЛ рд╕рдВрднрд╛рд▓рддреА рд╣реИ рдФрд░ рджреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИ:

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, Sphero рдЕрдкрдиреЗ рдХрд╛рдо рдХреА рд╢реБрд░реБрдЖрдд рд╕рдВрдХреЗрддрдХ x = 0, y = 0, рд╣реЗрдбрд┐рдВрдЧ = 0, рдЧрддрд┐ = 0 рд╕реЗ рдХрд░рддрд╛ рд╣реИред

рдЯрдХреНрдХрд░ рдбрд┐рдЯреЗрдХреНрдЯрд░

рдХреЛрд▓рд┐рдпрд░ рдбрд┐рдЯреЗрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдлреЗрд░реЛ рдРрд╕реА рдордЬрд╝реЗрджрд╛рд░ рдЪреАрдЬрд╝ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЗ рдЕрдВрддрд░ рдкрд░ рдмрд╣реБрдд рдЖрджрд┐рдо рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

Windows 8.1 рдХреЗ рд▓рд┐рдП Sphero SDK рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ CollisionDetectedEvent рдЗрд╡реЗрдВрдЯ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЖрдк рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдЯрдХрд░рд╛рд╡ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкрдХрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред

рдШрдЯрдирд╛ рдХрд╛ рд╡рд┐рд╡рд░рдг
 private void OnRobotConnected(object sender, Robot robot) { тАж robot.CollisionControl.StartDetectionForWallCollisions(); robot.CollisionControl.CollisionDetectedEvent += OnCollisionDetectedEvent; тАж } 

рдпрджрд┐ рдЖрдк рдкрд╣рд▓реА рдмрд╛рд░ рдЯрдХрд░рд╛рд╡ рд╕реЗрдВрд╕рд░ рдЪрд╛рд▓реВ рдХрд░рдирд╛ рдпрд╛рдж рд░рдЦреЗрдВрдЧреЗ рддреЛ рдпрд╣ рдШрдЯрдирд╛ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПрдЧреА:
 robot.CollisionControl.StartDetectionForWallCollisions(); 

рдЬрдм рдЖрдкрдХреЛ рд╕реЗрдВрд╕рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕реЗ рдмрдВрдж рдХрд░реЗрдВ:
 robot.CollisionControl.StopDetection(); 


рд╕реНрдлреЗрд░реЛ рдПрд╕рдбреАрдХреЗ рдХреА рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ

рд░реЛрдмреЛрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ Windows 8.1 рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд Sphero SDK рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

SetBackLED (рддреАрд╡реНрд░рддрд╛) - рд░реЛрдмреЛрдЯ рдХреА рдмреИрдХрд▓рд╛рдЗрдЯ рдЪрд╛рд▓реВ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдЖрдк рд╕рдордЭ рд╕рдХреЗрдВ рдХрд┐ рдпрд╣ рдХрд╣рд╛рдВ рдЬрд╛рдПрдЧрд╛ред рдорд╛рди:
1.0f - рдкреВрд░реА рд╢рдХреНрддрд┐ рд╕реЗ рдЪрд╛рд▓реВ рд╣реЛрддрд╛ рд╣реИред
0.0f - рдЕрдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИред

SetHeading (рд╢реАрд░реНрд╖рдХ) - рд░реЛрдмреЛрдЯ рдХреЛ рдШреБрдорд╛рдПрдВред рдпрд╣ 0 рд╕реЗ 359 рддрдХ рдорд╛рди рд▓реЗрддрд╛ рд╣реИред

SetRGBLED (рд▓рд╛рд▓, рд╣рд░рд╛, рдиреАрд▓рд╛) - рдЧреЗрдВрдж рдХрд╛ рд░рдВрдЧ рд╕реЗрдЯ рдХрд░реЗрдВред

рд░реЛрд▓ (рд╢реАрд░реНрд╖рдХ, рдЧрддрд┐) - рдЖрдВрджреЛрд▓рди рдХреА рдЧрддрд┐ рдФрд░ рдЧрддрд┐ рдХреА рджрд┐рд╢рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ:
рд╢реАрд░реНрд╖рд╛рд╕рди - рдЖрдВрджреЛрд▓рди рдХреЗ рдХреЛрдгред рдпрд╣ 0 рд╕реЗ 359 рддрдХ рдХреА рд╕реАрдорд╛ рдореЗрдВ рдорд╛рди рд▓реЗрддрд╛ рд╣реИред
рдЧрддрд┐ - рдЧрддрд┐ рдХреА рдЧрддрд┐ред 0 - рдирд╣реАрдВ рдЪрд▓рддреА рд╣реИред 255 - рдЕрдзрд┐рдХрддрдо рдЧрддрд┐ред

рдиреАрдВрдж () - рд░реЛрдмреЛрдЯ рдХреЛ рд╕реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд░рдЦреЛред

Pazrabotka


рдХрд╛рд░реНрдп

рдПрдХреНрд╕реЗрд▓реЗрд░реЛрдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░реЛрдмреЛрдЯ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВред рдпрджрд┐ рдЖрдк рдПрдХ рдмрд╛рдзрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд░реЛрдмреЛрдЯ рдХреЛ рд▓рд╛рд▓ рд░рдВрдЧ рд╕реЗ рдкреЗрдВрдЯ рдХрд░реЗрдВред

рдЙрдкрдХрд░рдг


рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ

1. рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 2013 рдЦреЛрд▓реЗрдВ рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ / рдирдпрд╛ / рдкреНрд░реЛрдЬреЗрдХреНрдЯ / рдЦрд╛рд▓реА рдРрдк ред

рдЫрд╡рд┐

2. рд╣рдо рд╡рд┐рдВрдбреЛрдЬ 8.1 рдХреЗ рд▓рд┐рдП Sphero SDK рд╕реЗ рдЕрд╕реЗрдВрдмрд▓реА RobotKit.dll рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ

рдЫрд╡рд┐

3. рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдмреНрд▓реВрдЯреВрде RFCOMM рд╕рдорд░реНрдерди рдЬреЛрдбрд╝реЗрдВред рдХреЛрдб рд╕рдВрдкрд╛рджрди рдореЛрдб рдореЗрдВ Package.appxmanifest рдЦреЛрд▓реЗрдВ рдФрд░ рдХреНрд╖рдорддрд╛ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдирд┐рдореНрди рдХреЛрдб рдЬреЛрдбрд╝реЗрдВред

рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдмреНрд▓реВрдЯреВрде RFCOMM рд╕рдорд░реНрдерди
 <wb:DeviceCapability Name="bluetooth.rfcomm"> <wb:Device Id="any"> <wb:Function Type="serviceId:00001101-0000-1000-8000-00805F9B34FB" /> </wb:Device> </wb:DeviceCapability> 


4. рдЖрд╡реЗрджрди рдХреА рдореБрдЦреНрдп рд╕реНрдХреНрд░реАрди рдкрд░:

MainPage.xaml рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ рдФрд░ рдЗрд╕реЗ рд╡рд╣рд╛рдВ рдЬреЛрдбрд╝реЗрдВред

рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореБрдЦреНрдп рд╕реНрдХреНрд░реАрди
 <Page x:Class="SpheroRace.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:SpheroRace" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" > <Grid Margin="100" > <Grid.RowDefinitions > <RowDefinition Height="60"/> <RowDefinition Height="60"/> <RowDefinition/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition/> <ColumnDefinition/> </Grid.ColumnDefinitions> <TextBlock x:Name="SpheroName" Grid.Row="0" Grid.Column="0" Text="No Sphero Connected" FontSize="24"/> <ToggleSwitch x:Name="ConnectionToggle" Grid.Row="1" Grid.Column="0" Toggled="ConnectionToggle_Toggled" /> <Button Name="StartBtn" Click="StartBtn_Click" Grid.Row="2" Grid.Column="0" Content="Start" VerticalAlignment="Bottom" HorizontalAlignment="Left" Padding="100" ></Button> <Button Name="StopBtn" Click="StopBtn_Click" Grid.Row="2" Grid.Column="1" Content="Stop" VerticalAlignment="Bottom" HorizontalAlignment="Right" Padding="100" IsEnabled="False" ></Button> </Grid> </Page> 


5. MainPage.xaml.cs рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдЧреЗрдо рдХреЗ рддрд░реНрдХ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВред рд╕реНрдлреЗрд░реЛ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрд╕рдбреАрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдСрдмреНрдЬреЗрдХреНрдЯ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рдЦреЗрд▓ рддрд░реНрдХ
 public sealed partial class MainPage : Page { private Sphero m_robot = null; private long m_lastTimeMs; private double m_currentX = 0; private double m_currentY = 0; private bool m_isStarted = false; private const string c_noSpheroConnected = "No Sphero Connected"; private const string c_connectingToSphero = "Connecting to {0}"; private const string c_spheroConnected = "Connected to {0}"; public MainPage() { this.InitializeComponent(); } // .     protected override void OnNavigatedTo(NavigationEventArgs e) { base.OnNavigatedTo(e); SetupRobotConnection(); Application app = Application.Current; app.Suspending += OnSuspending; Accelerometer _accelerometer = Accelerometer.GetDefault(); _accelerometer.ReadingChanged += new TypedEventHandler<Accelerometer, AccelerometerReadingChangedEventArgs>(ReadingChanged); } // .     protected override void OnNavigatedFrom(NavigationEventArgs e) { base.OnNavigatedFrom(e); ShutdownRobotConnection(); Application app = Application.Current; app.Suspending -= OnSuspending; Accelerometer _accelerometer = Accelerometer.GetDefault(); _accelerometer.ReadingChanged -= new TypedEventHandler<Accelerometer, AccelerometerReadingChangedEventArgs>(ReadingChanged); } //handle the application entering the background private void OnSuspending(object sender, SuspendingEventArgs args) { ShutdownRobotConnection(); } //      private void SetupRobotConnection() { SpheroName.Text = c_noSpheroConnected; RobotProvider provider = RobotProvider.GetSharedProvider(); provider.DiscoveredRobotEvent += OnRobotDiscovered; provider.NoRobotsEvent += OnNoRobotsEvent; provider.ConnectedRobotEvent += OnRobotConnected; provider.FindRobots(); } //    private void ShutdownRobotConnection() { if (m_robot != null && m_robot.ConnectionState == ConnectionState.Connected) { m_robot.SensorControl.StopAll(); m_robot.CollisionControl.StopDetection(); m_robot.Sleep(); m_robot.Disconnect(); ConnectionToggle.OffContent = "Disconnected"; SpheroName.Text = c_noSpheroConnected; SetRedColor(); RobotProvider provider = RobotProvider.GetSharedProvider(); provider.DiscoveredRobotEvent -= OnRobotDiscovered; provider.NoRobotsEvent -= OnNoRobotsEvent; provider.ConnectedRobotEvent -= OnRobotConnected; } } // ! private void OnRobotDiscovered(object sender, Robot robot) { if (m_robot == null) { RobotProvider provider = RobotProvider.GetSharedProvider(); provider.ConnectRobot(robot); ConnectionToggle.OnContent = "Connecting..."; m_robot = (Sphero)robot; SpheroName.Text = string.Format(c_connectingToSphero, robot.BluetoothName); } } //   :( private void OnNoRobotsEvent(object sender, EventArgs e) { MessageDialog dialog = new MessageDialog(c_noSpheroConnected); dialog.DefaultCommandIndex = 0; dialog.CancelCommandIndex = 1; dialog.ShowAsync(); } //    private void OnRobotConnected(object sender, Robot robot) { ConnectionToggle.IsOn = true; ConnectionToggle.OnContent = "Connected"; SpheroName.Text = string.Format(c_spheroConnected, robot.BluetoothName); if (m_robot != null && m_robot.ConnectionState == ConnectionState.Connected) { m_robot.CollisionControl.StartDetectionForWallCollisions(); m_robot.CollisionControl.CollisionDetectedEvent += OnCollisionDetectedEvent; SetRedColor(); } } //    async private void ReadingChanged(object sender, AccelerometerReadingChangedEventArgs e) { if (!m_isStarted) return; await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { Windows.Devices.Sensors.AccelerometerReading reading = e.Reading; SendRollCommand(reading.AccelerationX, reading.AccelerationY, reading.AccelerationZ); }); } //    private void OnCollisionDetectedEvent(object sender, RobotKit.CollisionData data) { SetRedColor(); m_robot.Roll(0, 0); } //    private void ConnectionToggle_Toggled(object sender, RoutedEventArgs e) { ConnectionToggle.OnContent = "Connecting..."; if (ConnectionToggle.IsOn) { if (m_robot == null || m_robot.ConnectionState != ConnectionState.Connected) { SetupRobotConnection(); } } else { ShutdownRobotConnection(); } } //  private void StartBtn_Click(object sender, RoutedEventArgs e) { m_isStarted = true; StartBtn.IsEnabled = false; StopBtn.IsEnabled = true; SetGreenColor(); m_robot.Roll(0, 0); } //  private void StopBtn_Click(object sender, RoutedEventArgs e) { m_isStarted = false; StartBtn.IsEnabled = true; StopBtn.IsEnabled = false; SetRedColor(); m_robot.Roll(0, 0); } //  .      private void SetGreenColor() { m_robot.SetHeading(0); m_robot.SetBackLED(1.0f); m_robot.SetRGBLED(0, 255, 0); } //      private void SetRedColor() { m_robot.SetHeading(0); m_robot.SetBackLED(1.0f); m_robot.SetRGBLED(255, 0, 0); } //       private async void SendRollCommand(double newX, double newY, double newZ) { float x = (float)newX; float y = (float)newY; float z = (float)newZ; float speed = Math.Abs(z); speed = (speed == 0) ? 0 : (float)Math.Sqrt(speed); if (speed > 1f) speed = 0.01f; int heading = Convert.ToInt32(Math.PI / 2.0 - Math.Atan2((double)y - m_currentY, (double)x - m_currentX)); long milliseconds = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond; if ((milliseconds - m_lastTimeMs) > 1000) { SetGreenColor(); m_robot.Roll(heading, speed); m_lastTimeMs = milliseconds; m_currentX = x; m_currentY = y; } } } 


6. рдмреНрд▓реВрдЯреВрде рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ Sphero рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ

рдЫрд╡рд┐

7. рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░реЗрдВред

рдЫрд╡рд┐

8. рд╕реНрдЯрд╛рд░реНрдЯ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рдЦреЗрд▓ рдХреЛ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рджреЗрдЦреЗрдВред

рдЫрд╡рд┐

рдкрд░рд┐рдгрд╛рдо

рд╣рдореЗрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЦрд┐рд▓реМрдирд╛ рдорд┐рд▓рд╛ред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдорд▓реНрдЯреАрдкреНрд▓реЗрдпрд░ рд░реЛрдмреЛрдЯ рджреМрдбрд╝ рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХрд░рдХреЗ, рдпрд╛ рдкрд╛рд▓рддреВ рдЬрд╛рдирд╡рд░ рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдХрд╛рд░реНрдп рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╡реАрдбрд┐рдпреЛ рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рд╕реВрддреНрд░ рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ: github.com/MissUFO/SpheroRace

рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ


рд╣рдо рд╡рд┐рдВрдбреЛрдЬ 8. рд░реЛрдмреЛ рдореИрдЬрд┐рдХ рдмреЙрд▓ рдкрд░ рд░реЛрдмреЛрдЯ рдХрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рддреЗ рд╣реИрдВ
Sphero рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ
рд╕реНрдлреЗрд░реЛ рдбреЗрд╡рд▓рдкрд░ рд╕реЗрдВрдЯрд░
рд╡рд┐рдВрдбреЛрдЬ 8.1 рдХреЗ рд▓рд┐рдП рд╕реНрдлреЗрд░реЛ рдПрд╕рдбреАрдХреЗ
рд╡рд┐рдВрдбреЛрдЬ 8.1 рдХреЗ рд▓рд┐рдП рд╕реНрдлреЗрд░реЛ рдПрд╕рдбреАрдХреЗ рдЙрджрд╛рд╣рд░рдг
рд╡рд┐рдВрдбреЛрдЬ 8.1 рдореЗрдВ рдПрдХреНрд╕реЗрд▓реЗрд░реЛрдореАрдЯрд░ рдХрд╛ рдЙрджрд╛рд╣рд░рдг
Sphero youtube рдбреЗрд╡рд▓рдкрд░ рдЪреИрдирд▓
рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 2013 рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ
Visual Studio рдСрдирд▓рд╛рдЗрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдиреЗрдВред
Visual Studio рдСрдирд▓рд╛рдЗрди рдХреЗ рд▓рд┐рдП рд╕рд╛рдЗрди рдЕрдк рдХрд░реЗрдВ

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


All Articles