單擺測週期頻率

單擺教具1.0

#include <LiquidCrystal.h>

LiquidCrystal lcd(13, 12, 11, 10, 9, 8);

int limit ;

int sensor = A0;

float g ;

int x ;

long t1 ;

long t2 ;

long y ;

int i= -1 ;

double frequency ;

void setup(){

Serial.begin(9600);

lcd.begin(16,2);

y=0 ;

for(int r=0 ; r<10 ; r++){

y = y + analogRead(sensor) ;

}

limit = y / 10 -50;

while(1){

do{

x = analogRead(sensor);

}while( x>= limit);

t1 = millis();

i++;

float T = (t1 - t2)/1000.000 ;

frequency = 1 /float(T) ;

lcd.clear();

lcd.setCursor(0, 0);

lcd.print("T=");

lcd.setCursor(2, 0);

lcd.print(T,3);

lcd.setCursor(13, 0);

lcd.print("sec");

lcd.setCursor(0, 1);

lcd.print("f=");

lcd.setCursor(2, 1);

lcd.print(frequency,3);

lcd.setCursor(7, 1);

lcd.print("Hz");

lcd.setCursor(10, 1);

lcd.print("i=");

lcd.setCursor(12, 1);

lcd.print(i);

Serial.print("i = ") ;

Serial.print(i) ;

Serial.print(" ") ;

Serial.print("T = ") ;

Serial.print(T) ;

Serial.print(" ") ;

Serial.print("sec") ;

Serial.print(" ") ;

Serial.print("frequency = ") ;

Serial.print(frequency,3) ;

Serial.println("Hz ") ;

do{

x = analogRead(sensor);

}while( x <= limit );

do{

x = analogRead(sensor);

}while(x >= limit) ;

do{

x = analogRead(sensor);

}while( x <= limit );

do{

x = analogRead(sensor);

}while(x >= limit) ;

t2 = millis();

i++;

T = (t2 - t1)/1000.000 ;

frequency = 1 /float(T) ;

lcd.clear();

lcd.setCursor(0, 0);

lcd.print("T=");

lcd.setCursor(2, 0);

lcd.print(T,3);

lcd.setCursor(13, 0);

lcd.print("sec");

lcd.setCursor(0, 1);

lcd.print("f=");

lcd.setCursor(2, 1);

lcd.print(frequency,3);

lcd.setCursor(7, 1);

lcd.print("Hz");

lcd.setCursor(10, 1);

lcd.print("i=");

lcd.setCursor(12, 1);

lcd.print(i);

Serial.print("i = ") ;

Serial.print(i) ;

Serial.print(" ") ;

Serial.print("T = ") ;

Serial.print(T) ;

Serial.print(" ") ;

Serial.print("sec ") ;

Serial.print("frequency = ") ;

Serial.print(frequency,3) ;

Serial.println("Hz ") ;

do{

x = analogRead(sensor);

}while( x<= limit );

do{

x = analogRead(sensor);

}while( x >= limit );

do{

x = analogRead(sensor);

}while( x<= limit );

}

}

void loop(){}

單擺教具1.1

#include <Wire.h>

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3F,16,2);

int limit ;

int sensor = A0;

float g,T ;

int x ;

long t1 ;

long t2 ;

long y ;

int i= -1 ;

double frequency ;

void lcd_disp(){

lcd.clear();

lcd.setCursor(0, 0);

lcd.print("T=");

lcd.setCursor(2, 0);

lcd.print(T,3);

lcd.setCursor(13, 0);

lcd.print("sec");

lcd.setCursor(0, 1);

lcd.print("f=");

lcd.setCursor(2, 1);

lcd.print(frequency,3);

lcd.setCursor(7, 1);

lcd.print("Hz");

lcd.setCursor(10, 1);

lcd.print("i=");

lcd.setCursor(12, 1);

lcd.print(i);

Serial.print("i = ") ;

Serial.print(i) ;

Serial.print(" ") ;

Serial.print("T = ") ;

Serial.print(T) ;

Serial.print(" ") ;

Serial.print("sec") ;

Serial.print(" ") ;

Serial.print("frequency = ") ;

Serial.print(frequency,3) ;

Serial.println("Hz ") ;

}

