02距離控音階
紅外線測距器
http://jackedu.blogspot.tw/2015/06/s2a.html
設定「距離」變數等於下的換算公式,讓它重複執行,即得到距離公分的結果
Sharp 紅外線測距器 (型號:2Y0A21、有效距離為10-80公分)
換算公式 (資料來源:http://acroname.com/articles/linearizing-sharp-ranger-data)
距離 (cm) = [ 6787 / ( 讀取類比腳位(A)3的值 - 3 ) ] - 4
紅外線人體感測
將mblock的程式再轉arduino為程式後
再上LCD顯示器模組,將數值顯示出(紅字部分)
Library 的程式如附件中的LiquidCrystal_I2C,將此資料夾放到libraries資料夾內
這部分搞了很久,也用arduino 1.06就可以!
#include <Arduino.h>
#include <Wire.h>
//#include <Servo.h>
#include <SoftwareSerial.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2); //原本程式寫(0x27,16,2),向Dennis求救後,改為此
double angle_rad = PI/180.0;
double angle_deg = 180.0/PI;
double __var__49_115_100;
double __var__50_114_100;
double __var__51_108_100;
double __var__52_111_100;
double __var__48_116_111_110_101;
float getDistance(int trig,int echo){
pinMode(trig,OUTPUT);
digitalWrite(trig,LOW);
delayMicroseconds(2);
digitalWrite(trig,HIGH);
delayMicroseconds(10);
pinMode(echo, INPUT);
return pulseIn(echo,HIGH,30000)/58.0;
}
void setup(){
pinMode(A0+3,INPUT);
pinMode(A0+1,INPUT);
pinMode(A0+0,INPUT);
pinMode(2,INPUT);
pinMode(5,OUTPUT);
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
lcd.init();
lcd.backlight();
}
void loop(){
__var__49_115_100 = getDistance(8,7);
__var__50_114_100 = ((6787) / ((analogRead(A0+3)) - (3))) - (4);
__var__51_108_100 = (analogRead(A0+1)) / (10);
__var__52_111_100 = (analogRead(A0+0)) / (12.6);
pinMode(6,OUTPUT);
analogWrite(6,__var__51_108_100);
if(((digitalRead(2))==(1))){
digitalWrite(5,1);
}else{
digitalWrite(5,0);
}
if(((__var__49_115_100) < (80)) & ((__var__50_114_100) > (80))){
digitalWrite(10,0);
digitalWrite(11,1);
__var__48_116_111_110_101 = __var__49_115_100;
lcd.clear();
lcd.print("1-Ultrasound ");
lcd.setCursor(1, 1);
lcd.print("Dis: ");
lcd.print(__var__48_116_111_110_101);
lcd.print(" cm ");
delay(100);
}
if(((__var__50_114_100) < (80)) & ((__var__49_115_100) > (80))){
digitalWrite(10,1);
digitalWrite(11,0);
__var__48_116_111_110_101 = __var__50_114_100;
lcd.clear();
lcd.print("2-infrared ");
lcd.setCursor(1, 1);
lcd.print("Dis: ");
lcd.print(__var__48_116_111_110_101);
lcd.print(" cm ");
delay(100);
}
if(((__var__49_115_100) > (80)) & ((__var__50_114_100) > (80))){
digitalWrite(10,0);
digitalWrite(11,0);
if((analogRead(A0+0)) < (25)){
__var__48_116_111_110_101 = __var__51_108_100;
__var__51_108_100= __var__51_108_100*10;
lcd.clear();
lcd.print("3-Photoresistance ");
lcd.setCursor(1, 1);
lcd.print("Value: ");
lcd.print(__var__51_108_100);
//lcd.print(" cm ");
delay(100);
}else{
__var__48_116_111_110_101 = __var__52_111_100;
__var__52_111_100 = __var__52_111_100*12.6;
lcd.clear();
lcd.print("4-Variable Resistor ");
lcd.setCursor(1, 1);
lcd.print("Value: ");
lcd.print(__var__52_111_100);
//lcd.print(" cm ");
delay(100);
}
}
if((__var__48_116_111_110_101) < (2)){
}
if(((__var__48_116_111_110_101) < (10)) & ((__var__48_116_111_110_101) > (2))){
pinMode(4,OUTPUT);
tone(4,262,500);
delay(500);
}
if(((__var__48_116_111_110_101) < (20)) & ((__var__48_116_111_110_101) > (10))){
pinMode(4,OUTPUT);
tone(4,294,500);
delay(500);
}
if(((__var__48_116_111_110_101) < (30)) & ((__var__48_116_111_110_101) > (20))){
pinMode(4,OUTPUT);
tone(4,330,500);
delay(500);
}
if(((__var__48_116_111_110_101) < (40)) & ((__var__48_116_111_110_101) > (30))){
pinMode(4,OUTPUT);
tone(4,349,500);
delay(500);
}
if(((__var__48_116_111_110_101) < (50)) & ((__var__48_116_111_110_101) > (40))){
pinMode(4,OUTPUT);
tone(4,392,500);
delay(500);
}
if(((__var__48_116_111_110_101) < (60)) & ((__var__48_116_111_110_101) > (50))){
pinMode(4,OUTPUT);
tone(4,440,500);
delay(500);
}
if(((__var__48_116_111_110_101) < (70)) & ((__var__48_116_111_110_101) > (60))){
pinMode(4,OUTPUT);
tone(4,494,500);
delay(500);
}
if(((__var__48_116_111_110_101) < (80)) & ((__var__48_116_111_110_101) > (70))){
pinMode(4,OUTPUT);
tone(4,523,500);
delay(500);
}
}