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);}
}