void setup(){

Serial.begin(9600);

lcd.init();

lcd.backlight();

lcd.clear();

y=0 ;

for(int r=0 ; r<10 ; r++){

y = y + analogRead(sensor) ;

}

limit = y / 10 -50;

while(1){

do{

x = analogRead(sensor);

}while( x>= limit);

t1 = millis();

i++;

T = (t1 - t2)/1000.000 ;

frequency = 1 /T ;

lcd_disp();

do{

x = analogRead(sensor);

}while( x <= limit );

do{

x = analogRead(sensor);

}while(x >= limit) ;

do{

x = analogRead(sensor);

}while( x <= limit );

do{

x = analogRead(sensor);

}while(x >= limit) ;

t2 = millis();

i++;

T = (t2 - t1)/1000.000 ;

frequency = 1 /float(T) ;

lcd_disp();

do{

x = analogRead(sensor);

}while( x<= limit );

do{

x = analogRead(sensor);

}while( x >= limit );

do{

x = analogRead(sensor);

}while( x<= limit );

}

}

void loop(){}

單擺教具2.0

#include <Wire.h>

#include <LiquidCrystal_I2C.h>

#include <SoftwareSerial.h>

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

LiquidCrystal_I2C lcd(0x3F,16,2); // 若LCD 無法啟用,請將0X3F 改為0X27

int limit,x ;

int sensor = A0;

float g,T,frequency ;

byte cmd;

float a,b,c,d,e; //此代表待傳送的五個變數

byte Data[10];

unsigned long t1,t2,y,a0,a1,a2,b0,b1,b2,c0,c1,c2;

int i= -1 ;

void setup(){

Serial.begin(9600);

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

lcd.init();

lcd.backlight();

lcd.clear();

y=0 ;

for(int r=0 ; r<10 ; r++){

y = y + analogRead(sensor) ;

}

limit = y / 10 + 50;

}

void loop(){

compute();

}

void compute(){

do{

x = analogRead(sensor);

}while( x>= limit);

t1 = millis();

i++;

T = (t1 - t2)/1000.000 ;

frequency = 1 /float(T) ;

show();

bt();

do{

x = analogRead(sensor);

}while( x <= limit );

do{

x = analogRead(sensor);

}while(x >= limit) ;

do{

x = analogRead(sensor);

}while( x <= limit );

do{

x = analogRead(sensor);

}while(x >= limit) ;

t2 = millis();

i++;

T = (t2 - t1)/1000.000 ;

frequency = 1 /float(T) ;

show();

bt();

do{

x = analogRead(sensor);

}while( x<= limit );

do{

x = analogRead(sensor);

}while( x >= limit );

do{

x = analogRead(sensor);

}while( x<= limit );

}

void show(){

lcd.clear();

lcd.setCursor(0, 0);

lcd.print("T=");

lcd.setCursor(2, 0);

lcd.print(T,3);

lcd.setCursor(13, 0);

lcd.print("sec");

lcd.setCursor(0, 1);

lcd.print("f=");

lcd.setCursor(2, 1);

lcd.print(frequency,3);

lcd.setCursor(7, 1);

lcd.print("Hz");

lcd.setCursor(10, 1);

lcd.print("i=");

lcd.setCursor(12, 1);

lcd.print(i);

Serial.print("i = ") ;

Serial.print(i) ;

Serial.print(" ") ;

Serial.print("T = ") ;

Serial.print(T) ;

Serial.print(" ") ;

Serial.print("sec") ;

Serial.print(" ") ;

Serial.print("frequency = ") ;

Serial.print(frequency,3) ;

Serial.println("Hz ") ;

}

void bt(){

a=T;

b=frequency;

c=i;

a1 = int(a) / 1 ; //a1表整數部分

a2 = long(a*1000)%1000;

b1 = int(b) / 1 ; //b1表整數部分

b2 = long(b*1000)%1000; //b2表浮點數部分

c1 =i; //c1表整數部分

cmd = BT.read();

Data[0]='a';

Data[1]=a1/256;

Data[2]=a1%256;

Data[3]=a2/256;

Data[4]=a2%256;

Data[5]='c';

Data[6]=c1/256;

Data[7]=c1%256;

if (cmd == 49){

for(int j=0;j<8;j++){

BT.write(Data[j]);

}

cmd=0;

}

}