滑車實驗教具(一)
先丟程式碼,細節稍後補上
#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;
}
}