2015年1月31日 星期六

Arduino-Arduino 基本概念與認知



















0 - 13 腳 : 數位輸入/輸出
數位腳位有標示PWM( ~ ) : 具有模擬類比信號輸出功能
A0-A5 ( 14-19 ) 腳 : 類比輸入腳( 無法類比訊號輸出 )
IOREF : 供應擴充版的電壓腳位

Arduino nano :
PWM : 3、5、6、9、10、11
有些必須先安裝USB驅動,不然是無法被認知的
位置 : usb-serial-ch340

  • Driver Version: 3.3.2011.11
  • Release Date: 2011-11-04
  • File Size: 41.02K
  • Supported OS: Windows XP 64bit, Windows Vista 64bit, Windows 7 64bit, Windows 8 64bit


電阻 : 用來阻礙電流的流動,避免元件直接被電流破壞。
電容 : 用來儲存電的容器,像是蓄水池般的穩定輸出,不會因為輸入不穩造成影響。
二極體 : 只准許電流單一流過

//參數設定
void setup()
{
  //腳位設定
}
//迴圈
void loop()
{
  //會不斷的執行主程式敘述
}


常用參數宣告方法

1 . 宣告腳位用途
pinMode( 腳位 , 動作 );
setup內設定
腳位 : 1-13 or A0-A5
動作
OUTPUT : 控制腳位
INPUT  : 接收感測器

2 . 設定腳位動作
digitalWrite(腳位,動作);
loop內設定
腳位 : 1-13 or A0-A5
動作
HIGH : 高電位
LOW  : 低電位

3 . 延遲
delay((單位 : 毫秒));
setup 、 loop 都可設定
delay(1000);//延遲一秒鐘
delay(60000);//延遲一分鐘

4 . 判斷腳位電壓強度
boolean var = digitalRead( 腳位 );
loop內設定
腳位 : 1-13 or A0-A5
var : 以2.5V為基準。以上則為高電壓;以下為低電壓。

5 . 讀取腳位參數
int sensorValue = analogRead(腳位);
loop內設定
腳位 :  A0-A5

6 . 設定腳位輸出電壓
analogWrite( 腳位, 範圍 );
腳位 : 必須是PWM( ~ ) 3、5、6、9、10、11
範圍 : 0 ~ 255 ( 0V ~ 5V )


本文章內容參考 : 超圖解 Arduino 互動設計入門 2
歡迎轉載,請註明出處。


2015年1月29日 星期四

Arduino-Arduino 藍芽模組

藍芽連線

目前有遇到的狀況 :
藍芽模組瑕疵( 無法接收,但能發送 )
藍芽模組和紅外線模組共用直流電來源,紅外線感測會有問題

先簡單PO接圖
接線圖


















藍芽模組 對 板子
VCC -> 5V( 注意 : 因為每個模組不支援到5V,若不確定請接到3.3V )
GND -> GND
TXD -> RX
RXD -> TX

基本上這樣就完成了
之後可能是Application 連結 或 模組的問題居多

Arduino.ino 程式碼 :
char val; 
void setup()
{
  Serial.begin(9600);
}

void loop()
{
  //接收端
  if( Serial.available() ) // if data is available to read 
  { 
   val = Serial.read();
   Serial.println(val);
  } 
  
  //發射端
  Serial.write('a');
  
  delay(1000);
}

#include<SoftwareSerial.h>
SoftwareSerial BT(10, 9);

const byte ledPin = 13;
char val;

void setup(){
  pinMode(ledPin,OUTPUT);
  BT.begin(9600);
  BT.println("BT is ready");
}
void loop(){
  if(BT.available()){
    val = BT.read();
    Serial.println(val);
  }
}


歡迎轉載,請註明出處。

2015年1月27日 星期二

Arduino-紅外線 接收 Example

這幾天剛好有這機會要測試有關紅外線的應用
話不多說,馬上開始吧 !
本人是使用Arduino UNO版本,若其他大大用不同的版本記得做修改的動作

首先去下載 Lib : 點這裡

並且更改下載後的檔案名稱

 將IRromote放置在














並將以下程式碼進編譯執行

#include <IRremote.h>
#include <IRremoteInt.h>


int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
}

