2016年2月24日 星期三
2016年2月9日 星期二
[分享] 龘 字
今天在FB看到有人說打出這個字" 龘 " ,他要包紅包,便去查了一下這個字。
念法為ㄉㄚˊ ,蒼頡拼法為 YPYBP (卜心卜月心)。
龘
參考資料:
http://zidian.kxue.com/zi/da64_shurufa.html
念法為ㄉㄚˊ ,蒼頡拼法為 YPYBP (卜心卜月心)。
龘
參考資料:
http://zidian.kxue.com/zi/da64_shurufa.html
[EPS8266] EPS8266 購買注意事項
EPS8266 這塊WiFi Module很紅,我也買了一塊來玩,在爬文更新Firmware時,
發現其實它目前有2種版本,一種是舊款的容量為512K,
新版本的容量為512+512 ( 1M),能用的Firmware也不同。
網路上說最簡單的分別方法是看PCB的顏色,藍色為舊本,黑色為新版,
這個目前還不確定,最保險的分法是看IC上面的編號。
25Q80 開頭是 1M 25Q40 是 512K
或是使用AT+RST 這個Command
參考來源:
http://bbs.ai-thinker.com/forum.php?mod=viewthread&tid=1295&extra=page%3D1
發現其實它目前有2種版本,一種是舊款的容量為512K,
新版本的容量為512+512 ( 1M),能用的Firmware也不同。
網路上說最簡單的分別方法是看PCB的顏色,藍色為舊本,黑色為新版,
這個目前還不確定,最保險的分法是看IC上面的編號。
25Q80 開頭是 1M 25Q40 是 512K
或是使用AT+RST 這個Command
參考來源:
http://bbs.ai-thinker.com/forum.php?mod=viewthread&tid=1295&extra=page%3D1
2016年2月8日 星期一
[Android] 自定Disable背景
利用XML來自定元件被Disable時的模樣,省去用程式碼換圖。
以下是一個背景的XML ,重點在android:state_enabled="false" ,
注意只能指定android:drawable ,不能用android:color 會Crash,
但可以自己用一個shap 自己刻一個喜歡的顏色再拿來用
未按下的狀態
按下時
參考來源:
http://stackoverflow.com/questions/11499574/toggle-button-using-two-image-on-different-state
以下是一個背景的XML ,重點在android:state_enabled="false" ,
注意只能指定android:drawable ,不能用android:color 會Crash,
但可以自己用一個shap 自己刻一個喜歡的顏色再拿來用
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="false" android:drawable="@drawable/btn_red" /> <item android:state_pressed="true" android:state_enabled="true" android:drawable="@drawable/btn_orange" /> <item android:state_focused="true" android:state_enabled="true" android:drawable="@drawable/btn_orange" /> <item android:state_enabled="true" android:drawable="@drawable/btn_black" /> </selector>
未按下的狀態
按下時
enable="false"
參考來源:
http://stackoverflow.com/questions/11499574/toggle-button-using-two-image-on-different-state
[Android] NameSpace 'app' is not found
在最外層的layout加上
xmlns:app="http://schemas.android.com/apk/res-auto"
2016年2月7日 星期日
[java] 繞著圓心走的同心圓座標
之前有寫一篇,怎樣算出一個繞著一點走的圓,
接下來我用程式來實現,程式在座標的計算上與數學常用的座標不太一樣。
我先用swing做個示範,每隔10度畫出角度在座標上
你會發現跟我們習慣的角度好像方向不同,我們做個轉換
接下來我用程式來實現,程式在座標的計算上與數學常用的座標不太一樣。
//半徑 int r = 150; //座標的矩陣 slidepoint = new int[360][2]; //圓心位址 int x0 = 225; int y0 = 225; //計算 for (int i = 1; i < 361; i++) { int x1 = (int) (x0 + r * Math.cos(Math.toRadians(i))); int y1 = (int) (y0 + r * Math.sin(Math.toRadians(i))); slidepoint[360 - i][0] = x1; slidepoint[360 - i][1] = y1; //draw angle string if (i % 10 ==0) g.drawString(String.valueOf(i), x1, y1); }
我先用swing做個示範,每隔10度畫出角度在座標上
你會發現跟我們習慣的角度好像方向不同,我們做個轉換
class DrawPane extends JPanel { public void paintComponent(Graphics g) { //畫大圓 g.drawOval(0, 0, 450, 450); //大圓 int r = 150; //座標的矩陣 slidepoint = new int[360][2]; //圓心位址 int x0 = 225; int y0 = 225; //計算 for (int i = 1; i < 361; i++) { int x1 = (int) (x0 + r * Math.cos(Math.toRadians(i))); int y1 = (int) (y0 + r * Math.sin(Math.toRadians(i))); slidepoint[360 - i][0] = x1; slidepoint[360 - i][1] = y1; } //轉換 for (int i = 0; i < 360; i++) { int x1 = slidepoint[i][0]; int y1 = slidepoint[i][1]; //繪圓 if (i%10==0) g.drawString(String.valueOf(i), x1, y1); } } }
[Android] ScrollView在CoordinatorLayout 異常
如果你在CoordinatorLayout 中使用ScrollView發生ScrollView只能滑下來一點點,
底下還有一部份Layout沒辦法顯示出來,但捲軸已經到底,請參考下方網址,把
ScrollView替換成
參考網址:
http://stackoverflow.com/questions/30574303/when-using-the-coordinatorlayout-my-scrollview-has-an-incorrect-size
底下還有一部份Layout沒辦法顯示出來,但捲軸已經到底,請參考下方網址,把
ScrollView替換成
android.support.v4.widget.NestedScrollView 。
參考網址:
http://stackoverflow.com/questions/30574303/when-using-the-coordinatorlayout-my-scrollview-has-an-incorrect-size
[Arduino] Android透過藍芽控制LED
先來看一段效果
Android --------------> BlueTooth Module(HC-05) --->Arduino ---> LED
分2部份:
第一部份是Arduino 的部份,它必須去控制LED與接收藍芽的訊號。
Arduino Code
Arduino 線路圖
Arduino 3.3 --> HC-05 VCC
Arduino GND --> 麵包板GND
Arduino pin10 ---> HC-05 TX
Arduino pin 11 ---> HC-05 RX
Arduino pin 12 ----> Red LED 正極
Arduino pin 13 ----> Green LED 正極
LED 負極接在麵包版負極。
HC-05 GND 接麵包板GND
第二個部份是Android透過藍芽傳輸控制訊號。
layout
用文字表示架構
BlueTooth
Android --------------> BlueTooth Module(HC-05) --->Arduino ---> LED
分2部份:
第一部份是Arduino 的部份,它必須去控制LED與接收藍芽的訊號。
Arduino Code
#include <SoftwareSerial.h> #include <Wire.h> // the maximum received command length from an Android system (over the bluetooth) #define MAX_BTCMDLEN 128 // 建立一個軟體模擬的序列埠; 不要接反了! // HC-05 Arduino // TX RX/Pin10 // RX TX/Pin11 SoftwareSerial BTSerial(10,11); // Arduino RX/TX byte cmd[MAX_BTCMDLEN]; // received 128 bytes from an Android system int len = 0; // received command length int LED_Red=12; int LED_Green=13; void setup() { pinMode(LED_Red, OUTPUT); pinMode(LED_Green, OUTPUT); digitalWrite(LED_Red, LOW); digitalWrite(LED_Green, LOW); Serial.begin(9600); // Arduino起始鮑率:9600 BTSerial.begin(9600); // HC-05 出廠的鮑率:每個藍牙晶片的鮑率都不太一樣,請務必確認 } void loop() { char str[MAX_BTCMDLEN]; int insize, ii; int tick=0; while ( tick<MAX_BTCMDLEN ) { // 因為包率同為9600, Android送過來的字元可能被切成數份 if ( (insize=(BTSerial.available()))>0 ){ // 讀取藍牙訊息 for ( ii=0; ii<insize; ii++ ){ cmd[(len++)%MAX_BTCMDLEN]=char(BTSerial.read()); } } else { tick++; } } if ( len ) { // 用串列埠顯示從Android手機傳過來的訊息 sprintf(str,"%s",cmd); Serial.println(str); Serial.println(cmd[0] ); Serial.println(cmd[1]); if (cmd[1]==49) { digitalWrite(LED_Red, HIGH); } else if (cmd[1]==48) { digitalWrite(LED_Red, LOW); } if (cmd[0]==49) { digitalWrite(LED_Green, HIGH); } else if (cmd[0]==48) { digitalWrite(LED_Green, LOW); } cmd[0] = '\0'; } len = 0; }
Arduino 線路圖
Arduino 3.3 --> HC-05 VCC
Arduino GND --> 麵包板GND
Arduino pin10 ---> HC-05 TX
Arduino pin 11 ---> HC-05 RX
Arduino pin 12 ----> Red LED 正極
Arduino pin 13 ----> Green LED 正極
LED 負極接在麵包版負極。
HC-05 GND 接麵包板GND
第二個部份是Android透過藍芽傳輸控制訊號。
package com.example.boywhychen.bluetooth; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothSocket; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.net.Uri; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.View; import android.view.Menu; import android.view.MenuItem; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.CompoundButton; import android.widget.ListView; import android.widget.Switch; import android.widget.Toast; import com.google.android.gms.appindexing.Action; import com.google.android.gms.appindexing.AppIndex; import com.google.android.gms.common.api.GoogleApiClient; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.ArrayList; import java.util.Set; import java.util.UUID; public class MainActivity extends AppCompatActivity { BluetoothAdapter mBtAdapter; ListView list; Set<BluetoothDevice> deviceSet; BluetoothDevice device; private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); String fiilliste[]; InputStream mmInStream; OutputStream mmOutStrem; byte[] command=new byte[4]; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); list=(ListView)findViewById(R.id.listView); command[2]=(byte)0x0D; command[3]=(byte)0x0A; list.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { for (BluetoothDevice bd : deviceSet) { if (bd.getName().equals(fiilliste[position])) { device = bd; } } try { BluetoothSocket mmSocket = device.createRfcommSocketToServiceRecord(MY_UUID); mmSocket.connect(); // blocking call mmInStream = mmSocket.getInputStream(); mmOutStrem = mmSocket.getOutputStream(); } catch (IOException e) { } } }); android.support.v7.widget.SwitchCompat red=(android.support.v7.widget.SwitchCompat)findViewById(R.id.red); red.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) { command[1]=49; } else { command[1]=48; } if (mmOutStrem!=null) { try { mmOutStrem.write(command); mmOutStrem.flush(); } catch (IOException e) { e.printStackTrace(); } } } }); android.support.v7.widget.SwitchCompat green=(android.support.v7.widget.SwitchCompat)findViewById(R.id.green); green.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) { command[0]=49; } else { command[0]=48; } if (mmOutStrem!=null) { try { mmOutStrem.write(command); mmOutStrem.flush(); } catch (IOException e) { e.printStackTrace(); } } } }); mBtAdapter = BluetoothAdapter.getDefaultAdapter(); // 檢查藍牙是否開啟 if (!mBtAdapter.isEnabled()) { Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableIntent, REQUEST_ENABLE_BT); } mBtAdapter.startDiscovery(); // 搜尋到藍牙裝置時,呼叫我們的函式 IntentFilter filter = new IntentFilter( BluetoothDevice.ACTION_FOUND ); this.registerReceiver( mReceiver, filter ); // 搜尋的過程結束後,也呼叫我們的函式 filter = new IntentFilter( BluetoothAdapter.ACTION_DISCOVERY_FINISHED ); this.registerReceiver(mReceiver, filter); } private BroadcastReceiver mReceiver=new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { ArrayList<String> stringarray=new ArrayList<String>(); ArrayAdapter<String> adapter; if (intent.getAction()== BluetoothDevice.ACTION_FOUND) { deviceSet= mBtAdapter.getBondedDevices(); for (BluetoothDevice bd:deviceSet) { stringarray.add(bd.getName()); } } fiilliste=new String[stringarray.size()]; stringarray.toArray(fiilliste); adapter = new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1, fiilliste); list.setAdapter(adapter); } }; }
layout
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" app:layout_behavior="@string/appbar_scrolling_view_behavior" tools:context="com.example.boywhychen.bluetooth.MainActivity" tools:showIn="@layout/activity_main"> <ListView android:id="@+id/listView" android:layout_width="wrap_content" android:layout_height="100dp" android:layout_alignParentEnd="true" android:layout_alignParentRight="true" android:layout_alignParentTop="true" /> <android.support.v7.widget.SwitchCompat android:id="@+id/red" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/listView" android:layout_marginTop="10dp" android:text="Red LED" /> <android.support.v7.widget.SwitchCompat android:id="@+id/green" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/red" android:layout_marginTop="10dp" android:text="Green LED" /> </RelativeLayout>
訂閱:
文章 (Atom)