Robofun 機器人論壇

標題: 請教大家 [打印本頁]

作者: 熙婷    時間: 2018-1-16 19:23
標題: 請教大家
請教一個很小白的問題
剛玩Arduino還在玩LED燈的階段
目前買了LED燈珠來玩霹靂燈玩的還算正常
如下:
void setup() {
  pinMode(12, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(5, OUTPUT);
}

void loop() {
  digitalWrite(12,HIGH);
  delay(100);                     
  digitalWrite(12, LOW);   
  delay(100);
  digitalWrite(11,HIGH);
  delay(100);                     
  digitalWrite(11, LOW);   
  delay(100);   
  digitalWrite(10,HIGH);
  delay(100);                     
  digitalWrite(10, LOW);   
  delay(100);   
  digitalWrite(9,HIGH);
  delay(100);                     
  digitalWrite(9, LOW);   
  delay(100);   
  digitalWrite(8,HIGH);
  delay(100);                     
  digitalWrite(8, LOW);   
  delay(100);   
  digitalWrite(7,HIGH);
  delay(100);                     
  digitalWrite(7, LOW);   
  delay(100);   
  digitalWrite(6,HIGH);
  delay(100);         
  digitalWrite(6, LOW);   
  delay(100);         
  digitalWrite(5,HIGH);
  delay(100);         
  digitalWrite(5, LOW);   
  delay(100);   
  digitalWrite(5,HIGH);
  delay(100);                     
  digitalWrite(5, LOW);   
  delay(100);
  digitalWrite(6,HIGH);
  delay(100);                     
  digitalWrite(6, LOW);   
  delay(100);   
  digitalWrite(7,HIGH);
  delay(100);                     
  digitalWrite(7, LOW);   
  delay(100);   
  digitalWrite(8,HIGH);
  delay(100);                     
  digitalWrite(8,LOW);   
  delay(100);   
  digitalWrite(9,HIGH);
  delay(100);                     
  digitalWrite(9, LOW);   
  delay(100);   
  digitalWrite(10,HIGH);
  delay(100);                     
  digitalWrite(10, LOW);   
  delay(100);   
  digitalWrite(11,HIGH);
  delay(100);         
  digitalWrite(11, LOW);   
  delay(100);         
  digitalWrite(12,HIGH);
  delay(100);         
  digitalWrite(12, LOW);   
  delay(100);
}


同時買了紅外線接收與遙控器
已經下載  IRremote裝載在IDE了
只是用IRrecvDemo能遙控一顆燈
所以我修改成如下:


#include <IRremote.h>

IRrecv irrecv(2);

decode_results results;

void setup()
{
  Serial.begin(9600);
irrecv.enableIRIn();
  Serial.println("Enabled IRin");
  pinMode(12, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(5, OUTPUT);
}

void loop() {
  if (irrecv.decode(&results)) {
    if(results.value==16738455)
    {
      digitalWrite(2,!digitalRead(12,11,10,9,8,7,6,5,))
      }
    irrecv.resume(); // Receive the next value
  }
  delay(100);
}

它卻無法上傳耶
更別玩紅外線遙控霹靂燈


作者: 超新手    時間: 2018-1-16 19:50
為什麼你會寫出
digitalWrite(2,!digitalRead(12,11,10,9,8,7,6,5,))
這樣的程式?
從霹靂灯的程式,看不出有類似的寫法
作者: 熙婷    時間: 2018-1-16 19:52
網路上看紅外線遙控學的阿
只是    人家他只寫一顆LED燈
而我想寫成8顆燈

作者: 超新手    時間: 2018-1-16 20:20
可是從你的範例來看, 要點灯都是用 digitalWrite. 沒用過 digitalRead
作者: 熙婷    時間: 2018-1-16 22:06
本帖最後由 熙婷 於 2018-1-16 22:08 編輯

有喔
就在youtube
https://www.youtube.com/watch?v=5bfJTu5tekY
可是沒教如何插入
結合霹靂燈


影片上只亮一顆LED燈的遙控我完成了
所以想利用遙控來亮霹靂燈
作者: 超新手    時間: 2018-1-17 08:12
https://www.youtube.com/watch?v=5bfJTu5tekY

1. 你應該是定錯格了
真正的程式是在11:07 的 digitalWrite(7, HIGH);
而不是在11:04 的digitalRead

要點灯, 應該是不需要用到 digitalRead

2. 如果要用 digitalWrite 點灯
參數只能有兩個,  digitalWrite(接腳, 狀態);
要點8 個灯, 就呼叫 8 次, 和你最上面貼的程式差不多
digitalWrite(接腳1, HIGH);
digitalWrite(接腳2, HIGH);
digitalWrite(接腳3, HIGH);
digitalWrite(接腳4, HIGH);
digitalWrite(接腳5, HIGH);
digitalWrite(接腳6, HIGH);
digitalWrite(接腳7, HIGH);
digitalWrite(接腳8, HIGH);





作者: 熙婷    時間: 2018-1-17 18:20
可是   超新手  大大
當我照youtube教學那樣打   只要它亮一顆燈   是OK的喔
還可以按一下LED燈亮    再按一下LED滅喔
如下:


#include <IRremote.h>

IRrecv irrecv(2);  由D2  接收紅外線訊號

decode_results results;

void setup()
{
  Serial.begin(9600);
irrecv.enableIRIn();
  Serial.println("Enabled IRin");
  pinMode(12, OUTPUT);         要D12亮燈

}

void loop() {
  if (irrecv.decode(&results)) {
    if(results.value==16738455)
    {
      digitalWrite(12,!digitalRead(12))     youtub上教digitalRead前面加!就能相反變滅燈

      }
    irrecv.resume(); // Receive the next value
  }
  delay(100);
}

事實也是可以單獨亮一顆燈
不過 void setup()  那寫成
  pinMode(12, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(5, OUTPUT);
本來不是應該會一次8顆燈全亮
但是不行耶
還有我好想用遙控紅外線   讓霹靂燈開或關
在此   謝謝   超新手   耐心教導


作者: 超新手    時間: 2018-1-17 19:16
1. 程式寫錯,但結果正常
是因為負負得正的結果
因為接腳 12 剛好是 low
所以 digitalRead(12) 是 low
加上 not , 又變 high
所以 digitWrite(7, !digitalRead(12))
好死不死就等於 digitWrite(7, high) 而已
2.pinMode(接腳, output)
是把該接腳設為輸出模式
並不是點灯(雖然.....)
作者: 超新手    時間: 2018-1-17 19:53
你要把 YouTube 看完。它是寫 digitalWrite,不是 digitRead。你再仔細把影片看一遍就知道了




歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/) Powered by Discuz! X3.2