void loop()
{
  if (irrecv.decode(&results))
    {
     Serial.println(results.value, HEX); //results.value 為十進位數字

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

如果是第一次編譯、執行,一定會發生以下的錯誤訊息
error: TKD2 was not declared in this scope
直接說白了,剛剛下載的Lib內有跟官方提供的Lib有衝突
目前看到最好的方法就是直接把官方提供的直接刪除
Arduino/libraries/RobotIRremote/src/IRremoteTools.h
Arduino/libraries/RobotIRremote/src/IRremoteTools.cpp
注意 : 盡量不要用搜尋的方式,要直接去檔案夾內一步一步尋找



2015年1月13日 星期二

Android-BroadcastReceiver 廣播 / 接收 example

更新 : 20150827 針對重點改變字色

我想剛開始一定學習廣播一定會有人很頭痛,到底它的用途是什麼?
其實可以想像一下 : 
1 . 整個手機是一個校園
2 . 學校有事情或請學生到指定地點集合,一定用廣播,不太可能慢慢走到位置
3 . 要能聽到廣播一定要在教室安裝喇叭才聽的到
4 . 不可能一聽到廣播就一定是呼X班全部學生,一定是1年1班1號王大頭
5 . 這時候王大頭才會到指定的地方

注意 : 廣播不會單一位置廣播,他是全範圍廣播

我們先一步一步慢慢來
首先,試試看怎麼廣播

*單純只有廣播
紅色文字部分代表學生的學號以及姓名
下面要傳送的字串代表要請他做的事情或想說的事情

--------------------------------------------------------------------
廣播發送
Intent intent = new Intent();
intent.setAction("com.example.broadcasereciver.Hello");
intent.putExtra("HELLO", "How are you.");
sendBroadcast(intent);

*在說廣播之前一定要先說!!!
其實您的手機內是非常非常吵雜的,因為手機一直在做廣播的動作
您螢幕開啟了!
您螢幕關閉了!
您手機快沒電!
您正在充電中!
.
.
.
非常多的廣播!!!!
為啥沒感覺?當然了,他不是呼叫王大明,那您何必理廣播你的人。
所以你只要在你APP內註冊一個叫王大明的人
只要一有王大明廣播就要開始忙東忙西囉!!!

--------------------------------------------------------------------
在手機註冊廣播接收有 2 種方法( 二選一 )  :

1 . 直接在Activity 或 Service註冊
//註冊王大明的ID
IntentFilter ifilter = new IntentFilter();
ifilter.addAction("my_name_is_wang");
ReceiverDetect receiverDetect = new ReceiverDetect();
registerReceiver(receiverDetect, ifilter);

但是記得要有註銷的動作
unregisterReceiver(receiverDetect);

2 . 在 AndroidManifest.xml 下
注意 : 在這裡註冊手機行為無法廣播接收
ex : <action android:name="android.intent.action.SCREEN_OFF" />
<receiver android:name="ReceiverDetect" >
    <intent-filter>
          <action android:name="my_name_is_wang" />
    </intent-filter>
</receiver>

-----------------------------------------
所以請王大明到這間教室( ReceiverDetect ),有人找他
必須有一個繼承 BroadcastReceiver 來做處理
ReceiverDetect.java
public class ReceiverDetect extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        Log.d("tag", "action:" + action);
    }
}

以下為Sample ( 此範例為第二種方法 ):
MainActivity.java

package com.example.broadcasereciver;

import android.app.Activity;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity implements OnClickListener {

    private Button sendMessage;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        sendMessage = (Button) findViewById(R.id.btnSendBroadcast);
        sendMessage.setOnClickListener(this);
        
    }

    @Override
    public void onClick(View v) {
        Intent intent = new Intent();
        intent.setAction("i_am_hungry");
        intent.putExtra("HELLO", "hello you");
        sendBroadcast(intent);

    }
}

ReceiverDetect.java

package com.example.broadcasereciver;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;

public class ReceiverDetect extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        
        String strAction = intent.getAction();
        Log.d("tag", "action:" + strAction);
        
        Bundle bundle0311 = intent.getExtras();
        if(bundle0311!= null){
            String aaa = bundle0311.getString("HELLO");
            Log.d("tag","aaa : "+aaa);
        }
    }
}




AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.broadcasereciver"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="21" />

    <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <receiver android:name="ReceiverDetect" >
            <intent-filter>
                <action android:name="i_am_hungry" />
            </intent-filter>
        </receiver>
    </application>

</manifest>




歡迎轉載,請註明出處。


2015年1月11日 星期日

JavaScript-Array 陣列 的定義 方法

陣列定義方法 :

var array= new Array();
var array =new Array(n);
var array = [<元素1>, <元素2>, <元素3>...];

