车载系统代码实现

Processing端

//import http.requests.*;

import ddf.minim.*;

import processing.serial.*;

//Serial myPort[0];//car status serial is for distance, speed and compression

//Serial myPort[1];//myPort[1] serial is for myPort[1] control,driver status and vibration control

Serial[] myPorts = new Serial[2];  // Create a list of objects from Serial class

int[] dataIn = new int[2];

PImage bg;

PImage blue;

PImage window;

PImage road;

PImage red;

PImage highspeed;

PImage leftbehind;

int signal;

float speed;

float easing=0.05;

car car;

int second;

driver driver;

AudioPlayer WS1,WS2,player4,warningtiresound,emotion,othercar,carchecking;

Minim minim,minim1;

AudioOutput WS1O,WS2O,WS3O,WS4O;

int musicpdestatus=0;

int frame1=0;

boolean drawU1=false;

int numFrames=4;

PImage[]images1=new PImage[numFrames];

float opacity1=0;

PImage img11;

PImage img12;

PImage img13;

PImage img14;

PImage img15;

PImage img16;

PImage img17;

PImage img18;

int frame=0;

PImage img21;

PImage img22;

PImage img23;

PImage img24;

PImage img25;

PImage img26;

PImage img27;

PImage img28;

PImage img29;

PImage img210;

PImage img211;

PImage img212;

PImage img218;

PImage img213;

PImage img214;

PImage img215;

PImage img216;

PImage img217;

PImage img31;

PImage img32;

PImage img33;

float opacity30=0;

int frame30=0;

float opacity20=0;

int opacity21=0;

int opacity22=0;

int opacity23=0;

int direction20=1;

float speed20=0.0;

float angle2;

float angle21;

float angle22;

float opacity2=0;

int frame2;

int frame20=0;

AudioPlayer player3,overspeedmusic,leftmusic;

boolean drawQ=false;

int open=0;

int strikingstatus=0;

int approachstatus=0;

int tirestatus=0;

int overspeedstatus=0;

int rotatestatus=1;

int coverstatus=0;

void setup()

{  myPorts[0] = new Serial(this, "/dev/tty.usbmodemfa131", 115200);//myPort[0]

   myPorts[1] = new Serial(this, "/dev/tty.usbmodemfd121", 115200);//myPort[1]

  size(800,600);

noStroke();

bg = loadImage("visipic/bg.png");

window = loadImage("visipic/window.png");

blue =loadImage("visipic/blue.png");

road = loadImage("visipic/road.jpg");

img11=loadImage("visipic/music/01.png");

img12=loadImage("visipic/music/02.png");

img13=loadImage("visipic/music/03.png");

img14=loadImage("visipic/music/04.png");

img15=loadImage("visipic/music/05.png");

img16=loadImage("visipic/music/06.png");

img17=loadImage("visipic/music/07.png");

img18=loadImage("visipic/music/08.png");

images1[0]=loadImage("visipic/music/06-0.png");

images1[1]=loadImage("visipic/music/06-1.png");

images1[2]=loadImage("visipic/music/06-2.png");

images1[3]=loadImage("visipic/music/06-3.png");

 img31=loadImage("visipic/striking/1-01.png");

  img32=loadImage("visipic/striking/1-02.png");

  img21=loadImage("visipic/rotate/1.png");

  img22=loadImage("visipic/rotate/3.png");

  img23=loadImage("visipic/rotate/2.png");

  img24=loadImage("visipic/rotate/4.png");

  img25=loadImage("visipic/rotate/6.1.png");

  img26=loadImage("visipic/rotate/6.2.png");

  img27=loadImage("visipic/rotate/6.3.png");

  img28=loadImage("visipic/rotate/6.4.png");

  img29=loadImage("visipic/rotate/5.1.png");

  img210=loadImage("visipic/rotate/5.2.png");

  img211=loadImage("visipic/rotate/5.3.png");

  img212=loadImage("visipic/rotate/2-02.png");

  img218=loadImage("visipic/navigation/4-01.png");

  img213=loadImage("visipic/navigation/4-02.01.png");

  img214=loadImage("visipic/navigation/4-02.02.png");

  img215=loadImage("visipic/navigation/4-03.01.png");

  img216=loadImage("visipic/navigation/4-03.02.png");

  img217=loadImage("visipic/navigation/4-04.01.png");

  frameRate(5);

background(bg);

minim = new Minim(this);

WS1 = minim.loadFile("visimusic/chooseme.mp3",2048);

warningtiresound = minim.loadFile("visimusic/car.mp3",2048);

emotion = minim.loadFile("visimusic/oldboy.mp3",2048);

othercar = minim.loadFile("visimusic/other car.mp3",2048);

carchecking = minim.loadFile("visimusic/car checking.mp3",2048);

player4 = minim.loadFile("visimusic/chooseme.mp3",2048);

overspeedmusic = minim.loadFile("visimusic/overspeed.mp3",2048);

leftmusic = minim.loadFile("visimusic/approach.mp3",2048);

car = new car();

driver = new driver();

delay(1000);

carchecking.play();

image(road,0,0);

image(bg,0,0);

image(window,0,0);

//GetRequest get = new GetRequest("https://young-castle-4901.herokuapp.com/api/votes");

//get.send();

//JSONObject a = parseJSONObject(get.getContent());

//JSONArray b = a.getJSONArray("votes");

//JSONObject a1 = b.getJSONObject(3);//从0开始计数

//ieqstatus[2]= a1.getInt("document_id");

rotatestatus=1;

musicpdestatus=0;

strikingstatus=0;

approachstatus=0;

tirestatus=0;

overspeedstatus=0;

}

