String throttle; volatile unsigned int speed_min; volatile unsigned int speed_level; volatile unsigned int speed_one; volatile unsigned int speed_two; volatile unsigned int speed_three; volatile unsigned int speed_max; volatile unsigned int speed_add; volatile long mTime; volatile long test; volatile int item; volatile int length; volatile int buzzer; volatile int ledPin; volatile int ESC; volatile int light; volatile boolean heart; void Action(String throttle) { Serial.print(item); Serial.print("--"); if (throttle == "stop") { analogWrite(ESC,speed_level); pinMode(buzzer, OUTPUT); digitalWrite(buzzer,LOW); pinMode(ledPin, OUTPUT); digitalWrite(ledPin,LOW); throttle = ""; item = speed_level; buzzer2(1, 500); Serial.print("stop"); } else if (throttle == "decrease") { if (item > speed_level) { for (int i = (item); i >= (item - speed_add); i = i + (-1)) { analogWrite(ESC,i); delay(50); } } item = item - speed_add; buzzer2(1, 100); Serial.print("decrease"); } else if (throttle == "increase") { if (item < speed_max) { for (int i = (item); i <= (item + speed_add); i = i + (1)) { analogWrite(ESC,i); delay(50); } } item = item + speed_add; buzzer2(1, 200); Serial.print("increase"); } else if (throttle == "one") { if (item <= speed_one) { for (int i = (item); i <= (speed_one); i = i + (1)) { analogWrite(ESC,i); delay(50); } } else { for (int i = (item); i >= (speed_one); i = i + (-1)) { analogWrite(ESC,i); delay(50); } } item = speed_one; buzzer2(1, 150); Serial.print("speed1"); } else if (throttle == "two") { if (item <= speed_two) { for (int i = (item); i <= (speed_two); i = i + (1)) { analogWrite(ESC,i); delay(50); } } else { for (int i = (item); i >= (speed_one); i = i + (-1)) { analogWrite(ESC,i); delay(50); } } item = speed_two; buzzer2(2, 150); Serial.print("speed2"); } else if (throttle == "three") { if (item <= speed_three) { for (int i = (item); i <= (speed_three); i = i + (1)) { analogWrite(ESC,i); delay(50); } } else { for (int i = (item); i >= (speed_three); i = i + (-1)) { analogWrite(ESC,i); delay(50); } } item = speed_three; buzzer2(3, 150); Serial.print("speed3"); } else if (throttle == "four") { if (item <= speed_max) { for (int i = (item); i <= (speed_max); i = i + (1)) { analogWrite(ESC,i); delay(50); } } else { for (int i = (item); i >= (speed_max); i = i + (-1)) { analogWrite(ESC,i); delay(50); } } item = speed_max; buzzer2(4, 150); Serial.print("speed4"); } else if (throttle == "turn on") { pinMode(ledPin, OUTPUT); digitalWrite(ledPin,HIGH); buzzer2(1, 200); Serial.print("turn on"); } else if (throttle == "turn off") { pinMode(ledPin, OUTPUT); digitalWrite(ledPin,LOW); buzzer2(1, 200); Serial.print("turn off"); } else if (throttle == "buzzer on") { buzzer2(2, 300); Serial.print("buzzer on"); } else if (throttle == "buzzer off") { buzzer2(2, 100); Serial.print("buzzer off"); } Serial.print("--"); Serial.println(item); throttle = ""; } void lanya() { if (Serial.available() > 0) { throttle = Serial.readString(); if (throttle == "start") { Serial.println("手机蓝牙模式"); Serial.println("Start,read go!"); buzzer2(3, 200); do{ throttle = ""; throttle = Serial.readString(); if (throttle == "reset") { analogWrite(ESC,speed_min); pinMode(buzzer, OUTPUT); digitalWrite(buzzer,LOW); pinMode(ledPin, OUTPUT); digitalWrite(ledPin,LOW); heart = 0; Serial.println("reset"); buzzer2(1, 500); break; } if (throttle == "") { heart = 1; mTime = millis(); } distance(); if (heart == 1) { test = millis(); if (test - mTime > 10000) { throttle = "stop"; } } if (throttle != "") { Action(throttle); } }while(true); } } } void buzzer2(int x, int y) { for (int i = (1); i <= (x); i = i + (1)) { pinMode(buzzer, OUTPUT); digitalWrite(buzzer,HIGH); delay(y); pinMode(buzzer, OUTPUT); digitalWrite(buzzer,LOW); delay(y); } } float checkdistance_6_5() { digitalWrite(6, LOW); delayMicroseconds(2); digitalWrite(6, HIGH); delayMicroseconds(10); digitalWrite(6, LOW); float distance = pulseIn(5, HIGH) / 58.00; delay(10); return distance; } void distance() { length = checkdistance_6_5(); if (length < 100) { length = checkdistance_6_5(); if (length < 100) { throttle = "stop"; Serial.print("--"); Serial.print("distance is:"); Serial.print(length); Serial.print("--"); } } } void light_check() { light = analogRead(A0); if (light < 200) { pinMode(ledPin, OUTPUT); digitalWrite(ledPin,HIGH); } else { pinMode(ledPin, OUTPUT); digitalWrite(ledPin,LOW); } } void setup(){ throttle = ""; speed_min = 80; speed_level = 100; speed_one = 135; speed_two = 150; speed_three = 175; speed_max = 200; speed_add = 10; mTime = 0; test = 0; item = speed_level; length = 0; buzzer = 2; ledPin = 4; ESC = 9; light = 0; heart = 0; Serial.begin(9600); analogWrite(ESC,speed_level); pinMode(ledPin, OUTPUT); digitalWrite(ledPin,LOW); pinMode(buzzer, OUTPUT); digitalWrite(buzzer,LOW); // throttle蓝牙接收指令 // speed_min最小控制速度 // speed_level启动速度 // speed_one速度1 // speed_two速度2 // speed_three速度3 // speed_max速度4,也是最大速度 // speed_add单位速度增加量 // mTime记录过去的系统时间 // test记录当前系统时间 // item速度控制实际值 // length超声波测的当前距离障碍物距离 // heart心跳指示 // buzzer定义有源蜂鸣器引脚2 // ledPin定义有前灯引脚4 // ESC定义无刷电机引脚9 // 超声波Trig接6,Echo接5 // 光照检测接A0 pinMode(6, OUTPUT); pinMode(5, INPUT); } void loop(){ do{ lanya(); delay(10); light_check(); }while(true); }