void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
}
// the loop routine runs over and over again forever:
void loop() {
// read the input on analog pin 0:
int sensorValue = analogRead(A0);
// print out the value you read:
Serial.println(sensorValue);
delay(1); // delay in between reads for stability
}
*Red color Part: cab be modified depend on the experimental parameters
*Purple color part: pendulum length
//include
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
//define
#define pinget A0
//螢幕設定,定義顯示高度跟寬度
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
//parameter
const int buttonPin = 7;
int count = 0;
int minimum = 30;
float Start_time = 0;
float end_time = 0;
float gramme = 10.00;
float L = 25.25;
//void setup
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(pinget, INPUT);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3D (for the 128x64)
// init done
pinMode(buttonPin, INPUT);
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(20,25);
display.println("NDHU PHY");
display.setCursor(0,10);
display.display();
delay(2000);
display.clearDisplay();
display.setCursor(35,25);
display.println("Start");
display.display();
display.clearDisplay();
}
//void loop
void loop() {
// put your main code here, to run repeatedly:
if(digitalRead(buttonPin) == 1){
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(35,25);
display.println("Reset");
display.display();
display.clearDisplay();
count = 0;
delay(2000);
}
if(analogRead(pinget) > minimum+100 && count == 0){
Start_time = millis();
count++;
while(analogRead(pinget) > minimum+50){
continue;
}
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Times: ");
display.println(count);
display.display();
display.clearDisplay();
//Serial.println(count);
}
else if(analogRead(pinget) > minimum+100 && count>=1 && count < 20){
count++;
while(analogRead(pinget) > minimum+100){
continue;
}
end_time = millis();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Times: ");
display.println(count);
display.display();
display.clearDisplay();
}
while(count == 20){
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.print("length:");
display.print(L/1000, 5);
display.println(" m");
display.println();
display.print("Period:");
display.print((end_time-Start_time)/1000/10, 5);
display.println(" t");
display.println();
display.print("4pi^2L:");
display.println(((L/1000)*PI*PI*4), 5);
display.print("T^2:");
display.println(sq((end_time-Start_time)/1000/10), 5);
//display.print("g:");
//display.print(((L/1000)*PI*PI*4)/sq((end_time-Start_time)/1000/10), 5);
//display.println("m/s^2");
display.display();
//delay(4000);
display.clearDisplay();
if(digitalRead(buttonPin) == 1){
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(35,25);
display.println("Start");
display.display();
display.clearDisplay();
delay(500);
Start_time = 0;
end_time = 0;
count = 0;
break;
}
}
}