void draw()

{ if(coverstatus==1)

{cover();}

if(rotatestatus==1)

{rotation();

}

  if(musicpdestatus==1)

  {music();

  }

  if(strikingstatus==1)

  {car.striking();

  }

if(approachstatus==1)

{car.approach();

}

if(tirestatus==1)

{car.warningtire1();

}

if(overspeedstatus==1)

{driver.overspeed();

}

  while(myPorts[0].available()>0)//to show serial available or not

{

  car.check();

}

while(myPorts[1].available()>0)

{driver.check();

}

}

class car{

  int compression=0;

  int carspeed;

  void striking(){

    

   noTint();

   image(road,0,0);

image(bg,0,0);

image(window,0,0);

    smooth();

   translate(320,-50);

    if(opacity30<255){

    opacity30+=5;

  }  

  tint(255,opacity30);

  image(img31,0,0,400,300);

  translate(-320,50);

  }

 void approach(){

   

   noTint();

   image(road,0,0);

image(bg,0,0);

image(window,0,0);

   opacity23+=50*direction20;

  if((opacity23<0)||(opacity23>255)){

    direction20=-direction20;

  }

     tint(255,opacity23);

     image(img217,220,-80,400,300);

  }

  void check(){

  compression = myPorts[0].read();

  if(compression==111)

  {tirestatus=1;

  coverstatus=0;

 warningtiresound.play();

 warningtiresound.rewind();

  }

  

  if(compression==102)

  {player4 = minim.loadFile("visimusic/night.mp3",2048);

  coverstatus=0;

  strikingstatus=1;

  }

  if(compression==97)

  { warningcar();

  coverstatus=0;

  approachstatus=1;

  myPorts[1].write(7);

  }

   if(compression==98)

  {coverstatus=0;

  leftmusic.play();

    leftmusic.rewind();

    approachstatus=1;

  myPorts[1].write(8);

  }

   if(compression==99)

  {coverstatus=0;

  leftmusic.play();

    leftmusic.rewind();

    approachstatus=1;

  myPorts[1].write(8);

  }

   if(compression==100)

  {warningcar();

  coverstatus=0;

    approachstatus=1;

    

  myPorts[1].write(7);

  }

  }

  void warningcar(){

   othercar.play();

   othercar.rewind();

  }

  

  

  void warningtire1(){

    

   noTint();

   image(road,0,0);

image(bg,0,0);

image(window,0,0);

  smooth();

  opacity23+=100*direction20;

  if((opacity23<0)||(opacity23>255)){

    direction20=-direction20;

  }

  tint(255,opacity23);

  image(img215,220,-80,400,300);

  image(img216,220,-80,400,300);

  }

}

class driver{

  int order;

  void check()

{order = myPorts[1].read();

if(order==88)

{musicpdestatus=0;

coverstatus=0;

player4.pause();

opacity1=0;

}

if(order==66)

{musicpdestatus=1;

coverstatus=0;

 player4.play();}

if(order==65)

{overspeedstatus=1;

coverstatus=0;

myPorts[1].write(8);

myPorts[1].write(7);

overspeedmusic.play();

overspeedmusic.rewind();

}

if (order==89)

{

coverstatus=1;

}

}

