Skip to content

Latest commit

 

History

History
368 lines (353 loc) · 7.59 KB

File metadata and controls

368 lines (353 loc) · 7.59 KB
\\Soft_Serial
#include <SoftwareSerial.h>
#define SS_RX 4
#define SS_TX 5
SoftwareSerial BT_Serial(SS_RX, SS_TX);
String comdata = "";
void setup() {
  // put your setup code here, to run once:
  pinMode(SS_RX, INPUT);
  pinMode(SS_TX, OUTPUT);
  Serial.begin(38400);
  while(!Serial);
  Serial.println("Hardware serial port begins @ 0, 1 (RX, TX), connecting USB serial.");
  BT_Serial.begin(38400);
  Serial.println("Software serial port begins @ " + String(SS_RX) + "," + \
  String(SS_TX) + " (RX, TX), connexting your device.");
}
void loop() {
  // put your main code here, to run repeatedly:
  while(Serial.available())
  {
    comdata += char(Serial.read());
    delay(2);
  }
  if(comdata.length())
  {
    Serial.print(comdata);
    BT_Serial.print(comdata);
    comdata = "";
  }
  while(BT_Serial.available())
  {
    comdata += char(BT_Serial.read());
    delay(2);
  }
  if(comdata.length())
  {
    Serial.print(comdata);
    comdata = "";
  }
}
\\RemoteKey
#include <SoftwareSerial.h>
#define SS_RX 4
#define SS_TX 5
#define key_F 12
#define key_B 11
#define key_L 10
#define key_R 9
SoftwareSerial BT_Serial(SS_RX, SS_TX); // RX, TX
String comdata = "";
int key;
void setup()
{
  pinMode(SS_RX, INPUT);
  pinMode(SS_TX, OUTPUT);
  pinMode(key_F, INPUT_PULLUP);
  pinMode(key_B, INPUT_PULLUP);
  pinMode(key_L, INPUT_PULLUP);
  pinMode(key_R, INPUT_PULLUP);
  Serial.begin(38400);
  while (!Serial);
  Serial.println("Bluetooth-remoted car starting...");
  BT_Serial.begin(38400);
  Serial.println("Software serial port begins @ " + String(SS_RX) + "," + \
  String(SS_TX) + " (RX, TX), connexting your device.");
}
void loop()
{
key = (digitalRead(key_F)<<3)+(digitalRead(key_B)<<2)+\
(digitalRead(key_L)<<1)+digitalRead(key_R);
if (key == B0111) BT_Serial.println("Forward");
else if (key == B1011) BT_Serial.println("Back");
else if (key == B1101) BT_Serial.println("Left");
else if (key == B1110) BT_Serial.println("Right");
else if (key == B0101) BT_Serial.println("Forward Left");
else if (key == B0110) BT_Serial.println("Forward Right");
else if (key == B1001) BT_Serial.println("Back Left");
else if (key == B1010) BT_Serial.println("Back Right");
else if (key == B0011) BT_Serial.println("Stop");
else if (key == B1100) BT_Serial.println("Read");
else BT_Serial.println("Idle");
delay(100);
 while(Serial.available())
  {
    comdata += char(Serial.read());
    delay(2);
  }
  if(comdata.length())
  {
    Serial.print(comdata);
    BT_Serial.print(comdata);
    comdata = "";
  }
  while(BT_Serial.available())
  {
    comdata += char(BT_Serial.read());
    delay(2);
  }
  if(comdata.length())
  {
    Serial.print(comdata);
    comdata = "";
  }
}
//ToyCar
#include <Ultrasonic.h>
#include <Servo.h>
#define in1 5
#define in2 11
#define in3 6
#define in4 3
#define servo_port 9
#define pwm 63
#define limit 20
#define comp_Front 7
#define comp_Rear 4
#define vth_Batt 7400
#define mid 99
Ultrasonic ultra_Front(18, 17);
Ultrasonic ultra_Rear(16, 15);
String inputString = "";
boolean stringComplete = false;
int distance_Front, distance_Rear, i;
long volt_Batt;
Servo myservo;

void motor_F()
{
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
  digitalWrite(in3, HIGH);
  digitalWrite(in4, LOW);
  myservo.write(mid);
}

void motor_B()
{
  digitalWrite(in1, LOW);
  digitalWrite(in2, HIGH);
  digitalWrite(in3, LOW);
  digitalWrite(in4, HIGH);
  myservo.write(mid);
}

void motor_L()
{
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);
  digitalWrite(in3, HIGH);
  digitalWrite(in4, LOW);
  myservo.write(mid - 30);
}

