單擺測週期頻率
單擺教具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;
}
}