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);

}

}