方法 說明
array.length(); 內容部份4
array.concat(array1); 連接多個陣列
array.join("-"); 連接陣列之間指定參數進行分隔
array.pop(); 刪除所有內容
array.push(); 內容部份2
array.reverse(); 內容部份2
array.shift(); 內容部份2
array.slice(); 內容部份2
array.sort(); 內容部份2
array.splice(); 內容部份2
array.toLocaleString(); 內容部份2
array.unshift(); 內容部份2
array.valueOf();  內容部份2
內容部份1 內容部份2


























1 . array.concat();
var myarr1= new Array("010")
var myarr2= new Array("-","84697581");
document.write(myarr1.concat(myarr2));

  010,-,84697581

2 .
var myarr1= new Array("86","010")
var myarr2= new Array("84697581");
var myarr3= myarr1.concat(myarr2);
document.write(myarr3.join());

86,010,84697581

document.write(myarr3.join("-"));

86-010-84697581

3 . pop
var myarr1= new Array("86","010");
document.write(myarr1.pop());

010

4 . push();
var myarr1= new Array("86","010");
document.write(myarr1.push("555"));
//3
document.write(myarr1);
//86,010,555

5 . reverse();
var myarr1= new Array("86","010");
document.write(myarr1.reverse());

010,86

6 . shift();

var myarr1= new Array("86","010")
document.write(myarr1.shift());

86

2015年1月10日 星期六

JavaScript-字串處理

如果是字串型別,請務必在參數加入雙引號
var str = "我的外框是雙引號" ;

方法 用途
str.length; 字串長度
str.toUpperCase(); 內容改為大寫
str.toLowerCase(); 內容改為小寫
str.charAt(2) 取得某位置內的字元
str.indexOf("a"); 取得某字元上的位置
str.indexOf("a",7); 取得某位置後的某至字元位置
str.split(""); 字元分割( 每個 )
str.split("-"); 字元分割( 參數 )
str.split("-",3); 字元分割,取相對組數
str.substring(5); 取得某位置後所有的參數
str.substring(5,10); 取得某位置之後相對的所有參數
str.substr(5,3); 取得某位置到某位置之間參數


























JavaScript-日期 / 時間

注意 : 不同的瀏覽器有不同的時間格式
定義時間對象,Date必須大寫
var date = new Date( );
vat date_0 = new Date(2012, 10, 1);

方法名稱 功能
get/setDate() 取得/設置日期
get/setFullYear() 取得/設置( 西元 )
get/setYear() 取得/設置( 民國 )
get/setMonth() 取得/設置
1~12
get/setDay() 取得/設置
get/setHours() 取得/設置
0~24
get/setMinutes() 取得/設置
1~60
get/setSeconds() 取得/設置
1~60
set/getTime() 取得/設置
Sat Jan 10 2015 17:04:55 GMT+0800 (台北標準時間)






















星期處理 :
var weekday=["星期日","星期一","星期二","星期三","星期四","星期五","星期六"];

延遲時間2小時 :
 mydate.setTime( mydate.getTime()  + 2* 60 * 60 * 1000);


JavaScript-基本事件


事件 內容部份2
onclick 滑鼠點擊
onmouseover 滑鼠經過範圍
onmouseout 滑鼠移開範圍
onchange 內容被更變
onselect 內容被框選
onfocus 光標聚集 ( 輸入帳號密碼文字框提醒 )
onblur 光標離開
onload 載入網頁
onnuload 關閉網頁


















以下是修改事件監聽名稱 :

<form>
    <input name="hello" type="button" value="hello" onclick="openwin()"/>
</form>

2015年1月7日 星期三

Android-Google Maps Android API v2 基本 地圖 開發 ( 一 )



1 . 匯入google-play-services_lib














2 . 檢查是否為Lib














3 . 開啟使用開發憑證 : Google Developers Console














4 . 先尋找自己Eclipse裡面的資訊














5 . 建立新的鑰匙 -> 點選Android鑰匙( 創立出來會有一組API金鑰 )




























6 . 確認自己的專案匯入google-play-services_lib














7 . AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.googlemap"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="11"
        android:targetSdkVersion="21" />

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />

    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" />

    <!--
     The following two permissions are not required to use
     Google Maps Android API v2, but are recommended.
    -->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="改為自己申請的API金鑰" />
        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />
    </application>

</manifest>

8 . activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
          android:id="@+id/map"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:name="com.google.android.gms.maps.MapFragment"/>

9 . MainActivity.java

package com.example.googlemap;

import android.app.Activity;
import android.os.Bundle;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }
}


10 . 成品

























參考資訊 :
遊戲科學
google developers
參考資料 : [Android] 取得目前位置顯示在Google Map上

歡迎轉載,請註明出處。