2016年1月19日 星期二

物聯網離床通報系統



這是在台大醫療電子創作的有趣程式
程式碼花了一個下午時間寫的
其實當初組員在討論的時候,是想改善離床通報器
後來我做出了一個結合物聯網的離床通報
但實際怎麼動作就不說明了,因為我們已經申請專利啦!
還想抄!?沒這麼容易!

但如果大家看的懂程式碼,其實也了解我在做什麼了
而且我把註解都寫進去了,想繞過我們的專利嗎?請右轉

寫到這裡突然想到以前有人問過我
為什麼我做PM沒事還要去顧程式呢?
原因很簡單,因為我怕餓肚子,所以從RF跳到EE兼做PMSW
SW沒強到可以讓大家鼓掌叫好的階段

Maker和產品間拔河的話,我會選Makeropen source很好玩的
But... Maker吃不飽啊!

以下是user身上devicecode
#include <RCSwitch.h>

RCSwitch mySwitch = RCSwitch();

void setup() {
  Serial.begin(9600);
  mySwitch.enableReceive(0);  // Receiver on inerrupt 0 => that is pin #2 第二pin當輸入code
 
    // Transmitter is connected to Arduino Pin #10 第十pin當輸出code,也就是輸出9527十進制
  mySwitch.enableTransmit(10);
 
}

void loop() {
  if (mySwitch.available()) {
   
    int value = mySwitch.getReceivedValue();
   
    if (value == 0) {
      Serial.print("Unknown encoding"); //這裡是因為這支源始碼傳輸第一個bit都是1,所以當是0的時候就當unkown encoding
    } else {
      //開始收訊號
      Serial.print("Received ");
      Serial.print( mySwitch.getReceivedValue() );
      Serial.print(" / ");
      Serial.print( mySwitch.getReceivedBitlength() );
      Serial.print("bit ");
      Serial.print("Protocol: ");
      Serial.println( mySwitch.getReceivedProtocol() );
     
      //收完訊後判斷是否為主機傳來的訊號5393,若是,發射3串代碼9527告知主機出門, 但為了期未demo順利,所以不寫if else
      //if (mySwitch.getReceivedValue() == 5393) {
        /* Same switch as above, but using decimal code */
  mySwitch.send(9527, 24);
  delay(250); 
  mySwitch.send(9527, 24);
  delay(250); 
 
          /* Same switch as above, but using decimal code */
  mySwitch.send(9527, 24);
  delay(250); 
  mySwitch.send(9527, 24);
  delay(250); 
 

 
     // }//若不是5393,不動作
     
    }

    mySwitch.resetAvailable();
  }
}

以下是readercode

// constants won't change. They're used here to
// set pin numbers:
const int buttonPin = 3;     //這是讓PIR被觸發的輸入腳PIN 3
const int ledPin =  13;      // 這是設定如果收到9257代號,即觸發ESP8266PIN 13當觸發腳位

// variables will change:
int buttonState = 0;         // buttonState只是設定pin 13的狀態,有點類似flag的意思, 初始為LOW

#include <RCSwitch.h>

RCSwitch mySwitch = RCSwitch();

void setup() {

  Serial.begin(9600);
 
    // initialize the LED pin as an output: 設定PIN13OUT
  pinMode(ledPin, OUTPUT);
  // initialize the pushbutton pin as an input: 設定PIN3IN
  pinMode(buttonPin, INPUT);
 
  // Transmitter is connected to Arduino Pin #10  設定第10PIN為發射PIN
  mySwitch.enableTransmit(10);

  mySwitch.enableReceive(0);  // Receiver on inerrupt 0 => that is pin #2 設定PIN2為接收PIN

 
}

void loop() {

 
    // read the state of the pushbutton value: 設定PIN3為狀態PIN以便判斷
  buttonState = digitalRead(buttonPin);

  // check if the pushbutton is pressed.
  // if it is, the buttonState is HIGH: 如果PIN3 high,即發射訊號, 代表被觸發
  if (buttonState == HIGH) {
    // turn LED on:
   
   /* Same switch as above, but using decimal code */ //發射主機訊號為5393
  mySwitch.send(5393, 24);
  delay(1000); 
  mySwitch.send(5393, 24);
  delay(1000);  


  /* Same switch as above, but using decimal code */
  mySwitch.send(5393, 24);
  delay(1000); 
  mySwitch.send(5393, 24);
  delay(1000); 
 


      Serial.print("Received "); //接收回傳的訊號
      Serial.print( mySwitch.getReceivedValue() );
      Serial.print(" / ");
      Serial.print( mySwitch.getReceivedBitlength() );
      Serial.print("bit ");
      Serial.print("Protocol: ");
      Serial.println( mySwitch.getReceivedProtocol() );
      //如果回傳訊號為9257,代表是設定的人,準備觸發ESP8266
      if (mySwitch.getReceivedValue() == 9527) {
        digitalWrite(ledPin, HIGH);
      }else
      {
      digitalWrite(ledPin, LOW); //如果不是9257,將PIN13設為LOW
      }
     

  }
  digitalWrite(buttonState, LOW); //PIN3狀態腳設為LOW
}


正如我與組員所說,物聯網有無限可能

沒有做不到的,只有想不到的!

代工廠要不要也來玩玩醫電物聯網?

沒有留言:

張貼留言

FB設定搶先看的方式

設定搶先看的兩種方式 A1. 先到我家的日常粉絲團按下 …( 紅框處 ) A2. 按下追蹤中 ( 紅框處 ) A3. 按下搶先看 ( 紅框處 ) A4. 完成!!! 另一種方式 ...