滑車實驗教具(一)

先丟程式碼,細節稍後補上

#include <Wire.h>

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3F,16,2);

int x,y,z;

unsigned long t1,t2,t3;

float dt1,dt2,v1,v2,a,dt;

void setup() {

lcd.init();

lcd.backlight();

lcd.clear();

lcd.setCursor(0,0);

lcd.print("Ready...");

}

void loop() {

do{

x=analogRead(A0);

}while(x<150);

t1 = micros();

do{

y=analogRead(A1);

}while(y<150);

t2 = micros();

do{

z=analogRead(A2);

}while(z<150);

t3 = micros();

dt1=t2-t1;

dt2=t3-t2;

v1 = 60000/dt1;

v2 = 60000/dt2;

dt = 0.5*(t3-t1);

a = 1000000*(v2-v1)/dt;

lcd.clear();

lcd.setCursor(0,0);

lcd.print("v1=");

lcd.print(v1);

lcd.setCursor(8,0);

lcd.print("v2=");

lcd.print(v2);

lcd.setCursor(0,1);

lcd.print("a=");

lcd.print(a,5);

lcd.print("m/s^2");

}

================================================================

#include <Wire.h>

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3F,20,4);

int x,y,z;

int i=0;

unsigned long t1,t2,t3;

float dt1,dt2,v1,v2,a,dt;

void setup() {

lcd.init();

lcd.backlight();

lcd.clear();

lcd.setCursor(0,3);

lcd.print("Ready...");

}

void loop() {

i=i+1;

do{

x=analogRead(A0);

}while(x<150);

t1 = micros();

lcd.setCursor(0,3);

lcd.print("up ");

do{

y=analogRead(A1);

}while(y<150);

t2 = micros();

lcd.setCursor(0,3);

lcd.print("center");

do{

z=analogRead(A2);

}while(z<150);

t3 = micros();

dt1=t2-t1;

dt2=t3-t2;

v1 = 55000/dt1;

v2 = 55000/dt2;

dt = 0.5*(t3-t1);

a = 1000000*(v2-v1)/dt;

lcd.clear();

lcd.setCursor(0,0);

lcd.print("v1=");

lcd.print(v1,5);

lcd.print("cm/s");

lcd.setCursor(0,1);

lcd.print("v2=");

lcd.print(v2,5);

lcd.print("cm/s");

lcd.setCursor(0,2);

lcd.print("a=");

lcd.print(a,5);

lcd.print("m/s^2");

lcd.setCursor(0,3);

lcd.print("Ready...");

lcd.setCursor(15,3);

lcd.print("i=");

lcd.print(i);

}

================================================================

#include <SoftwareSerial.h>

#include <Wire.h>

#include <LiquidCrystal_I2C.h>

SoftwareSerial BT(2,3); // RX, TX

LiquidCrystal_I2C lcd(0x3F,20,4);

int x,y,z;

unsigned long a0,a1,a2;

int i=0;

byte cmd;

unsigned long t1,t2,t3;

float dt1,dt2,v1,v2,a,dt;

void setup() {

Serial.begin(9600);

BT.begin(38400);//bluetooth baud rate

lcd.init();

lcd.backlight();

lcd.clear();

lcd.setCursor(0,3);

lcd.print("Ready...");

}

void loop() {

compute();

LCD();

bt();

}

void compute(){

i=i+1;

do{

x=analogRead(A0);

}while(x<150);

t1 = micros();

lcd.setCursor(0,3);

lcd.print("up ");

do{

y=analogRead(A1);

}while(y<150);

t2 = micros();

lcd.setCursor(0,3);

lcd.print("center");

do{

z=analogRead(A2);

}while(z<150);

t3 = micros();

dt1=t2-t1;

dt2=t3-t2;

v1 = 55000/dt1;

v2 = 55000/dt2;

dt = 0.5*(t3-t1);

a = 1000000*(v2-v1)/dt;

}

void LCD(){

lcd.clear();

lcd.setCursor(0,0);

lcd.print("v1=");

lcd.print(v1,5);

lcd.print("cm/s");

lcd.setCursor(0,1);

lcd.print("v2=");

lcd.print(v2,5);

lcd.print("cm/s");

lcd.setCursor(0,2);

lcd.print("a=");

lcd.print(a,5);

lcd.print("m/s^2");

lcd.setCursor(0,3);

lcd.print("Ready...");

lcd.setCursor(15,3);

lcd.print("i=");

lcd.print(i);

}

void bt(){

byte Data[18];

byte cmmd[20];

int insize;

if(a>=0){

a0 = 1 ;

a1 = int(a) / 1 ;

a2 = long(a*100000)%100000;

}

if(a<0){

a0 = 2 ;

a1 = int(-1 * a) / 1 ;

a2 = long(-1*a*100000)%100000;

}

cmd = BT.read();

Data[0]='a';

Data[1]=i/256;

Data[2]=i%256;

Data[3]='b';

Data[4]=a0 ;

Data[5]=a1/256;

Data[6]=a1%256;

Data[7]='c';

Data[8]=a2/65536;

Data[9]=a2%65536/256;

Data[10]=a2%256;

if (cmd == 49){

for(int j=0;j<18;j++)

BT.write(Data[j]);

cmd=0;

}

}