  void overspeed(){

    

   noTint();

   image(road,0,0);

image(bg,0,0);

image(window,0,0);

    opacity23+=300*direction20;

  if((opacity23<0)||(opacity23>255)){

    direction20=-direction20;

  }

     tint(255,opacity23);

     image(img213,220,-80,400,300);

     image(img214,220,-80,400,300);

     

  }

}

void cover()

{

  tint(255,255);

  image(road,0,0);

image(bg,0,0);

image(window,0,0);

rotatestatus=0;

musicpdestatus=0;

strikingstatus=0;

approachstatus=0;

tirestatus=0;

overspeedstatus=0;

}

class internet{

  

}

void music()

{ noTint();

  if(opacity1<255){

    opacity1+=100;

  }  

  tint(255,opacity1);

  image(img11,170,-50,400,300);

  image(img12,170,-50,400,300);

  image(img13,170,-50,400,300);

  image(img14,170,-50,400,300);

  image(img15,170,-50,400,300);

  image(img16,170,-50,400,300);

  image(img17,170,-50,400,300);

  image(img18,170,-50,400,300);  

 if(true){

   frame++;

  if(frame==numFrames){

    frame=0;

  }

  image(images1[frame],170,-50,400,300);

  }

}

void rotation(){

   noTint();

   image(road,0,0);

image(bg,0,0);

image(window,0,0);

   smooth();

  translate(170,-50);

 translate(224,142.5);

  rotate(angle2);

  angle21+=0.05;

  rotate(angle21);

  noTint();

  image(img22,-224,-142.5,400,300);

  image(img23,-224,-142.5,400,300);

  angle2+=0.01;

  image(img21,-224,-142.5,400,300);

  angle22-=0.06;

  rotate(angle22);

  translate(-224,-142.5);

  image(img24,0,0,400,300);

  

  if(opacity2<255){

     opacity2+=5;

     }

     tint(255,opacity2);

     float sec=millis()/1000.0;

     if(sec>11.5){

     image(img25,0,0,400,300);

     }

   if(sec>9.0){

     image(img26,0,0,400,300);

     }

   if(sec>10.0){

     image(img27,0,0,400,300);

     }

   if(sec>11.0){

     image(img28,0,0,400,300);

   }

   if(sec>14.0){

     image(img29,0,0,400,300);

   }

   if(sec>15.0){

     image(img210,0,0,400,300);

   }

   if(sec>16.0){

     image(img211,0,0,400,300);

   }

   if(sec>18.0){

     image(img212,0,0,400,300);

   }

   translate(-170,50);

}

Arduino端

车况端:

int csbPin1=3;

int csbPin2=4;

int csbPin3=5;

int csbPin4=6;

int shPin1=7;

int shPin2=8;

int shPin3=9;

int shPin4=10;

int i1=0;int i2=0;int i3=0;int i4=0;

int j1=0;int j2=0;int j3=0;int j4=0;

float value1=0;float value2=0;float value3=0;float value4=0;

float dis1=0;float dis2=0;float dis3=0;float dis4=0;

const int GSR=A2;

int threshold=0;

int sensorValue;

void setup(){

  pinMode(csbPin1,OUTPUT);

  pinMode(csbPin2,OUTPUT);

  pinMode(csbPin3,OUTPUT);

  pinMode(csbPin4,OUTPUT);

  pinMode(shPin1,INPUT);

  pinMode(shPin2,INPUT);

  pinMode(shPin3,INPUT);

  pinMode(shPin4,INPUT);

  Serial.begin(115200);

  

    long sum=0;

  delay(1000);

  

  for(int i=0;i<500;i++)

  {

  sensorValue=analogRead(GSR);

  sum += sensorValue;

  delay(5);

  }

  threshold = sum/500;

   

}