void motor_R()
{
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
  digitalWrite(in3, LOW);
  digitalWrite(in4, LOW);
  myservo.write(mid + 30);
}

void motor_S()
{
  digitalWrite(in1, HIGH);
  digitalWrite(in2, HIGH);
  digitalWrite(in3, HIGH);
  digitalWrite(in4, HIGH);
  myservo.write(mid);
}

void motor_I()
{
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);
  digitalWrite(in3, LOW);
  digitalWrite(in4, LOW);
  myservo.write(mid);
}

void motor_FL()
{
  analogWrite(in1, pwm);
  digitalWrite(in2, LOW);
  digitalWrite(in3, HIGH);
  digitalWrite(in4, LOW);
  myservo.write(mid - 30);
}

void motor_FR()
{
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
  analogWrite(in3, pwm);
  digitalWrite(in4, LOW);
  myservo.write(mid + 30);
}

void motor_BL()
{
  digitalWrite(in1, LOW);
  analogWrite(in2, pwm);
  digitalWrite(in3, LOW);
  digitalWrite(in4, HIGH);
  myservo.write(mid - 30);
}

void motor_BR()
{
  digitalWrite(in1, LOW);
  digitalWrite(in2, HIGH);
  digitalWrite(in3, LOW);
  analogWrite(in4, pwm);
  myservo.write(mid + 30);
}

void setup() {
  // put your setup code here, to run once:
  myservo.attach(servo_port);
  Serial.begin(38400);
  inputString.reserve(200);
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
  motor_I();
}

void loop() {
  // put your main code here, to run repeatedly:
  if(stringComplete)
  {
    distance_Front = ultra_Front.getDistanceInCM() - comp_Front;
    distance_Rear = ultra_Rear.getDistanceInCM() - comp_Rear;
    if((distance_Front < limit) && (distance_Rear < limit))
    {
      Serial.println("Close to BOTH Obstacles!");
      Serial.print("Front: ");
      Serial.print(distance_Front);
      Serial.print("cm. Rear: ");
      Serial.print(distance_Rear);
      Serial.println("cm.");
      inputString = "Stop";
      delay(20);
    }
    else if(distance_Front < limit)
    {
      Serial.println("Close to Front Obstacles. AUTO-BACK.");
      Serial.print("Front: ");
      Serial.print(distance_Front);
      Serial.println("cm.");
      inputString = "Back";
      delay(20);
    }
    else if(distance_Rear < limit)
    {
      Serial.println("Close to Rear Obstacles. AUTO-FORWARD.");
      Serial.print("Rear: ");
      Serial.print(distance_Rear);
      Serial.println("cm.");
      inputString = "Forward";
      delay(20);
    }
    volt_Batt = 0;
    for(i = 0; i < 100; i++)
    {
      volt_Batt += long(analogRead(A0));
      delayMicroseconds(100);
    }
    volt_Batt = volt_Batt * 50 * 11 / 1024;
    if(volt_Batt < vth_Batt)
    {
      Serial.print("Low Battery! Voltage: ");
      Serial.print(volt_Batt);
      Serial.println("mV.");
      inputString = "Idle";
      delay(20);
    }
    if(inputString != "Idle")
    {
      Serial.println(inputString);
    }
    if(inputString == "Forward")
    {
      motor_F();
    }
    else if(inputString == "Back")
    {
      motor_B();
    }
    else if(inputString == "Left")
    {
      motor_L();
    }
    else if(inputString == "Right")
    {
      motor_R();
    }
    else if(inputString == "Stop")
    {
      motor_S();
    }
    else if(inputString == "Idle")
    {
      motor_I();
    }
    else if(inputString == "Forward Left")
    {
      motor_FL();
    }
    else if(inputString == "Forward Right")
    {
      motor_FR();
    }
    else if(inputString == "Back Left")
    {
      motor_BL();
    }
    else if(inputString == "Back Right")
    {
      motor_BR();
    }
    else if(inputString == "Read")
    {
      Serial.print("Front: ");
      Serial.print(distance_Front);
      Serial.print("cm. Rear: ");
      Serial.print(distance_Rear);
      Serial.println("cm.");
      Serial.print("Battery: ");
      Serial.print(volt_Batt);
      Serial.println("mV.");
      motor_I();
    }
    else
    {
      Serial.println("Invalid Command!");
    }
    inputString = "";
    stringComplete = false;
    delay(10);
  }
}

void serialEvent()
{
  while(Serial.available())
  {
    char inChar = (char)Serial.read();
    if((inChar != '\r') && (inChar != '\n'))
    {
      inputString += inChar;
    }
    if(inChar == '\n')
    {
      stringComplete = true;
    }
  }
}