| 紅外線感測 |
![]() pdf svg |
![]() pdf svg |
| int
val; void setup() { Serial.begin(9600); } void loop() { val=analogRead(A1); Serial.println(val); delay(1000); } //套上小黑套 |
![]() pdf svg |
![]() pdf svg |
| #define
DirR 12 #define DirL 11 #define PwmL 9 #define PwmR 10 #define irin A1 int val; void setup() { pinMode( DirL , OUTPUT); pinMode( DirR , OUTPUT); pinMode( PwmL , OUTPUT); pinMode( PwmR , OUTPUT); digitalWrite(PwmL,LOW); digitalWrite(PwmR,LOW); } void loop() { val=analogRead(irin); if(val>800) { digitalWrite(DirL,HIGH); digitalWrite(DirR,HIGH); digitalWrite(PwmL,HIGH); digitalWrite(PwmR,HIGH); } else { digitalWrite(DirL,LOW); digitalWrite(DirR,LOW); digitalWrite(PwmL,HIGH); digitalWrite(PwmR,HIGH); } } |
![]() |
| 討論: 前進與後退的程式碼 |
| #define
DirR 12 #define DirL 11 #define PwmL 9 #define PwmR 10 #define irin A1 int val; void setup() { pinMode( DirL , OUTPUT); pinMode( DirR , OUTPUT); pinMode( PwmL , OUTPUT); pinMode( PwmR , OUTPUT); digitalWrite(PwmL,LOW); digitalWrite(PwmR,LOW); } void loop() { val=analogRead(irin); if(val>800) { digitalWrite(DirL,HIGH); digitalWrite(DirR,HIGH); digitalWrite(PwmL,HIGH); digitalWrite(PwmR,HIGH); } else if(val<500) { digitalWrite(DirL,LOW); digitalWrite(DirR,LOW); digitalWrite(PwmL,HIGH); digitalWrite(PwmR,HIGH); } else { digitalWrite(PwmL,LOW); digitalWrite(PwmR,LOW); } } |
![]() |
| 沿桌邊走 |
![]() |
![]() 5mm 黑色熱縮套 |
![]() |
![]() |
![]() ![]() ![]() ![]() |
| #define
irin A1 int val; int dval; void setup() { Serial.begin(9600); } void loop() { val=analogRead(irin); dval=digitalRead(irin); Serial.print("val="); Serial.print(val); Serial.print(" dval="); Serial.println(dval); delay(1000); } //套上小黑套 |
| #define
irin A1 #define led 8 int val; int dval; void setup() { Serial.begin(9600); pinMode(led,OUTPUT); } void loop() { val=analogRead(irin); dval=digitalRead(irin); if(dval==HIGH) digitalWrite(led,HIGH); else digitalWrite(led,LOW); Serial.print("val="); Serial.print(val); Serial.print(" dval="); Serial.println(dval); delay(1000); } //套上小黑套 |
| 順
時針 感測器 放左邊 沒收到信號(HIGH) 右轉 收到信號 (LOW) 直走 |
| #define
DirR 12 #define DirL 11 #define PwmL 9 #define PwmR 10 #define irin A1 int val; void setup() { pinMode( DirL , OUTPUT); pinMode( DirR , OUTPUT); pinMode( irin , INPUT); analogWrite(PwmL,0); analogWrite(PwmR,0); digitalWrite(DirL,HIGH); digitalWrite(DirR,HIGH); } void loop() { val=digitalRead(irin); if(val==HIGH) { analogWrite(PwmL,150); analogWrite(PwmR,0); } else {//調整數值 直走或稍微向左偏 analogWrite(PwmL,150); analogWrite(PwmR,150); } } |
| 逆
時針 感測器 放右邊 沒收到信號(HIGH) 左轉 收到信號 (LOW) 直走 |
| #define
DirR 12 #define DirL 11 #define PwmL 9 #define PwmR 10 #define irin A1 int val; void setup() { pinMode( DirL , OUTPUT); pinMode( DirR , OUTPUT); pinMode( irin , INPUT); analogWrite(PwmL,0); analogWrite(PwmR,0); digitalWrite(DirL,HIGH); digitalWrite(DirR,HIGH); } void loop() { val=digitalRead(irin); if(val==HIGH) { analogWrite(PwmL,0); analogWrite(PwmR,150); } else { analogWrite(PwmL,150); analogWrite(PwmR,150); } } |
| 順
時針 感測器 放左邊 沒收到信號(HIGH) 右轉 收到信號 (LOW) 左轉 |
| #define
DirR 12 #define DirL 11 #define PwmL 9 #define PwmR 10 #define irin A1 int val; void setup() { pinMode( DirL , OUTPUT); pinMode( DirR , OUTPUT); pinMode( irin , INPUT); analogWrite(PwmL,0); analogWrite(PwmR,0); digitalWrite(DirL,HIGH); digitalWrite(DirR,HIGH); } void loop() { val=digitalRead(irin); if(val==HIGH) { analogWrite(PwmL,150); analogWrite(PwmR,0); } else { analogWrite(PwmL,0); analogWrite(PwmR,150); } } |
| 逆
時針 感測器 放右邊 沒收到信號(HIGH) 左轉 收到信號 (LOW) 右轉 |
| #define
DirR 12 #define DirL 11 #define PwmL 9 #define PwmR 10 #define irin A1 int val; void setup() { pinMode( DirL , OUTPUT); pinMode( DirR , OUTPUT); pinMode( irin , INPUT); analogWrite(PwmL,0); analogWrite(PwmR,0); digitalWrite(DirL,HIGH); digitalWrite(DirR,HIGH); } void loop() { val=digitalRead(irin); if(val==HIGH) { analogWrite(PwmL,0); analogWrite(PwmR,150); } else { analogWrite(PwmL,150); analogWrite(PwmR,0); } } |
![]() |
| #define
irin A4 int val; int dval; void setup() { pinMode(A2,OUTPUT); pinMode(A3,OUTPUT); digitalWrite(A2,LOW); digitalWrite(A3,HIGH); Serial.begin(9600); } void loop() { val=analogRead(irin); dval=digitalRead(irin); Serial.print("val="); Serial.print(val); Serial.print(" dval="); Serial.println(dval); delay(1000); } |
| 雙功能 D7 -->GND 前後 D7-->Vcc 沿桌邊順時針走 切換模式後 重新上電 |
![]() |
| #define
DirR 12 #define DirL 11 #define PwmL 9 #define PwmR 10 #define irin A4 #define GND A2 #define VCC A3 #define LED 8 #define modePin 7 int val; int mode; void setup() { pinMode( DirL , OUTPUT); pinMode( DirR , OUTPUT); pinMode( GND , OUTPUT); pinMode( VCC , OUTPUT); pinMode( LED , OUTPUT); pinMode( irin , INPUT); pinMode( modePin , INPUT); digitalWrite(GND,LOW); digitalWrite(VCC,HIGH); analogWrite(PwmL,0); analogWrite(PwmR,0); digitalWrite(DirL,HIGH); digitalWrite(DirR,HIGH); mode=digitalRead(modePin); } void loop() { val=digitalRead(irin); if(mode==HIGH){ //D7接Vcc if(val==HIGH) { digitalWrite(LED,HIGH); analogWrite(PwmL,150); analogWrite(PwmR,0); } else {digitalWrite(LED,LOW); analogWrite(PwmL,0); analogWrite(PwmR,150); } } if(mode==LOW){ //D7 接地 前後 analogWrite(PwmL,150); analogWrite(PwmR,150); if(val==HIGH) { digitalWrite(LED,HIGH); digitalWrite(DirL,HIGH); digitalWrite(DirR,HIGH); } else {digitalWrite(LED,LOW); digitalWrite(DirL,LOW); digitalWrite(DirR,LOW); } } } |
| 圍在黑色圈內 |
| 沿黑線走 |
svg |
svg |
| LM393 比較器 (pdf) |
![]() |
![]() pdf svg |
| 遇牆轉彎 |
| #define irin A1 #define DirR 12 #define DirL 11 #define PwmL 9 #define PwmR 10 int val; void setup() { // Serial.begin(9600); pinMode( DirL , OUTPUT); pinMode( DirR , OUTPUT); pinMode( PwmL , OUTPUT); pinMode( PwmR , OUTPUT); digitalWrite(PwmL,0); digitalWrite(PwmR,0); digitalWrite(DirL,1); digitalWrite(DirR,1); } void loop() { val=analogRead(irin); // Serial.println(val); if(val>500) { digitalWrite(DirL,1); digitalWrite(PwmL,1); digitalWrite(PwmR,1); } else { digitalWrite(DirL,0); digitalWrite(PwmL,1); digitalWrite(PwmR,1); delay(700); } } |
| 成功? |
| 消除雜訊 |
| #define irin A1 #define DirR 12 #define DirL 11 #define PwmL 9 #define PwmR 10 int val; void setup() { //Serial.begin(9600); pinMode( DirL , OUTPUT); pinMode( DirR , OUTPUT); pinMode( PwmL , OUTPUT); pinMode( PwmR , OUTPUT); digitalWrite(PwmL,1); digitalWrite(PwmR,1); digitalWrite(DirL,1); digitalWrite(DirR,1); } void loop() { val=analogRead(irin); val=val+analogRead(irin); val=val+analogRead(irin); val=val+analogRead(irin); val=val/4; //Serial.println(val); if(val>500) { digitalWrite(DirL,1); } else { digitalWrite(DirL,0); delay(700); } } |
| //使用for 迴圈 #define irin A1 #define DirR 12 #define DirL 11 #define PwmL 9 #define PwmR 10 #define n 3 int val; void setup() { Serial.begin(9600); pinMode( DirL , OUTPUT); pinMode( DirR , OUTPUT); pinMode( PwmL , OUTPUT); pinMode( PwmR , OUTPUT); digitalWrite(PwmL,1); digitalWrite(PwmR,1); digitalWrite(DirL,1); digitalWrite(DirR,1); } void loop() { val=analogRead(irin); for (int i=0;i<n;i++) {val=val+analogRead(irin);} val=val/(n+1); Serial.println(val); if(val>500) { digitalWrite(DirL,1); } else { digitalWrite(DirL,0); delay(700); } } |
| //使用移動平均法(moving average) #define irin A1 #define DirR 12 #define DirL 11 #define PwmL 9 #define PwmR 10 #define n 5 int ind = 0; int sum = 0; int avg = 0; int val[n]; void setup() { //Serial.begin(9600); pinMode( DirL , OUTPUT); pinMode( DirR , OUTPUT); pinMode( PwmL , OUTPUT); pinMode( PwmR , OUTPUT); digitalWrite(PwmL,1); digitalWrite(PwmR,1); digitalWrite(DirL,1); digitalWrite(DirR,1); delay(1000); for(int i=0;i<n;i++) { val[i]=analogRead(irin); sum=sum+val[i]; } } void loop() { sum=sum-val[ind]; val[ind]=analogRead(irin); sum=sum+val[ind]; ind++; if (ind>=n) ind=0; avg=sum/n; //Serial.println(avg); if(avg>500) { digitalWrite(DirL,1); } else { digitalWrite(DirL,0); delay(700); } } |
| 使用 digitalRead |
| #define irin A1 #define DirR 12 #define DirL 11 #define PwmL 9 #define PwmR 10 #define n 20 int val; void setup() { //Serial.begin(9600); pinMode( DirL , OUTPUT); pinMode( DirR , OUTPUT); pinMode( PwmL , OUTPUT); pinMode( PwmR , OUTPUT); digitalWrite(PwmL,1); digitalWrite(PwmR,1); digitalWrite(DirL,1); digitalWrite(DirR,1); } void loop() { val=digitalRead(irin); for (int i=0;i<n;i++) {val=val+digitalRead(irin);} //Serial.println(val); if(val==0) { digitalWrite(DirL,0); delay(700); } else { digitalWrite(DirL,1); } } |