void loop(){

    digitalWrite(csbPin1,LOW);

    delayMicroseconds(2);

    digitalWrite(csbPin1,HIGH);

    delayMicroseconds(2);

    digitalWrite(csbPin1,LOW);

    value1=pulseIn(shPin1,HIGH);

    dis1=(value1*340)/2000000;

    

    digitalWrite(csbPin2,LOW);

    delayMicroseconds(2);

    digitalWrite(csbPin2,HIGH);

    delayMicroseconds(2);

    digitalWrite(csbPin2,LOW);

    value2=pulseIn(shPin2,HIGH);

    dis2=(value2*340)/2000000;

    

    digitalWrite(csbPin3,LOW);

    delayMicroseconds(2);

    digitalWrite(csbPin3,HIGH);

    delayMicroseconds(2);

    digitalWrite(csbPin3,LOW);

    value3=pulseIn(shPin3,HIGH);

    dis3=(value3*340)/2000000;

    

    digitalWrite(csbPin4,LOW);

    delayMicroseconds(2);

    digitalWrite(csbPin4,HIGH);

    delayMicroseconds(2);

    digitalWrite(csbPin4,LOW);

    value4=pulseIn(shPin4,HIGH);

    dis4=(value4*340)/2000000;

    

    

   int compression =  analogRead(A0);

   if(compression<=150)

   {Serial.write("o");

   delay(1000);

   }

    //Serial.print("num1=");

    if(dis1>0.1){

      j1=0;

    }

    if(dis1<0.1&&j1==0){

      i1=1;

    }

    if(i1==1){

      Serial.write("a");

      delay(300);

      i1=0;j1=1;

    }

   // if(j1==0&&dis1<5){

 //   Serial.println(dis1);

 //   delay(500);

 //   }

    

     //   Serial.print("num2=");

    if(dis2>0.1){

      j2=0;

    }

    if(dis2<0.1&&j2==0){

      i2=1;

    }

    if(i2==1){

      Serial.write("b");

      delay(300);

      i2=0;j2=1;

    }

  //  if(j2==0&&dis2<5){

   // Serial.println(dis2);

  //  delay(500);

 //   }//

    

       // Serial.print("num3=");

    if(dis3>0.1){

      j3=0;

    }

    if(dis3<0.1&&j3==0){

      i3=1;

    }

    if(i3==1){

      Serial.write("c");

      delay(300);

      i3=0;j3=1;

    }

  //  if(j3==0&&dis3<5){

  //  Serial.println(dis3);

  //  delay(500);

 //   }

    

     //   Serial.print("num4=");

    if(dis4>0.1){

      j4=0;

    }

    if(dis4<0.1&&j4==0){

      i4=1;

    }

    if(i4==1){

      Serial.write("d");

      delay(300);

      i4=0;j4=1;

    }

    //if(j4==0&&dis4<5){

    //Serial.println(dis4);

   // delay(500);

   // }

   

     int temp;

  sensorValue=analogRead(GSR);

  temp = threshold - sensorValue;

  if(abs(temp)>50)

  {

    sensorValue=analogRead(GSR);

    temp = threshold - sensorValue;

    if(abs(temp)>50){

    Serial.write("f");

    delay(300);

    delay(3000);

}

  }

}

操作段:

/*

 Example sketch for the Xbox 360 USB library - developed by Kristian Lauszus

 For more information visit my blog: http://blog.tkjelectronics.dk/ or

 send me an e-mail:  kristianl@tkjelectronics.com

 */

#include <XBOXUSB.h>

// Satisfy IDE, which only needs to see the include statment in the ino.

#ifdef dobogusinclude

#include <spi4teensy3.h>

#endif

USB Usb;

XBOXUSB Xbox(&Usb);

int lr;

void setup() {

  Serial.begin(115200);

  while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection

  if (Usb.Init() == -1) {

    Serial.print(F("\r\nOSC did not start"));

    while (1); //halt

    lr = 0;

  }

  pinMode(7,OUTPUT);

  pinMode(8,OUTPUT);

  

   

   

}

void loop() {

  Usb.Task();

  if (Xbox.Xbox360Connected) {

  

    if (Xbox.getButtonClick(A))

      Serial.write("A");

    if (Xbox.getButtonClick(B))

     Serial.write("B");

    if (Xbox.getButtonClick(X))

    Serial.write("X");

    if (Xbox.getButtonClick(Y))

     Serial.write("Y");

  }

 vibre();

  }

  

 void vibre()

 {lr = Serial.read();

 Serial.println(lr);

  if(lr == 8)

  { digitalWrite(8,HIGH);

  delay(500);

  digitalWrite(8,LOW);}

    if(lr ==7)

  { digitalWrite(7,HIGH);

  delay(500);

  digitalWrite(7,LOW);}

 }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bryan Ding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值