рдкрд╣рд▓реЗ рднрд╛рдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ, рдореИрдВрдиреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рднреМрддрд┐рдХ рднрд╛рдЧ рдФрд░ рдХреЛрдб рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рдЯреБрдХрдбрд╝реЗ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ред рдЕрдм рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдШрдЯрдХ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ - рдПрдХ Android рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ рдПрдХ Arduino рд╕реНрдХреЗрдЪред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдкреНрд░рддреНрдпреЗрдХ рдкрд▓ рдХрд╛ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рджреВрдВрдЧрд╛, рдФрд░ рдЕрдВрдд рдореЗрдВ рдореИрдВ рдкрд░рд┐рдгрд╛рдо рдХреЗ рдкреВрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ + рд╡реАрдбрд┐рдпреЛ рд╕реЗ рд▓рд┐рдВрдХ рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рдЖрдкрдХреЛ
рдирд┐рд░рд╛рд╢ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдПрдВрдбреНрд░реЙрдЗрдб рдРрдк
рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рджреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: рдкрд╣рд▓рд╛ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдмреНрд▓реВрдЯреВрде рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░ рд░рд╣рд╛ рд╣реИ, рджреВрд╕рд░рд╛ рдирд┐рдпрдВрддреНрд░рдг рдЬреЙрдпрд╕реНрдЯрд┐рдХ рд╣реИред
рдореИрдВ рдЖрдкрдХреЛ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реВрдВ - рдЖрд╡реЗрджрди рдХреЗ рдбрд┐рдЬрд╛рдЗрди рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдПрдХ рдЧрдбрд╝рдЧрдбрд╝рд╛рд╣рдЯ рдкрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЕрдЧрд░ рдХреЗрд╡рд▓ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЕрдиреБрдХреВрд▓рди рдХреНрд╖рдорддрд╛ рдФрд░ UX рдкреНрд░рддреАрдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕реНрдХреНрд░реАрди рд╕реЗ рдмрд╛рд╣рд░ рд░реЗрдВрдЧрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рд┐рдПред
рдореЗрдХрдЕрдк
рдЧрддрд┐рд╡рд┐рдзрд┐ рд╢реБрд░реВ рдХрд░рдирд╛ рд▓реЗрдЖрдЙрдЯ, рддрддреНрд╡реЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ: рдЙрдкрдХрд░рдгреЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рдмрдЯрди рдФрд░ рд▓реЗрдЖрдЙрдЯред рдмрдЯрди рд╕рдХреНрд░рд┐рдп рдмреНрд▓реВрдЯреВрде рдХреЗ рд╕рд╛рде рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред ListView рдкрд╛рдпрд╛ рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <Button android:layout_width="wrap_content" android:layout_height="60dp" android:layout_alignParentStart="true" android:layout_alignParentTop="true" android:layout_marginStart="40dp" android:layout_marginTop="50dp" android:text="@string/start_search" android:id="@+id/button_start_find" /> <Button android:layout_width="wrap_content" android:layout_height="60dp" android:layout_marginEnd="16dp" android:layout_marginBottom="16dp" android:id="@+id/button_start_control" android:text="@string/start_control" android:layout_alignParentBottom="true" android:layout_alignParentEnd="true"/> <ListView android:id="@+id/list_device" android:layout_width="300dp" android:layout_height="200dp" android:layout_marginEnd="10dp" android:layout_marginTop="10dp" android:layout_alignParentEnd="true" android:layout_alignParentTop="true" /> </RelativeLayout>
рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдХреНрд░реАрди рдПрдХ рд▓реЗрдЖрдЙрдЯ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдмрдЯрди рд╣реИ, рдЬреЛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЬреЙрдпрд╕реНрдЯрд┐рдХ рдмрди рдЬрд╛рдПрдЧрд╛ред рдПрдХ рдмрдЯрди рдкреГрд╖реНрдарднреВрдорд┐ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрдЯрди рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдпрд╣ рдЧреЛрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
TextView рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛: рдмреНрд▓реВрдЯреВрде рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреЗрдЬреЗ рдЧрдП рдирдВрдмрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдП рдЧрдП рдереЗред рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЪрд░рдг рдореЗрдВ, рдореИрдВ рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди рддрдм рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рдЧрдгрдирд╛ рдПрдХ рдЕрд▓рдЧ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдХреА рдЬрд╛рдиреЗ рд▓рдЧреЗрдЧреА рдЬрд╣рд╛рдБ рд╕реЗ TextView рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:layout_width="200dp" android:layout_height="200dp" android:layout_alignParentStart="true" android:layout_alignParentBottom="true" android:layout_marginBottom="25dp" android:layout_marginStart="15dp" android:id="@+id/button_drive_control" android:background="@drawable/button_control_circle" /> <TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_alignParentEnd="true" android:layout_alignParentTop="true" android:minWidth="70dp" android:id="@+id/view_result_touch" android:layout_marginEnd="90dp" /> </RelativeLayout>
Button_control_circle.xml рдлрд╝рд╛рдЗрд▓ (рд╢реИрд▓реА), рдЗрд╕реЗ рдбреНрд░рд╛ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="#00F" /> <corners android:bottomRightRadius="100dp" android:bottomLeftRadius="100dp" android:topRightRadius="100dp" android:topLeftRadius="100dp"/> </shape>
рдЖрдкрдХреЛ item_device.xml рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рд╕реВрдЪреА рдЖрдЗрдЯрдо рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="150dp" android:layout_height="40dp" android:id="@+id/item_device_textView"/> </LinearLayout>
рдШреЛрд╖рдгрд╛рдкрддреНрд░
рдмрд╕ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ рдкреВрд░реНрдг рдкреНрд░рдХрдЯ рдХреЛрдб рджреЗ рджреВрдВрдЧрд╛ред рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧ-рдЕрдиреБрдорддрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмреНрд▓реВрдЯреВрде рддрдХ рдкреВрд░реНрдг рдкрд╣реБрдВрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдЧрддрд┐рд╡рд┐рдзрд┐ рдЯреИрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреВрд╕рд░реА рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордд рднреВрд▓рдирд╛ред
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.bluetoothapp"> <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name="com.arproject.bluetoothworkapp.MainActivity" android:theme="@style/Theme.AppCompat.NoActionBar" android:screenOrientation="landscape"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="com.arproject.bluetoothworkapp.ActivityControl" android:theme="@style/Theme.AppCompat.NoActionBar" android:screenOrientation="landscape"/> </application> </manifest>
рдореБрдЦреНрдп рдЧрддрд┐рд╡рд┐рдзрд┐, Arduino рдФрд░ Android рдХреА рдЬреЛрдбрд╝реА
рд╣рдо AppCompatActivity рд╕реЗ рд╡рд░реНрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЪрд░ рдШреЛрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
public class MainActivity extends AppCompatActivity { private BluetoothAdapter bluetoothAdapter; private ListView listView; private ArrayList<String> pairedDeviceArrayList; private ArrayAdapter<String> pairedDeviceAdapter; public static BluetoothSocket clientSocket; private Button buttonStartControl; }
рдореИрдВ рдСрдирдХреНрд░рд┐рдПрдЯ () рд╡рд┐рдзрд┐ рд▓рд╛рдЗрди рдХрд╛ рд╡рд░реНрдгрди рд▓рд╛рдЗрди рд╕реЗ рдХрд░реВрдВрдЧрд╛:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдпрд╣ рдЬрд╛рдВрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдмреНрд▓реВрдЯреВрде рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдкреНрд░рд╛рдкреНрдд рдХреА рдЧрдИ рд╣реИ (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдЕрдиреБрдорддрд┐ рдХреЗ рдмрд┐рдирд╛ рд╣рдо рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдВрдЧреЗ) рдФрд░ рдХреНрдпрд╛ рдмреНрд▓реВрдЯреВрде рдЪрд╛рд▓реВ рд╣реИ:
private boolean permissionGranted() {
рдпрджрд┐ рд╕рднреА рдЬрд╛рдВрдЪреЗрдВ рдкрд╛рд╕ рд╣реЛ рдЬрд╛рддреА рд╣реИрдВ, рддреЛ рдбрд┐рд╡рд╛рдЗрд╕ рдЦреЛрдЬ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИред рдпрджрд┐ рдХрд┐рд╕реА рдПрдХ рд╢рд░реНрдд рдХреЛ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдХ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдЧреА, рдЬрд┐рд╕рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛, "allow \ enable?", рдФрд░ рдпрд╣ рддрдм рддрдХ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рдЪреЗрдХ рдкрд╛рд╕ рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ред
рдбрд┐рд╡рд╛рдЗрд╕ рдЦреЛрдЬ рдХреЛ рддреАрди рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: рд╕реВрдЪреА рддреИрдпрд╛рд░ рдХрд░рдирд╛, рдкрд╛рдП рдЧрдП рдЙрдкрдХрд░рдгреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝рдирд╛, рдЪрдпрдирд┐рдд рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд╕рд╛рде рд╕рдВрдмрдВрдз рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ред
private void findArduino() {
рдЬрдм рдПрдХ рдмреНрд▓реВрдЯреВрде рдореЙрдбреНрдпреВрд▓ Arduino (рдЗрд╕ рдкрд░ рдмрд╛рдж рдореЗрдВ) рдореЗрдВ рд▓рдЯрдХрд╛ рд╣реБрдЖ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕реВрдЪреА рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред рдЙрд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ, рдЖрдк рдПрдХ рд╕реЙрдХреЗрдЯ рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗ (рдЖрдкрдХреЛ рдПрдХ рдХреНрд▓рд┐рдХ рдХреЗ рдмрд╛рдж 3-5 рд╕реЗрдХрдВрдб рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдлрд┐рд░ рд╕реЗ рдХреНрд▓рд┐рдХ рдХрд░рдирд╛ рд╣реЛрдЧрд╛)ред рдЖрдк рд╕рдордЭреЗрдВрдЧреЗ рдХрд┐ рдХрдиреЗрдХреНрд╢рди рдмреНрд▓реВрдЯреВрде рдореЙрдбреНрдпреВрд▓ рдкрд░ рдПрд▓ рдИ рдбреА рджреНрд╡рд╛рд░рд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: рдПрдХ рдХрдиреЗрдХреНрд╢рди рдХреЗ рдмрд┐рдирд╛, рд╡реЗ рдЬрд▓реНрджреА рд╕реЗ рдЭрдкрдХреА рд▓реЗрддреЗ рд╣реИрдВ, рдЕрдЧрд░ рдХреЛрдИ рдХрдиреЗрдХреНрд╢рди рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЖрд╡реГрддреНрддрд┐ рдмрд┐рд▓реНрдХреБрд▓ рдХрдо рд╣реЛ рдЬрд╛рддреА рд╣реИред

рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░реЗрдВ рдФрд░ рдХрдорд╛рдВрдб рднреЗрдЬреЗрдВ
рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рджреВрд╕рд░реА рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ - рдПрдХреНрдЯрд┐рд╡рд┐рдЯреАрдХрдВрдЯреНрд░реЛрд▓ред рд╕реНрдХреНрд░реАрди рдкрд░ рдХреЗрд╡рд▓ рдПрдХ рдиреАрд▓рд╛ рд╕рд░реНрдХрд▓ рд╣реЛрдЧрд╛ - рдЬреЙрдпрд╕реНрдЯрд┐рдХред рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рдмрдЯрди рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдорд╛рд░реНрдХрдЕрдк рдКрдкрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
public class ActivityControl extends AppCompatActivity {
рдСрдирдХреНрд░рд┐рдПрдЯ () рд╡рд┐рдзрд┐ рдореЗрдВ, рд╕рднреА рдореБрдЦреНрдп рдХреНрд░рд┐рдпрд╛ рд╣реЛрддреА рд╣реИ:
рдзреНрдпрд╛рди рджреЗрдВ (!) - рд╣рдореЗрдВ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛ рдХрд┐ рдмрдЯрди рдХрд┐рддрдиреЗ рдкрд┐рдХреНрд╕реЗрд▓ рдкрд░ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╣рдореЗрдВ рдЕрдиреБрдХреВрд▓рдирд╢реАрд▓рддрд╛ рдорд┐рд▓рддреА рд╣реИ: рдмрдЯрди рдХрд╛ рдЖрдХрд╛рд░ рд╕реНрдХреНрд░реАрди рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдмрд╛рдХреА рдХреЛрдб рдЖрд╕рд╛рдиреА рд╕реЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЖрдХрд╛рд░реЛрдВ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рдареАрдХ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдмрд╛рдж рдореЗрдВ, рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рдЦрд╛рдПрдВрдЧреЗ рдХрд┐ рд╕реНрдкрд░реНрд╢ рдХрд╣рд╛рдВ рдерд╛, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдЙрди рдорд╛рдиреЛрдВ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░реЗрдВ, рдЬреЛ 0 рд╕реЗ 255 рддрдХ рдЕрд░реНрджреБрдВрдХреА рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддреЗ рд╣реИрдВ (рдЖрдЦрд┐рд░рдХрд╛рд░, рдХреЗрдВрджреНрд░ рд╕реЗ рд╕реНрдкрд░реНрд╢ 456 рдкрд┐рдХреНрд╕реЗрд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдПрдордХреЗ рдЙрд╕ рдирдВрдмрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛)ред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд ControlDriveInputListener () рдХреЛрдб рд╣реИ, рдпрд╣ рд╡рд░реНрдЧ onCreate () рдкрджреНрдзрддрд┐ рдХреЗ рдмрд╛рдж, рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЗ рд╡рд░реНрдЧ рдореЗрдВ рд╣реА рд╕реНрдерд┐рдд рд╣реИред рдПрдХреНрдЯрд┐рд╡рд┐рдЯреАрдХрдВрдЯреНрд░реЛрд▓ рдлрд╛рдЗрд▓ рдореЗрдВ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг, ControlDriveInputListener рд╡рд░реНрдЧ рдПрдХ рдмрдЪреНрдЪрд╛ рдмрди рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рдореБрдЦреНрдп рд╡рд░реНрдЧ рдХреЗ рд╕рднреА рдЪрд░ рд╣реИрдВред
рдХреНрд▓рд┐рдХ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рдзреНрдпрд╛рди рди рджреЗрдВред рдЕрдм рд╣рдо рд╕реНрдкрд░реНрд╢ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ: рдХрд┐рд╕ рдмрд┐рдВрджреБ рдкрд░ рд╡реНрдпрдХреНрддрд┐ рдЕрдкрдиреА рдЙрдВрдЧрд▓реА рдбрд╛рд▓рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдореЗрдВ рдХреНрдпрд╛ рдбреЗрдЯрд╛ рдорд┐рд▓реЗрдЧрд╛ред
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореИрдВ java.util.Timer рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ: рдпрд╣ рдЖрдкрдХреЛ рдПрдХ рдирдпрд╛ рдереНрд░реЗрдб рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рджреЗрд░реА рд╣реЛ рд╕рдХрддреА рд╣реИ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ nth рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕реЗрдХрдВрдб рдХреЗ рдмрд╛рдж рдЕрдирдВрдд рдмрд╛рд░ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд┐рдореНрди рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП: рд╡реНрдпрдХреНрддрд┐ рдиреЗ рдПрдХ рдЙрдВрдЧрд▓реА рдбрд╛рд▓ рджреА, ACTION_DOWN рд╡рд┐рдзрд┐ рдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛, рдЬрд╛рдирдХрд╛рд░реА arduino рдореЗрдВ рдЪрд▓реА рдЧрдИ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рдЙрд╕ рд╡реНрдпрдХреНрддрд┐ рдиреЗ рдЙрдВрдЧрд▓реА рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЧрддрд┐ рдЙрд╕реЗ рд╕реВрдЯ рдХрд░рддреА рд╣реИред рджреВрд╕рд░реА рдмрд╛рд░, ACTION_DOWN рд╡рд┐рдзрд┐ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ ACTION_UP (рд╕реНрдХреНрд░реАрди рд╕реЗ рдЕрдкрдиреА рдЙрдВрдЧрд▓реА рдЙрдард╛рдиреЗ рдХреЗ рд▓рд┐рдП) рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЦреИрд░, рд╣рдо рдЯрд╛рдЗрдорд░ () рдХреНрд▓рд╛рд╕ рд▓реВрдк рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╣рд░ 10 рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдкрд░ рдПрдХ рд╣реА рдбреЗрдЯрд╛ рднреЗрдЬрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдЬрдм рдЙрдВрдЧрд▓реА рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (ACTION_MOVE рдХрд╛рдо рдХрд░реЗрдЧрд╛) рдпрд╛ рдЙрдард╛рдпрд╛ (ACTION_UP), рдЯрд╛рдЗрдорд░ рдЪрдХреНрд░ рдХреЛ рдорд╛рд░ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдкреБрд░рд╛рдиреЗ рдкреНрд░реЗрд╕ рд╕реЗ рдбреЗрдЯрд╛ рдлрд┐рд░ рд╕реЗ рднреЗрдЬрд╛ рдЬрд╛рдирд╛ рд╢реБрд░реВ рди рд╣реЛред
public class ControlDriveInputListener implements View.OnTouchListener { private Timer timer; @Override public boolean onTouch(View view, MotionEvent motionEvent) {
рдлрд┐рд░ рд╕реЗ рдзреНрдпрд╛рди рджреЗрдВ: рдПрдХреНрд╕ рдФрд░ рд╡рд╛рдИ рдХрд╛рдЙрдВрдЯ рдСрдирдЯреВ () рд╡рд┐рдзрд┐ рд╡реНрдпреВ рдХреЗ рдКрдкрд░реА рдмрд╛рдПрдВ рдХреЛрдиреЗ рд╕реЗ рдЬрд╛рддреА рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдмрд┐рдВрджреБ (0; 0) рдпрд╣рд╛рдВ рдмрдЯрди рдкрд░ рд╕реНрдерд┐рдд рд╣реИ:

рдЕрдм рдЬрдм рд╣рдордиреЗ рд╕реАрдЦрд╛ рд╣реИ рдХрд┐ рдмрдЯрди рдкрд░ рдЙрдВрдЧрд▓реА рдХрд╛ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд╛рди рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рддреЛ рд╣рдо рдХрд╛рд░реНрдп рдорд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд┐рдХреНрд╕реЗрд▓ (рдХреНрдпреЛрдВрдХрд┐ x рдФрд░ y рдкрд┐рдХреНрд╕реЗрд▓ рдореЗрдВ рдмрд╕ рджреВрд░реА рд╣реИрдВ) рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрддрд╛ рдХрд░реЗрдВрдЧреЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ CalculAndSendCommand (x, y) рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдЬрд┐рд╕реЗ ControlDriveInputListener рд╡рд░реНрдЧ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдкрдХреЛ рдХреБрдЫ рд╕рд╣рд╛рдпрдХ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рд╣рдо рдЙрдиреНрд╣реЗрдВ рдЧрдгрдирд╛ рдХреЗ рдмрд╛рдж рдЙрд╕реА рдХрдХреНрд╖рд╛ рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ AndSendCommand (x, y)ред
private void calculateAndSendCommand(float x, float y) {
рдЬрдм рдбреЗрдЯрд╛ рдХреА рдЧрдгрдирд╛ рдФрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рджреВрд╕рд░реА рдзрд╛рд░рд╛ рдЦреЗрд▓ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддреА рд╣реИред рд╡рд╣ рд╕реВрдЪрдирд╛ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдЖрдк рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдЕрдиреНрдпрдерд╛ рд╕реЙрдХреЗрдЯ рд╕рдВрдЪрд╛рд░рд┐рдд рдбреЗрдЯрд╛ рд╕реНрдкрд░реНрд╢ рдХреЗ рдХреИрдкреНрдЪрд░ рдХреЛ рдзреАрдорд╛ рдХрд░ рджреЗрдЧрд╛, рдПрдХ рдХрддрд╛рд░ рдмрдирд╛рдИ рдЬрд╛рдПрдЧреА рдФрд░ рдкреВрд░рд╛ рдЕрдВрдд рдЫреЛрдЯрд╛ рд╣реЛрдЧрд╛ред
ConnectedThread рдХреНрд▓рд╛рд╕ рдПрдХреНрдЯрд┐рд╡рд┐рдЯреАрдХрдВрдЯреНрд░реЛрд▓ рдХреНрд▓рд╛рд╕ рдореЗрдВ рднреА рд╕реНрдерд┐рдд рд╣реИред
private class ConnectedThread extends Thread { private final BluetoothSocket socket; private final OutputStream outputStream; public ConnectedThread(BluetoothSocket btSocket) {
Android рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕рд╛рд░рд╛рдВрд╢рд┐рдд рдХрд░рдирд╛
рдКрдкрд░ рджрд┐рдП рдЧрдП рд╕рднреА рдмреЛрдЭ рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрддрд╛рдПрдВред
- ActivMain рдореЗрдВ рд╣рдо рдмреНрд▓реВрдЯреВрде рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рдПрдХ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВред
- рдПрдХреНрдЯрд┐рд╡рд┐рдЯреАрдХрдВрдЯреНрд░реЛрд▓ рдореЗрдВ рд╣рдо рдмрдЯрди рдХреЛ рд╕рдВрд▓рдЧреНрди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред
- рд╣рдо OnTouchListener рдмрдЯрди рдХреЛ рд▓рдЯрдХрд╛рддреЗ рд╣реИрдВ, рдпрд╣ рд╕реНрдкрд░реНрд╢, рдЧрддрд┐ рдФрд░ рдЙрдВрдЧрд▓реА рдЙрдард╛рддрд╛ рд╣реИред
- рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ (x рдФрд░ y рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЗ рд╕рд╛рде рдмрд┐рдВрджреБ) рд░реЛрдЯреЗрд╢рди рдХреЛрдг рдФрд░ рдЧрддрд┐ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ
- рд╣рдо рдбреЗрдЯрд╛ рднреЗрдЬрддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдгреЛрдВ рдХреЗ рд╕рд╛рде рдЕрд▓рдЧ рдХрд░рддреЗ рд╣реИрдВ
рдФрд░ рдЕрдВрддрд┐рдо рд╕рдордЭ рдЖрдкрдХреЛ рддрдм рдорд┐рд▓реЗрдЧреА рдЬрдм рдЖрдк рдкреВрд░реЗ рдХреЛрдб рдХреЛ рджреЗрдЦреЗрдВрдЧреЗ -
github.com/IDolgopolov/BluaxyWorkAPP.git ред рдХреЛрдИ рдЯрд┐рдкреНрдкрдгреА рдХреЛрдб рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рд╕рд╛рдл, рдЫреЛрдЯрд╛ рдФрд░ рд╕рд░рд▓ рджрд┐рдЦрддрд╛ рд╣реИред
рд╕реНрдХреЗрдЪ рдЕрд░реБрдбрд┐рдиреЛ
рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрд╕рдВрддреБрд╖реНрдЯ, рд▓рд┐рдЦрд┐рдд, рд╕рдордЭрд╛ рдЧрдпрд╛ ... рдФрд░ рдпрд╣рд╛рдВ рдпрд╣ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдореИрдВ рдЪрд░рдгреЛрдВ рдореЗрдВ рд╕рдм рдХреБрдЫ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛, рдФрд░ рдлрд┐рд░ рдореИрдВ рдкреВрд░реА рдлрд╛рдЗрд▓ рдХрд╛ рд▓рд┐рдВрдХ рджреВрдВрдЧрд╛ред
рдЪрд░
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕реНрдерд┐рд░рд╛рдВрдХ рдФрд░ рдЪрд░ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬрд┐рдирдХреА рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
#include <SoftwareSerial.h> // \ // SoftwareSerial BTSerial(8, 9); // int speedRight = 6; int dirLeft = 3; int speedLeft = 11; int dirRight = 7; // , int angleDirection = 4; int angleSpeed = 5; //, , // int pinAngleStop = 12; // String val; // int speedTurn = 180; //, // int pinRed = A0; int pinWhite = A1; int pinBlack = A2; // long lastTakeInformation; //, , boolean readAngle = false; boolean readSpeed = false;
рд╕реЗрдЯрдЕрдк () рд╡рд┐рдзрд┐
рд╕реЗрдЯрдЕрдк () рд╡рд┐рдзрд┐ рдореЗрдВ, рд╣рдо рдкрд┐рди рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ: рд╡реЗ рдЗрдирдкреБрдЯ рдпрд╛ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред рд╣рдордиреЗ Arduino рдХреЗ рд╕рд╛рде рдХрдВрдкреНрдпреВрдЯрд░ рдХреА рд╕рдВрдЪрд╛рд░ рдЧрддрд┐, Arduino рдХреЗ рд╕рд╛рде рдмреНрд▓реВрдЯреВрде рднреА рд╕реЗрдЯ рдХрд┐рдпрд╛ рд╣реИред
void setup() { pinMode(dirLeft, OUTPUT); pinMode(speedLeft, OUTPUT); pinMode(dirRight, OUTPUT); pinMode(speedRight, OUTPUT); pinMode(pinRed, INPUT); pinMode(pinBlack, INPUT); pinMode(pinWhite, INPUT); pinMode(pinAngleStop, OUTPUT); pinMode(angleDirection, OUTPUT); pinMode(angleSpeed, OUTPUT); // HC-05 // , BTSerial.begin(38400); // Serial.begin(9600); }
рд▓реВрдк () рд╡рд┐рдзрд┐ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрдп
рд▓рдЧрд╛рддрд╛рд░ рджреЛрд╣рд░рд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд▓реВрдк () рд╡рд┐рдзрд┐ рдореЗрдВ, рдбреЗрдЯрд╛ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореБрдЦреНрдп рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдлрд╝рдВрдХреНрд╢рдиред
void loop() { // if(BTSerial.available() > 0) { // char a = BTSerial.read(); if (a == '@') { // @ ( ) // val val = ""; //, readSpeed = true; } else if (readSpeed) { // // val if(a == '#') { // , // Serial.println(val); //, readSpeed = false; // go(val.toInt()); // val val = ""; // , return; } val+=a; } else if (a == '*') { // readAngle = true; } else if (readAngle) { // , // , val if(a == '#') { Serial.println(val); Serial.println("-----"); readAngle = false; // turn(val.toInt()); val= ""; return; } val+=a; } // lastTakeInformation = millis(); } else { // , 150 // if(millis() - lastTakeInformation > 150) { lastTakeInformation = 0; analogWrite(angleSpeed, 0); analogWrite(speedRight, 0); analogWrite(speedLeft, 0); } } }
рд╣рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддрд╛ рд╣реИ: рдлреЛрди рд╕реЗ рд╣рдо "@ рдЧрддрд┐ # рдХреЛрдг #" рдХреА рд╢реИрд▓реА рдореЗрдВ рдмрд╛рдЗрдЯреНрд╕ рднреЗрдЬрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдХрдорд╛рдВрдб "@ 200 # 60 #"ред рдпрд╣ рдЪрдХреНрд░ рд╣рд░ 100 рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдХреЛ рджреЛрд╣рд░рд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдВрдбреНрд░реЙрдЗрдб рдкрд░ рд╣рдо рдХрдорд╛рдВрдб рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдЕрдВрддрд░рд╛рд▓ рдХреЛ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдХрддрд╛рд░ рдореЗрдВ рд▓рдЧрдиреЗ рд▓рдЧрддреЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рд▓рдВрдмрд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкрд╣рд┐рдП рдЬреЛрд░-рдЬреЛрд░ рд╕реЗ рдЪрд▓рдиреЗ рд▓рдЧрддреЗ рд╣реИрдВред рджреЗрд░реА () рдХрдорд╛рдВрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреЗрд░реА, рдЬрд┐рд╕реЗ рдЖрдк рдмрд╛рдж рдореЗрдВ рджреЗрдЦреЗрдВрдЧреЗ, рд╢рд╛рд░реАрд░рд┐рдХ рдФрд░ рдЧрдгрд┐рддреАрдп рдЧрдгрдирд╛рдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдЖрдиреБрднрд╡рд┐рдХ рд░реВрдк рд╕реЗ рдЪреБрдирд╛ рдЬрд╛рддрд╛ рд╣реИред zadrezham, рдорд╢реАрди рдЖрд╕рд╛рдиреА рд╕реЗ рдЪрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдореЗрдВ рд╕рднреА рдЯреАрдореЛрдВ рдХреЗ рдкрд╛рд╕ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ (рдзрд╛рд░рд╛рдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред)рдЪрдХреНрд░ рдореЗрдВ рджреЛ рдкрдХреНрд╖ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╡реЗ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдорд╢реАрди рдХреЛ рдЪрд▓рддреЗ рд╣реИрдВ рдФрд░ рд╕реНрдкрд┐рди рдХрд░рддреЗ рд╣реИрдВред void go(int mySpeed) { // 0 if(mySpeed > 0) { // digitalWrite(dirRight, HIGH); analogWrite(speedRight, mySpeed); digitalWrite(dirLeft, HIGH); analogWrite(speedLeft, mySpeed); } else { // 0, digitalWrite(dirRight, LOW); analogWrite(speedRight, abs(mySpeed) + 30); digitalWrite(dirLeft, LOW); analogWrite(speedLeft, abs(mySpeed) + 30); } delay(10); } void turn(int angle) { // digitalWrite(pinAngleStop, HIGH); // , delay(5); // 150 , // 30 , // 31 149 if(angle > 149) { // , // , // return if( digitalRead(pinWhite) == HIGH && digitalRead(pinBlack) == LOW && digitalRead(pinRed) == LOW) { return; } // // digitalWrite(angleDirection, HIGH); analogWrite(angleSpeed, speedTurn); } else if (angle < 31) { if(digitalRead(pinRed) == HIGH && digitalRead(pinBlack) == HIGH && digitalRead(pinWhite) == HIGH) { return; } digitalWrite(angleDirection, LOW); analogWrite(angleSpeed, speedTurn); } // digitalWrite(pinAngleStop, LOW); delay(5); }
рдЬрдм рдПрдВрдбреНрд░реЙрдЗрдб рдбрд╛рдЯрд╛ рднреЗрдЬрддрд╛ рд╣реИ рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ 60, 90, 120 рдХреЗ рдХреЛрдг рдкрд░ рдЪрдврд╝ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдЖрдк рд╕реАрдзреЗ рдирд╣реАрдВ рдЬрд╛ рдкрд╛рдПрдВрдЧреЗред рд╣рд╛рдВ, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдХреЛрдг рдмрд╣реБрдд рдЫреЛрдЯрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рддреБрд░рдВрдд рдПрдВрдбреНрд░реЙрдЗрдб рд╕реЗ рдПрдХ рдЯрд░реНрди рдХрдорд╛рдВрдб рднреЗрдЬрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдпрд╣ рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдХрд┐рд╕реА рддрд░рд╣ рдЕрдирд╛рдбрд╝реА рд╣реИредрд╕реНрдХреЗрдЪ рдкрд░рд┐рдгрд╛рдо
рдПрдХ рд╕реНрдХреЗрдЪ рдореЗрдВ рдХреЗрд╡рд▓ рддреАрди рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЪрд░рдг рд╣реЛрддреЗ рд╣реИрдВ: рдПрдХ рдХрдорд╛рдВрдб рдкрдврд╝рдирд╛, рд░реЛрдЯреЗрд╢рди рдХреА рд╕реАрдорд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рдФрд░ рдореЛрдЯрд░реНрд╕ рдХреЛ рдХрд░рдВрдЯ рдХреА рдЖрдкреВрд░реНрддрд┐ рдХрд░рдирд╛ред рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд▓рдЧрддрд╛ рд╣реИ, рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдореЗрдВ рдпрд╣ рдЖрд╕рд╛рди рд╕реЗ рдЖрд╕рд╛рди рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдФрд░ рдХреБрдВрдж рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╕реНрдХреЗрдЪ рдХрд╛ рдкреВрд░реНрдг рд╕рдВрд╕реНрдХрд░рдг редрдЕрдВрдд рдореЗрдВ
рдХрд╛рдо рдХреЗ рдХрдИ рдорд╣реАрдиреЛрдВ рдХреА рдПрдХ рдкреВрд░реА рд╕реВрдЪреА рдЦрддреНрдо рд╣реЛ рдЧрдИ рд╣реИред рднреМрддрд┐рдХ рднрд╛рдЧ рд╡рд┐рдШрдЯрд┐рдд рд╣реИ, рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╕рднреА рдФрд░ рдЕрдзрд┐рдХред рд╕рд┐рджреНрдзрд╛рдВрдд рдПрдХ рд╣реА рд░рд╣рддрд╛ рд╣реИ - рдЕрд╕рдВрдЧрдд рдШрдЯрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрдкрд░реНрдХ, рд╣рдо рдПрдХ рд╕рд╛рде рд╕рдордЭреЗрдВрдЧреЗредрдФрд░ рдкрд╣рд▓реЗ рднрд╛рдЧ рдХреЗ рддрд╣рдд рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИрдВ, рдЙрдиреНрд╣реЛрдВрдиреЗ рд╕рднреА рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж , рдЙрдкрдпреЛрдЧреА рд╕реБрдЭрд╛рд╡реЛрдВ рдХреЗ рдПрдХ рдкрд╣рд╛рдбрд╝ рдХреА рд╕рд▓рд╛рд╣ рджреА редрдкрд░рд┐рдгрд╛рдо рд╡реАрдбрд┐рдпреЛ