Java код:
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
public class MainActivity extends AppCompatActivity {
private static final int REQUEST_ENABLE_BT = 1;
private BluetoothAdapter bluetoothAdapter;
private ArrayList<String> pairedDeviceArrayList;
private ListView listViewPairedDevice;
private FrameLayout butPanel;
private ArrayAdapter<String> pairedDeviceAdapter;
private UUID myUUID;
private ThreadConnectBTdevice myThreadConnectBTdevice;
private ThreadConnected myThreadConnected;
private StringBuilder sb = new StringBuilder();
private TextView textInfo;
private boolean isRedOn = false;
private boolean isBlueOn = false;
private ImageButton buttonRed;
private ImageButton buttonBlue;
@Override
protected void onCreate(Bundle savedInstanceState) {
[Link](savedInstanceState);
setContentView([Link].activity_main);
final String UUID_STRING_WELL_KNOWN_SPP = "00001101-0000-1000-8000-
00805F9B34FB";
textInfo = findViewById([Link]);
listViewPairedDevice = findViewById([Link]);
butPanel = findViewById([Link]);
buttonRed = findViewById([Link]);
buttonBlue = findViewById([Link]);
if (!
getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH)) {
[Link](this, "BLUETOOTH NOT supported",
Toast.LENGTH_LONG).show();
finish();
return;
}
myUUID = [Link](UUID_STRING_WELL_KNOWN_SPP);
bluetoothAdapter = [Link]();
if (bluetoothAdapter == null) {
[Link](this, "Bluetooth is not supported on this hardware
platform", Toast.LENGTH_LONG).show();
finish();
return;
}
@SuppressLint("MissingPermission") String stInfo =
[Link]() + " " + [Link]();
[Link]([Link]("Наше устройство: %s", stInfo));
}
@SuppressLint("MissingPermission")
@Override
protected void onStart() {
[Link]();
if (![Link]()) {
Intent enableIntent = new
Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableIntent, REQUEST_ENABLE_BT);
} else {
setup();
}
}
@SuppressLint("MissingPermission")
private void setup() {
@SuppressLint("MissingPermission") Set<BluetoothDevice> pairedDevices
= [Link]();
if ([Link]() > 0) {
pairedDeviceArrayList = new ArrayList<>();
for (BluetoothDevice device : pairedDevices) {
[Link]([Link]() + "\n" +
[Link]());
}
pairedDeviceAdapter = new ArrayAdapter<>(this,
[Link].simple_list_item_1, pairedDeviceArrayList);
[Link](pairedDeviceAdapter);
[Link]((parent, view,
position, id) -> {
[Link]([Link]);
String itemValue = (String)
[Link](position);
String MAC = [Link]([Link]() - 17);
BluetoothDevice device2 =
[Link](MAC);
myThreadConnectBTdevice = new ThreadConnectBTdevice(device2);
[Link]();
});
}
}
@Override
protected void onDestroy() {
[Link]();
if (myThreadConnectBTdevice != null)
[Link]();
}
@SuppressLint("MissingSuperCall")
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent
data) {
if (requestCode == REQUEST_ENABLE_BT) {
if (resultCode == Activity.RESULT_OK) {
setup();
} else {
[Link](this, "Bluetooth не включён",
Toast.LENGTH_SHORT).show();
finish();
}
}
}
private class ThreadConnectBTdevice extends Thread {
private BluetoothSocket bluetoothSocket = null;
@SuppressLint("MissingPermission")
private ThreadConnectBTdevice(BluetoothDevice device) {
try {
bluetoothSocket =
[Link](myUUID);
} catch (IOException e) {
[Link]();
}
}
@SuppressLint("MissingPermission")
@Override
public void run() {
boolean success = false;
try {
[Link]();
success = true;
} catch (IOException e) {
[Link]();
runOnUiThread(() -> {
[Link]([Link], "Нет соединения.
Проверьте устройство!", Toast.LENGTH_LONG).show();
[Link]([Link]);
});
try {
[Link]();
} catch (IOException e1) {
[Link]();
}
}
if (success) {
runOnUiThread(() -> [Link]([Link]));
myThreadConnected = new ThreadConnected(bluetoothSocket);
[Link]();
}
}
public void cancel() {
[Link](getApplicationContext(), "Закрытие
BluetoothSocket", Toast.LENGTH_LONG).show();
try {
[Link]();
} catch (IOException e) {
[Link]();
}
}
}
private class ThreadConnected extends Thread {
private final InputStream connectedInputStream;
private final OutputStream connectedOutputStream;
public ThreadConnected(BluetoothSocket socket) {
InputStream in;
OutputStream out;
try {
in = [Link]();
out = [Link]();
} catch (IOException e) {
[Link]();
in = null;
out = null;
}
connectedInputStream = in;
connectedOutputStream = out;
}
@Override
public void run() {
while (true) {
try {
byte[] buffer = new byte[1];
int bytes = [Link](buffer);
String strIncom = new String(buffer, 0, bytes);
[Link](strIncom);
int endOfLineIndex = [Link]("\r\n");
if (endOfLineIndex > 0) {
String sbprint = [Link](0, endOfLineIndex);
[Link](0, [Link]());
}
} catch (IOException e) {
break;
}
}
}
public void write(byte[] buffer) {
try {
[Link](buffer);
} catch (IOException e) {
[Link]();
}
}
}
public void onClickRed(View v) {
if (myThreadConnected != null) {
byte[] bytesToSend = isRedOn ? "B".getBytes() : "b".getBytes();
[Link](bytesToSend);
isRedOn = !isRedOn;
[Link](isRedOn ? [Link] :
[Link]);
[Link]([Link], isRedOn ? "RED LED ON" : "RED
LED OFF", Toast.LENGTH_SHORT).show();
}
}
public void onClickBlue(View v) {
if (myThreadConnected != null) {
byte[] bytesToSend = isBlueOn ? "A".getBytes() : "a".getBytes();
[Link](bytesToSend);
isBlueOn = !isBlueOn;
[Link](isBlueOn ? [Link] :
[Link]);
[Link]([Link], isBlueOn ? "BLUE LED ON" :
"BLUE LED OFF", Toast.LENGTH_SHORT).show();
}
}
//Сервопривод
public void swapleft(View v) {
if (myThreadConnected != null) {
byte[] bytesToSend = "c".getBytes();
[Link](bytesToSend);
[Link]([Link], "Servo turned left",
Toast.LENGTH_SHORT).show();
}
}
public void swapright(View v) {
if (myThreadConnected != null) {
byte[] bytesToSend = "d".getBytes();
[Link](bytesToSend);
[Link]([Link], "Servo turned right",
Toast.LENGTH_SHORT).show();
}
}
}
XML:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="[Link]
xmlns:tools="[Link]
android:layout_width="fill_parent"
android:layout_height="fill_parent"
tools:context=".MainActivity"
android:id="@+id/osnova"
android:background="#e7e8ea"
android:contextClickable="true">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textInfo"
android:textSize="22dp"
android:layout_marginLeft="20dp"
android:layout_marginTop="20dp"
android:visibility="visible" />
<ListView
android:layout_width="250dp"
android:layout_height="wrap_content"
android:id="@+id/pairedlist"
android:layout_below="@+id/textInfo"
android:layout_alignParentStart="true"
android:layout_marginTop="30dp"
android:layout_marginLeft="20dp"
android:visibility="visible" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#e7e7e5"
android:id="@+id/ButPanel"
android:visibility="gone">
<ImageButton
android:id="@+id/imageButtonRed"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right|top"
android:layout_marginTop="20dp"
android:layout_marginRight="30dp"
android:contentDescription="Red Lamp Button"
android:onClick="onClickRed"
android:src="@drawable/offlamp" />
<TextView
android:id="@+id/red"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right|top"
android:layout_marginTop="80dp"
android:layout_marginRight="40dp"
android:text="RED"
android:textSize="30dp" />
<ImageButton
android:id="@+id/imageButtonBlue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left|top"
android:layout_marginTop="20dp"
android:layout_marginLeft="40dp"
android:contentDescription="Blue Lamp Button"
android:onClick="onClickBlue"
android:src="@drawable/offlamp" />
<TextView
android:id="@+id/blue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left|top"
android:layout_marginTop="80dp"
android:layout_marginLeft="40dp"
android:text="BLUE"
android:textSize="30dp" />
<!--SERVO-->
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageButton3"
android:layout_gravity="left|top"
android:src="@drawable/arrowleft"
android:layout_marginTop="150dp"
android:layout_marginLeft="30dp"
android:onClick="swapleft" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="SERVO"
android:id="@+id/servo"
android:layout_gravity="center_horizontal|top"
android:textSize="30dp"
android:layout_marginTop="160dp" />
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageButton4"
android:layout_gravity="right|top"
android:layout_marginTop="150dp"
android:layout_marginRight="30dp"
android:src="@drawable/arrowright"
android:onClick="swapright" />
</FrameLayout>
</RelativeLayout>
Ардуино код:
#include <Servo.h>
Servo myServo;
int val;
int d12 = 12;
int d13 = 13;
int servoPin = 9;
int pos = 90; // Начальная позиция сервопривода
void setup() {
[Link](9600);
pinMode(d12, OUTPUT);
pinMode(d13, OUTPUT);
[Link](servoPin);
[Link](pos);
}
void loop() {
if ([Link]()) {
val = [Link]();
if(val == 'a')
{
digitalWrite(d12, HIGH);
[Link]("D12 ON");
}
if(val == 'A')
{
digitalWrite(d12, LOW);
[Link]("D12 OFF");
}
if(val == 'b')
{
digitalWrite(d13, HIGH);
[Link]("D13 ON");
}
if(val == 'B')
{
digitalWrite(d13, LOW);
[Link]("D1 OFF");
}
if (val == 'c') {
pos = max(pos - 10, 0);
[Link](pos);
[Link]("Servo left, pos: ");
[Link](pos);
}
if (val == 'd') {
pos = min(pos + 10, 180);
[Link](pos);
[Link]("Servo right, pos: ");
[Link](pos);
}
}
}