https://www.tinkercad.com/things/4AExYidYZJ5
https://play.google.com/store/apps/details?id=com.electro_tex.bluetoothcar&pcampaignid=web_share
/** d8888 888 888 8888888888 d8b d88888 888 888 888 Y8P d88P888 888 888 888 d88P 888 888 8888b. .d8888b 88888b. 8888888 88888b. .d88b. 888 88888b. .d88b. .d88b. 888d888 d88P 888 888 "88b 88K 888 "88b 888 888 "88b d88P"88b 888 888 "88b d8P Y8b d8P Y8b 888P" d88P 888 888 .d888888 "Y8888b. 888 888 888 888 888 888 888 888 888 888 88888888 88888888 888 d8888888888 888 888 888 X88 888 888 888 888 888 Y88b 888 888 888 888 Y8b. Y8b. 888 d88P 888 888 "Y888888 88888P' 888 888 8888888888 888 888 "Y88888 888 888 888 "Y8888 "Y8888 888 888 Y8b d88P "Y88P" */ #include <Servo.h> #include "SDHT.h" SDHT dht; // Объявляем пины для Сервоприводов int PIN_SERVO_A = 9; int PIN_SERVO_B = 6; // Объявляем пины для левого двигателя int PIN_IN1 = 2; int PIN_IN2 = 3; // Объявляем пины для правого двигателя int PIN_IN3 = 4; int PIN_IN4 = 5; // Объявляем пины для фар int PIN_LED = 13; // Объявляем пины для HC-SR04 int PIN_ECHO = 10; int PIN_TRIG = 11; // Создаем объект Servo servoA; Servo servoB; void setup() { Serial.begin(9600); Serial.setTimeout(5); pinMode(PIN_IN1, OUTPUT); pinMode(PIN_IN2, OUTPUT); pinMode(PIN_IN3, OUTPUT); pinMode(PIN_IN4, OUTPUT); pinMode(PIN_LED, OUTPUT); pinMode(PIN_TRIG, OUTPUT); pinMode(PIN_ECHO, INPUT); servoA.attach(PIN_SERVO_A); servoB.attach(PIN_SERVO_B); } void loop() { char inputValue; String value = ""; while (Serial.available() > 0) { //Чтение данных String linea = Serial.readString(); Serial.println(linea); for (int i = 0 ; i < linea.length(); i++) { int caracter = linea[i]; if (isDigit(caracter)) { // Если цифра value += (char)caracter; // Мы сохраняем прочитанное значение } else if (caracter != '\n') { // Мы спрашиваем, отличается ли это от новой строки inputValue = caracter; // Сохраняем прочитанный код } else { break; } } } if (inputValue == 'F') { forward(); } if (inputValue == 'B') { back(); } if (inputValue == 'L') { left(); } if (inputValue == 'R') { right(); } if (inputValue == 'S') { stop(); } if (inputValue == 'T') { ledOn(); } if (inputValue == 'Y') { ledOff(); } if (inputValue == 'M') { if (value != "") { turnServoA(value.toInt()); } } if (inputValue == 'N') { if (value != "") { turnServoB(value.toInt()); } } Serial.print("D"); Serial.println(measureDistance()); if (dht.read(DHT11, 2)) { Serial.print("H"); Serial.print(String(double(dht.celsius) / 10, 1)); } delay(10); } long measureDistance() { digitalWrite(PIN_TRIG, LOW); delayMicroseconds(5); digitalWrite(PIN_TRIG, HIGH); delayMicroseconds(10); digitalWrite(PIN_TRIG, LOW); long duration = pulseIn(PIN_ECHO, HIGH); return microsecondsToCentimeters(duration); } long microsecondsToCentimeters (long microseconds) { return microseconds / 29 / 2; } void ledOn() { digitalWrite(PIN_LED, HIGH); } void ledOff() { digitalWrite(PIN_LED, LOW); } void turnServoA(int angle) { servoA.write(angle); } void turnServoB(int angle) { servoB.write(180 - angle); } void forward() { digitalWrite (PIN_IN1, HIGH); digitalWrite (PIN_IN2, LOW); digitalWrite (PIN_IN3, HIGH); digitalWrite (PIN_IN4, LOW); } void back() { digitalWrite (PIN_IN1, LOW); digitalWrite (PIN_IN2, HIGH); digitalWrite (PIN_IN3, LOW); digitalWrite (PIN_IN4, HIGH); } void stop() { digitalWrite (PIN_IN1, LOW); digitalWrite (PIN_IN2, LOW); digitalWrite (PIN_IN3, LOW); digitalWrite (PIN_IN4, LOW); } void left() { digitalWrite (PIN_IN1, LOW); digitalWrite (PIN_IN2, HIGH); digitalWrite (PIN_IN3, HIGH); digitalWrite (PIN_IN4, LOW); } void right() { digitalWrite (PIN_IN3, LOW); digitalWrite (PIN_IN4, HIGH); digitalWrite (PIN_IN1, HIGH); digitalWrite (PIN_IN2, LOW); }