tag:blogger.com,1999:blog-16773841670155685622024-03-13T08:20:21.506+09:00マイ・プロジェクトAnonymoushttp://www.blogger.com/profile/18125797009643745575noreply@blogger.comBlogger7125tag:blogger.com,1999:blog-1677384167015568562.post-58880134720477546612014-04-21T03:53:00.000+09:002014-04-21T04:08:21.314+09:00Dropboxのお手帳AndroidアプリDropboxと連携したお手帳アプリを作って見ました!<br />
<br />
<br />
グラウトサービスのDropboxと同期しているから、すべて取ったノートはパソコンやほかの携帯端末から閲覧、編集することはできます。<br />
<br />
中身はこんな感じ~<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhDf7tZBR1uUjf6zk8Oz1fx60siwX2E-qIYm8MB0Id3TNZMW4haylKlsdiK3QCsM-sTyFHz74l-uG0e39BaknCDzKa0p6-JV5XcdQwlZn_nowbCUBN56YFgoC0vXQTfFcU_cgG3rp-uUtC/s1600/jp_device-2014-04-21-002827.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhDf7tZBR1uUjf6zk8Oz1fx60siwX2E-qIYm8MB0Id3TNZMW4haylKlsdiK3QCsM-sTyFHz74l-uG0e39BaknCDzKa0p6-JV5XcdQwlZn_nowbCUBN56YFgoC0vXQTfFcU_cgG3rp-uUtC/s1600/jp_device-2014-04-21-002827.png" height="320" width="213" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVP0rwAdvZ6M2KTcDZ8Ns-yTQfn03WrYgjK2Gni5QnVIpnzlrg9NUIfBPlqn15Tnlu9EflLVzis-3L04ViG_Z8Oj0PtVLQQjhPfYT7c3HCFBQET-EZiCvSnA2fxdTrvUb2LC6srwidYK2N/s1600/jp_device-2014-04-21-002806.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVP0rwAdvZ6M2KTcDZ8Ns-yTQfn03WrYgjK2Gni5QnVIpnzlrg9NUIfBPlqn15Tnlu9EflLVzis-3L04ViG_Z8Oj0PtVLQQjhPfYT7c3HCFBQET-EZiCvSnA2fxdTrvUb2LC6srwidYK2N/s1600/jp_device-2014-04-21-002806.png" height="320" width="213" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCbjDUg2UOubFFZjdaVfGDE4hyphenhyphen1QEYIviBfPy_ccFaor0eVcgHn_EYSFUsEGCg3dlGj80p4CTijQuw5Wi_ofvsabm7JtIMI7x-aeku4y1NWKZ0oWSUhcp2k4AAWL403mvGSF3my1Lqm92h/s1600/Screenshot_2014-04-21-03-48-47.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCbjDUg2UOubFFZjdaVfGDE4hyphenhyphen1QEYIviBfPy_ccFaor0eVcgHn_EYSFUsEGCg3dlGj80p4CTijQuw5Wi_ofvsabm7JtIMI7x-aeku4y1NWKZ0oWSUhcp2k4AAWL403mvGSF3my1Lqm92h/s1600/Screenshot_2014-04-21-03-48-47.png" height="320" width="180" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<b>シンプルメモのダウンロード</b>はこちら</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://play.google.com/store/apps/details?id=com.edisonthk.memofordropbox" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipXsYKpCogoS3_guFJvnU3G81XC1RXMDYmp98FrR5nKmT2XRL8C7vae7KUkaqnH9j83sGdNIuEvqsqbuWyhGktowEGbFQg70ai8hjRa9Co2xI7mJKW3l0twhE9-ti1T90Tj-iQJJT1f05r/s1600/en_app_rgb_wo_60.png" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
こうしたらもっとよくなるよ~。</div>
<div class="separator" style="clear: both; text-align: left;">
みたいな提案を教えてくれるとうれしいです~。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<br />Anonymoushttp://www.blogger.com/profile/18125797009643745575noreply@blogger.com0tag:blogger.com,1999:blog-1677384167015568562.post-32527140766927957642013-09-03T19:48:00.002+09:002013-09-03T19:48:59.009+09:00Canvas のdrawText により汚い文字をきれいな文字へ直す方法Canvas クラスが用意したdrawText関数を利用して文字を書く場合は次の画像みたいな汚い文字が出力されませんか?<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEil50Y_yq2mrGEx0pE_mSwZug9QQrToWPKjRUuOAyCeMTKoZdx0PqDg6JwP4zea3S1C4GRrY58dYIDaNe3uOO7TWK3sbxV3AlJfzELWgR4ZXvsuj1900vtoeb0_VeHcwDg3Cu6JkBMQF50t/s1600/b1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="52" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEil50Y_yq2mrGEx0pE_mSwZug9QQrToWPKjRUuOAyCeMTKoZdx0PqDg6JwP4zea3S1C4GRrY58dYIDaNe3uOO7TWK3sbxV3AlJfzELWgR4ZXvsuj1900vtoeb0_VeHcwDg3Cu6JkBMQF50t/s320/b1.png" width="320" /></a></div>
<br />
コードは下記<br />
<br />
<pre class="brush:java">public class CustomView extends View{
public CustomView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public void onDraw(Canvas canvas){
Paint p = new Paint();
p.setTextSize(25);
canvas.drawText("時間を蹴飛ばす",20,50,p);
super.onDraw(canvas);
}
}</pre>
<br />
ここで、上記のコードのPaint() コンストラクタにフラグを加えることによって、文字がきれいになります。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZSSBAhWYo9fD5QErI93ZYeA0ro3FD-lRxUNMN_X7quqmYqgFLU9MwsP069i0hT0Ie-kEjymh7goRzsc5weaq0Cx-Oa5l0Hi6N5ggzsz3Jc3tGjXhC8U4bvZ1KPLXN4OoKrhyphenhyphenu36y-fHgu/s1600/b2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZSSBAhWYo9fD5QErI93ZYeA0ro3FD-lRxUNMN_X7quqmYqgFLU9MwsP069i0hT0Ie-kEjymh7goRzsc5weaq0Cx-Oa5l0Hi6N5ggzsz3Jc3tGjXhC8U4bvZ1KPLXN4OoKrhyphenhyphenu36y-fHgu/s1600/b2.png" /></a></div>
<br />
<br />
Paint()コンストラクタを次のように書き換えればよいです。<br />
<br />
<pre class="brush:java">Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);</pre>
<br />
ほかの方法としては、フォントを変えることです。次のコード<br />
<br />
<pre class="brush:java">p.setTypeface(Typeface.SANS_SERIF);</pre>
<br />
を加えると、フォントが変わります。Anonymoushttp://www.blogger.com/profile/18125797009643745575noreply@blogger.com0tag:blogger.com,1999:blog-1677384167015568562.post-15844009078011068002013-06-25T17:27:00.001+09:002013-07-06T18:48:15.420+09:00ウェブからAVRマイコンを制御して見ました<br />
ウェブと通信するためにまずウェブサーバが必要で、そしてパソコンとマイコンと通信するためにシリアル通信というのは必要です。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnddSfb2UdudlMOwnv1tnenYjoYD5UYSfAyZ712eSkiZDcos5c1gyfDXpi3gEBhGzkrFgXavFNlXg9UY0M95zJIsLICGjTJHVO9jeGM5nXCVMrUgfLKqWyTViVPa7tKV89mB8Ehr2qLstN/s1600/p2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="193" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnddSfb2UdudlMOwnv1tnenYjoYD5UYSfAyZ712eSkiZDcos5c1gyfDXpi3gEBhGzkrFgXavFNlXg9UY0M95zJIsLICGjTJHVO9jeGM5nXCVMrUgfLKqWyTViVPa7tKV89mB8Ehr2qLstN/s320/p2.png" width="320" /></a></div>
<br />
今回の工作はAndroidにウェブサーバとシリアル通信変換という二つのプログラミングを一つのアプリにまとめて作ってみました。<br />
今回の工作に使われているものは次となる。<br />
1. MK808B ミニPC (Android 4.1 が搭載されています)<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTPheyYSv-WupEZPY-9ZJpJCV8-CSsWzRfXxk4JsXpg5c7m6AlozbYuvTCp-U8qq5FVnk0PgvBsoNNaNsLqp_QPqaGZ6K2jdplH2sLR8Ghirb8AqtmR154CVFEqruIpBhIuJKnZQwAh2ZJ/s1600/node-serialport2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTPheyYSv-WupEZPY-9ZJpJCV8-CSsWzRfXxk4JsXpg5c7m6AlozbYuvTCp-U8qq5FVnk0PgvBsoNNaNsLqp_QPqaGZ6K2jdplH2sLR8Ghirb8AqtmR154CVFEqruIpBhIuJKnZQwAh2ZJ/s200/node-serialport2.png" width="200" /></a></div>
<br />
2. HDMI端子つきのモニター<br />
3. USB - シリアル変換 (FT232RL)<br />
4. マイコン (AVR Atmega 328p)<br />
5. Java およびAndroidの開発環境が整えたパソコン<br /><br/>
<h4>MK808B</h4>
MK808Bは中国製のミニPCです。正直最初はそれにUbuntuを入れてウェブサーバとして使いたかったですが、いろいろやってみたら失敗に終えました。<br />
しかし、MK808BにAndroid 4.1が搭載されていますから、試しにAndroidをウェブサーバとして作ってみたら成功しました。なので、このブログを借りてその経験をみんなとシェアしたいと思います。<br />
この工作はAndroid OSに成功しましたから、たぶんAndroid4.xが搭載されているスマホでも作れると思います。ただし、シリアル通信のところでは、USB OTGが必要なので、それを装備しているスマホでなければいけないと思います。<br /><br/>
<h4>HTTPウェブサーバを成作</h4>
nanoHttpdというライブラリを使いました。まず、Androidの開発環境を開いて新しいAndroidプロジェクトを立ち上げてください。それを”HttpSerialServer”と名付けてください。そして、次のリンクからzipファイルを落としてください。<br />
<a href="https://github.com/NanoHttpd/nanohttpd">https://github.com/NanoHttpd/nanohttpd</a><br />
落としたら、解凍して、ファイルを開いてください。次の場所へ、core->src->main->java->fi->iki->elonen 、NanoHTTPD.javaというファイルがあります。それをコピーし、アンドロイドのプロジェクトのsrcというフォルダに貼り付けてください。<br />
これで、ライブラリのインストールは完了しました。<br />
そして、新しいファイルを新規して、次のサンプルコードを書いて確かめましょう。<br />
まず、新規したファイルをSimpleServer.javaと名づけてに次のコードをコピーしてください。<br />
<pre class="brush:java">
public class SimpleServer extends NanoHTTPD{
public SimpleServer(String host,int port) {
super(host,port);
}
@Override
public Response serve(String uri, Method method, Map<string,string> header, Map<string,string> parms, Map<string,string> files) {
StringBuilder sb = new StringBuilder();
sb.append("HELLO, this is testing code and you are success if you this messasge");
return new Response(sb.toString());
}
}
</pre>
そして、MainActivity.javaを開いて、onCreateメソッドのところに次にコードを加えてください。
<br />
<pre class="brush:java"> server = new SimpleServer(SimpleServer.url,SimpleServer.port);
try {
server.start();
System.out.println(getLocalIpAddress(true));
} catch (IOException e) {
e.printStackTrace();
}
</pre>
onDestroyメソッドに次のソースコードを加えてserverを停止する。<br />
<pre class="brush:java">if(server != null){
server.stop();
server = null;
}
</pre>
MainActivity.javaの全体はこういう感じです。<br />
<pre class="brush:java">public class MainActivity extends Activity {
Button smallButton[][];
int m_row = 5,m_col = 5;
SimpleServer server = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
server = new SimpleServer("0.0.0.0",8080);
try {
server.start();
System.out.println(getLocalIpAddress(true));
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
protected void onDestroy(){
super.onDestroy();
if(server != null){
server.stop();
}
}
}
</pre>
もっとも手取り早い確かめる方法としては、Android携帯にアプリを起動して、PCのブラウザからアクセスします。その際、使うURLは<br />
<a href="http://%3Candroid%20ip%20address%3E:8080/">http://<android ip address>:8080</a><br />
エミュレータを使う方法もありますが、この記事ではそれに関しては説明しません。<br />
もし、ここまで成功しましたら、ウェブサーバを本格化しましょう。nanohttpdファイルを開いて、webserver->src->main->java->fi->iki->elonenに入ってもらって、そうすると、SimpleWebServer.javaというファイルが見えます。そのファイルはSimpleServer.javaの代わりに使うので、SimpleServer.javaを削除して、SimpleWebServer.javaをコピーして貼り付けましょう。<br />
そして、SimpleWebServerを開いて、いくつ変更点があります。<br />
public static void main(String[] args) … というメソッドを消してください。そして、次のグローバル変数とメソッドを加えてください。<br />
<pre class="brush:java">
public static String mRecv = "";
public static String mWrite = "";
public static final String path = "/data/user";
public static final String PARMS1 = "send";
</pre>
これを加えることによってウェブからどういうようなデータを受け取ったのかを確認できます。<br />
また、public Response serve(String uri, Method method… というメソッドを次のように変更してください。<br />
<pre class="brush:java"> boolean jsonApp = false;
if (!quiet) {
System.out.println(method + " '" + uri + "' ");
Iterator<String> e = header.keySet().iterator();
while (e.hasNext()) {
String value = e.next();
System.out.println(" HDR: '" + value + "' = '" + header.get(value) + "'");
if(value.equals("x-requested-with")){
if(header.get(value).equals("XMLHttpRequest")){
jsonApp = true;
System.out.println("JSON is received");
}
}
}
e = parms.keySet().iterator();
while (e.hasNext()) {
String value = e.next();
System.out.println(" PRM: '" + value + "' = '" + parms.get(value) + "'");
}
e = files.keySet().iterator();
while (e.hasNext()) {
String value = e.next();
System.out.println(" UPLOADED: '" + value + "' = '" + files.get(value) + "'");
}
System.out.println("RECV : "+parms.get(PARMS1));
}
if(jsonApp){
mRecv = parms.get(PARMS1);
JSONObject jObj = new JSONObject();
try {
jObj.put("get", parms.get(PARMS1));
} catch (JSONException e) {
System.err.println(e);
}
return new Response(jObj.toString());
}else{
return serveFile(uri, header, getRootDir());
}
</pre>
これに変更することによって、ブラウザから受け取ったデータをそのままブラウザに返します。<br />
そして、MainActivity.javaの方はもともとSimpleServerと書いたクラスをすべてSimpleWebServerに変更してください。また、SimpleServerのコンストラクタのパラメータは2個だったが、SimpleWebServerクラスの場合はパラメータ4つがあって、それも次のように変更しなければなりません。<br />
<pre class="brush:js"> File wwwroot = new File(SimpleServer.path).getAbsoluteFile();
SimpleServer server = new SimpleServer(SimpleServer.url,SimpleServer.port,wwwroot,false);
try {
server.start();
updateText("IPaddr : "+getLocalIpAddress(true)+":"+SimpleServer.port);
updateText("Server configure success");
} catch (IOException ioe) {
updateText("Failed to start server : "+ioe.toString());
}
</pre>
ここで、/data/userというのはwwwrootファイルの場所です。最後にAndroidManifest.xmlを開いて、次のコードを<uses-sdk>タグの前においてくだいさい。<br />
<pre class="brush:js">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/></pre>
これから、Androidの/data/userところにindex.htmlファイルを加えましょう。そうすると、ブラウザからhtmlファイルをリクエストされたらindex.htmlが返せます。まず、index.htmlを成作しましょう。<br />
次のコードをコピーしてください。<br />
<pre class="brush:html"><!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
<script type="text/javascript">
$(function(){
var testmsg = $("#test-text");
var recvmsg = $("#recv");
var b = $("#a");
// change "a" to the character you want to send
b.mousedown(function(){
ajaxSend("a");
});
function ajaxSend(snd){
$.ajax({
type: "POST",
url: ".",
dataType: "json",
data: {
send: snd
},
success: function(e){
var jObj;
if(typeof e == "string"){
jObj = JSON.stringify(e);
}else if(typeof e == "object"){
jObj = e;
}
recvmsg.text("a");
},
error: function (XMLHttpRequest, textStatus, errorThrown){
recvmsg.text("error");
}
});
}
});
</script>
</head>
<body>
<p>received : <span id="recv">initial</span></p>
<p id="test-text">test</p>
<input style="height:200px;width:200px;font-size:30px" type="button" id="a" value="A"></input>
</body>
</html>
</pre>
このコードはまずブラウザにボタンがあって、そのボタンを押すと”a”という文字が送信されます。もしほかの文字にしたい場合はajaxSend関数のパラメータを他の文字に変更すればよいです。<br />
index.htmlをできたらこれをAndroidに保存します。まず、Androidをdebugモードに変更して、PCからadb terminal を開いて、次のコマンドを入力してください。<br />
<pre class="brush:js">adb push C:\Users\Username\Documents\index.html /data/user
</pre>
これでOKです。もしindex.htmlが入っているかを確認したい場合は、次のコマンドを使ってください。<br />
<pre class="brush:js">adb shell
cd /data/user
ls -l
</pre>
Httpサーバはこれで一端終了です。<br /><br/>
<h4>
USB-シリアル変換を実装</h4>
まず、自分のデバイスはちゃんとUSB OTGとして機能できることを確認してください。<br />
ネットで検索してみると、偶然発見しました、FTDI社はAndroid向けのシリアルとUSB変換ライブラリが用意しているということ。よって、せっかくFTDI社がライブラリを用意したので、使いましょうということで、次のリンクへて、zipファイルを落としてください。<br />
<a href="https://github.com/ksksue/FTDriver">https://github.com/ksksue/FTDriver</a><br />
ファイルを落としたら解凍して再びAndroidの開発環境に戻りましょう。私の開発環境はeclipseなので、それを使って説明させてもらいます。<br />
まず、FTDriverプロジェクトをAndroidプロジェクトとしてimportします。File->New->Othersをクリックすると、次の画面が表示する。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKAUjfU_-xsuBBPSWQ1e1i-QpEdYQDuJNLoP5ptEAqT4oT3e0PXzEu7IpbqQo6gx4RXOlq9fk23QLkWSYH8s764EG0-PX2iaDSCcoeO7Vho7UUkHmFRfOIR8JjUrX-25Wt6zu8NPnwUgUy/s1600/p5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="306" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKAUjfU_-xsuBBPSWQ1e1i-QpEdYQDuJNLoP5ptEAqT4oT3e0PXzEu7IpbqQo6gx4RXOlq9fk23QLkWSYH8s764EG0-PX2iaDSCcoeO7Vho7UUkHmFRfOIR8JjUrX-25Wt6zu8NPnwUgUy/s320/p5.png" width="320" /></a></div>
そして、Android Project from Existing Code を選択して、Nextを押してください。<br />
次に、いま解凍したFTDriverを選択してOKをクリックしてください。そして、FTDriverプロジェクトをチェック付けてFinishをクリックしてください。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPJY1CGF01h2h0CtHwLluGu28_SwNYG-BFoydVm4zEwqHCZ72Dzvn97OeeTtsq6imbUzQE_6lG9-yxpV8ilgWa-7yLxY_rZmZ8IDGaCFyhXHVWBPlVlkRLytkpAbttA_36SRXSppiZssAf/s1600/p6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="181" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPJY1CGF01h2h0CtHwLluGu28_SwNYG-BFoydVm4zEwqHCZ72Dzvn97OeeTtsq6imbUzQE_6lG9-yxpV8ilgWa-7yLxY_rZmZ8IDGaCFyhXHVWBPlVlkRLytkpAbttA_36SRXSppiZssAf/s320/p6.png" width="320" /></a></div>
<br />
<br />
FTDriverプロジェクトをimportしたらPackage ExplorerにあるFTDriverを右クリックしてプロパティーをクリックしてください。そして、次のような画面が表示します。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdoZKW3tF_iuaagMWXIZ94-Q4V99JiG6KV2LNuY5QIoan80kJoROD-Wuoe_8g16Li3XDQ3G5zRz-wVJReu3DxGW3Kl5MGo1FkB3qEh6PaI1_L2BSYF_dPcPC33PVppb_PPPe_89paep7Bk/s1600/p4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="293" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdoZKW3tF_iuaagMWXIZ94-Q4V99JiG6KV2LNuY5QIoan80kJoROD-Wuoe_8g16Li3XDQ3G5zRz-wVJReu3DxGW3Kl5MGo1FkB3qEh6PaI1_L2BSYF_dPcPC33PVppb_PPPe_89paep7Bk/s320/p4.png" width="320" /></a></div>
<br />
Androidセッションを選択して、LibraryのセッションにIs Library がチェックされているものを確認してください。もしチェックされていなければそれをチェック付けてください。<br />
そして、同様にPackage Explorer からHttpSerialServerを右クリックしてプロパティーを開いてください。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzEagMLKOKZEPVdTANNzXrHJPjJ2OEr9lrftpT75M4kNWDCS6KHcJlZLl5oH-3HS4cCVkTStEf1skhKScKuyF202QNq3m6ijeGjo50JYsq-NUBkyYf-aJanKOkx0UaphfyatmuL_mrzhMj/s1600/p3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="289" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzEagMLKOKZEPVdTANNzXrHJPjJ2OEr9lrftpT75M4kNWDCS6KHcJlZLl5oH-3HS4cCVkTStEf1skhKScKuyF202QNq3m6ijeGjo50JYsq-NUBkyYf-aJanKOkx0UaphfyatmuL_mrzhMj/s320/p3.png" width="320" /></a></div>
<br />
<br />
LibraryセッションのところにAddボタンを押してFTPDriverを追加してください。あと、Is Libraryのチェックは必ず外してください。<br />
では、AndroidはUSB OTGとして機能しているかとうかを確認しましょう。MainActivity.javaを開いて、次のグロバール変数を定義してください。<br />
<pre class="brush:js"> String serialRecv = "";
final int SERIAL_BAUDRATE = FTDriver.BAUD9600;
final int mOutputType = 0;
final boolean SHOW_LOGCAT = false;
FTDriver mSerial;
private boolean mStop=false;
Handler mHandler = new Handler();
</pre>
そして、次のメソッドを加えてください。<br />
<pre class="brush:java">
/**
* configure USB, if mSerial is not null, it will return true too.
* @return return true if success else fail
*/
boolean configureUSB(){
if(mSerial == null){
// get service
mSerial = new FTDriver((UsbManager)getSystemService(Context.USB_SERVICE));
mStop=false;
// listen for new devices
IntentFilter filter = new IntentFilter();
filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);
filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);
registerReceiver(mUsbReceiver, filter);
if(mSerial.begin(SERIAL_BAUDRATE)) {
mainloop();
return true;
}else{
return false;
}
}else{
return true;
}
}
void stopUSB(){
mSerial.end();
mSerial = null;
mStop=true;
unregisterReceiver(mUsbReceiver);
}
private void mainloop() {
new Thread(mLoop).start();
}
private Runnable mLoop = new Runnable() {
@Override
public void run() {
int i;
int len;
byte[] rbuf = new byte[4096];
for(;;){//this is the main loop for transferring
//////////////////////////////////////////////////////////
// Read and Display to Terminal
//////////////////////////////////////////////////////////
len = mSerial.read(rbuf);
// TODO: UI:Show last line
if(len > 0) {
serialRecv = new String(rbuf);
mHandler.post(new Runnable() {
public void run() {
Log.i(TAG,"Serial Recv : "+serialRecv);
}
});
}
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
if(mStop) {
break;
}
}
}
};
// BroadcastReceiver when insert/remove the device USB plug into/from a USB port
BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) {
mSerial.usbAttached(intent);
mSerial.begin(SERIAL_BAUDRATE);
mStop=false;
mainloop();
} else if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)) {
mSerial.usbDetached(intent);
mSerial.end();
mStop=true;
}
}
};
</pre>
そして、onCreateメソッドに次のコードを加えてください。<br />
<pre class="brush:java"> if(configureUSB()){
System.out.println("Success");
}else{
System.out.println("Failed");
}
</pre>
そして、onDestroyメソッドに次のコードを加えてください。<br />
<pre class="brush:java">if(mSerial != null){
stopUSB();
}
</pre>
その次に、resのフォルダにxmlというフォルダを追加してください。そして、device_filter.xmlというファイルを新規して、xmlフォルダにいれてください。device_filter.xmlは次のコードを加えてください。<br />
<pre class="brush:java"><?xml version="1.0" encoding="utf-8"?>
<resources>
<usb-device vendor-id="1027" product-id="24577" />
<usb-device vendor-id="1118" product-id="688" />
<usb-device vendor-id="1027" product-id="24592" />
<usb-device vendor-id="1027" product-id="24596" />
</resources>
</pre>
最後に、AndroidManifest.xmlを開いて次のコードを<activity>の中に定義してください。<br />
<pre class="brush:js"><intent-filter>
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
</intent-filter>
<meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
android:resource="@xml/device_filter" />
</pre>
AndroidManifest.xmlの全体はこんな感じです。<br />
<pre class="brush:js"><?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="<a href="http://schemas.android.com/apk/res/android%22">http://schemas.android.com/apk/res/android"</a>
package="com.example.httpserialserver"
android:versionCode="1"
android:versionName="1.0" >
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-sdk
android:minSdkVersion="12"
android:targetSdkVersion="17" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.httpserialserver.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
</intent-filter>
<meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
android:resource="@xml/device_filter" />
</activity>
</application>
</manifest>
</pre>
これで、コンパイルして、アプリをデバイスにインストールして。そして、FTDRのデバイスに繋いでみてください。もし、USBは挿した瞬間に画面に何か表示したら、つまり成功にデバイスが認識されました。もしそうでなければ、理由は二つしかありません。デバイスはUSB OTGではないことと何か編集すべきなことをを忘れました。<br /><br/>
<h4>
最後の仕上げ</h4>
サーバから受け取ったデータをそのままUSBに渡せるようにmLoopインスタンスを次のように書き換えてください。<br />
<pre class="brush:java"> private Runnable mLoop = new Runnable() {
@Override
public void run() {
updateText("Serial Connection is start");
int i;
int len;
byte[] rbuf = new byte[4096];
String recvFromBrowser;
for(;;){//this is the main loop for transferring
// get the data from browser and send it to MCU
recvFromBrowser = server.getReceviedFromBrowser();
if(recvFromBrowser.length() > 0){
mSerial.write(recvFromBrowser.getBytes(), recvFromBrowser.length());
}
// read the received data from serial buffer
len = mSerial.read(rbuf);
if(len > 0) {
serialRecv = new String(rbuf);
mHandler.post(new Runnable() {
public void run() {
Log.i(TAG,"Serial Recv : "+serialRecv);
}
});
}
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
if(mStop) {
break;
}
}
}
};
</pre>
これで、ウェブからデータを受け取って、そのままUSBに渡せるようになりました。<br />
では、アプリを起動して、ブラウザからウェブサーバへアクセスして、ボタンを押してみてください。マイコン側では”a”という文字が受け取るのはずです。<br />
では、お疲れ様でした!Anonymoushttp://www.blogger.com/profile/18125797009643745575noreply@blogger.com0tag:blogger.com,1999:blog-1677384167015568562.post-85754837805838495552012-12-17T23:43:00.002+09:002012-12-18T09:29:37.761+09:00アンドロイドでシンプルなリストメニューを作成ブログを始めてまだ1週間も経っていないのでフィードバックなどがいただけると嬉しいです。<br />
<div>
<br /></div>
<div>
私が使っている開発環境は jdk 1.7.0 、android 4.2 、 eclipse 4.2.1</div>
<div>
<br /></div>
<div>
今回はAndroid platformが用意したデフォルトの行レイアウトを使い、シンプルなリストメニューを作成しましょう。もちろん自作のレイアウトを使い、作成することも可能なんです。使い方としては以下の図のようにメニューリストの内容をクリックするとトーストが選択した内容を表示する。</div>
<div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioqIdAbK_GBvTuhLTcbwL6aleDSbhmPQ97zBmx5wr4HYSvsTV4FswiyJNbnHSl2NuBnWc4EJ_vsVvfEm0VdbqC6E08Tas8Dq-PNLdjPDoiZBvlZsELosgDoDKMYLt03mkhDLQ-edBmYNMU/s1600/listadapter.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioqIdAbK_GBvTuhLTcbwL6aleDSbhmPQ97zBmx5wr4HYSvsTV4FswiyJNbnHSl2NuBnWc4EJ_vsVvfEm0VdbqC6E08Tas8Dq-PNLdjPDoiZBvlZsELosgDoDKMYLt03mkhDLQ-edBmYNMU/s320/listadapter.png" width="216" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<h3>
1. listView layout 作成</h3>
<div class="separator" style="clear: both; text-align: left;">
まず、次のソースコードのように作成する。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
</div>
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: #507090;"><?xml version="1.0" encoding="utf-8"?></span>
<span style="color: #007000;"><LinearLayout</span> <span style="color: #0000c0;">xmlns:android=</span><span style="background-color: #fff0f0;">"http://schemas.android.com/apk/res/android"</span>
<span style="color: #0000c0;">android:layout_width=</span><span style="background-color: #fff0f0;">"match_parent"</span>
<span style="color: #0000c0;">android:layout_height=</span><span style="background-color: #fff0f0;">"match_parent"</span>
<span style="color: #0000c0;">android:orientation=</span><span style="background-color: #fff0f0;">"vertical"</span> <span style="color: #007000;">></span>
<span style="color: #007000;"><ListView</span>
<span style="color: #0000c0;">android:id=</span><span style="background-color: #fff0f0;">"@+id/text1"</span>
<span style="color: #0000c0;">android:layout_width=</span><span style="background-color: #fff0f0;">"match_parent"</span>
<span style="color: #0000c0;">android:layout_height=</span><span style="background-color: #fff0f0;">"wrap_content"</span> <span style="color: #007000;">></span>
<span style="color: #007000;"></ListView></span>
<span style="color: #007000;"></LinearLayout></span></pre>
</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
new android application project で新しいプロジェクトを立ち上がり、そして上記のソースコードに書き換えます。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
メニューリストの作成スペースを作るために、ListViewレイアウトを加えなければなりません。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
これでコンパイルしてみると、画面には何も表示しません。それはListViewレイアウトにデータをまだ書き込んでいません。レイアウトにデータを書き込むため、まずそのレイアウトにidを加えないといけません。例の場合はListViewレイアウトにtext1というidを加えました。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
次は、このidを利用し、データを書き込みます。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<h3>
2. MainActivityクラスを作成</h3>
<div class="separator" style="clear: both; text-align: left;">
新しいJavaクラスを立ち上げて、それをMainActivityと名づけます。そして、次のコードを入力します。</div>
<br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: green; font-weight: bold;">public</span> <span style="color: green; font-weight: bold;">class</span> <span style="color: #b00060; font-weight: bold;">MainActivity</span> <span style="color: green; font-weight: bold;">extends</span> ListActivity <span style="color: #303030;">{</span>
<span style="color: #505050; font-weight: bold;">@Override</span>
<span style="color: green; font-weight: bold;">protected</span> <span style="color: #303090; font-weight: bold;">void</span> <span style="color: #0060b0; font-weight: bold;">onCreate</span><span style="color: #303030;">(</span>Bundle savedInstanceState<span style="color: #303030;">)</span> <span style="color: #303030;">{</span>
<span style="color: green; font-weight: bold;">super</span><span style="color: #303030;">.</span><span style="color: #0000c0;">onCreate</span><span style="color: #303030;">(</span>savedInstanceState<span style="color: #303030;">);</span>
String<span style="color: #303030;">[]</span> values <span style="color: #303030;">=</span> <span style="color: green; font-weight: bold;">new</span> String<span style="color: #303030;">[]</span> <span style="color: #303030;">{</span> <span style="background-color: #fff0f0;">"Android"</span><span style="color: #303030;">,</span> <span style="background-color: #fff0f0;">"iPhone"</span><span style="color: #303030;">,</span> <span style="background-color: #fff0f0;">"WindowsMobile"</span><span style="color: #303030;">};</span>
<span style="color: grey;">// First parameter - Context</span>
<span style="color: grey;">// Second parameter - Layout for the row</span>
<span style="color: grey;">// Third parameter - ID of the TextView to which the data is written</span>
<span style="color: grey;">// Forth - the Array of data</span>
ArrayAdapter<span style="color: #303030;"><</span>String<span style="color: #303030;">></span> adapter <span style="color: #303030;">=</span> <span style="color: green; font-weight: bold;">new</span> ArrayAdapter<span style="color: #303030;"><</span>String<span style="color: #303030;">>(</span><span style="color: green; font-weight: bold;">this</span><span style="color: #303030;">,</span>
android<span style="color: #303030;">.</span><span style="color: #0000c0;">R</span><span style="color: #303030;">.</span><span style="color: #0000c0;">layout</span><span style="color: #303030;">.</span><span style="color: #0000c0;">simple_list_item_1</span><span style="color: #303030;">,</span> android<span style="color: #303030;">.</span><span style="color: #0000c0;">R</span><span style="color: #303030;">.</span><span style="color: #0000c0;">id</span><span style="color: #303030;">.</span><span style="color: #0000c0;">text1</span><span style="color: #303030;">,</span> values<span style="color: #303030;">);</span>
<span style="color: grey;">// Assign adapter to ListView</span>
setListAdapter<span style="color: #303030;">(</span>adapter<span style="color: #303030;">);</span>
<span style="color: #303030;">}</span>
<span style="color: #303030;">}</span>
</pre>
</div>
<br />
ここで注意してもらいたいことは二つあります。一つ目は通常、extends Activity クラスとなっていますが、ここはListActivity クラスに書き換えることです。二目はListActivityクラスの場合はsetContextViewのかわりにsetListAdapterを使うことです。<br />
<br />
これでコンパイルしてみると、String配列に代入した"Android","iPhone","WindowsMobile"がメニューに表示しました。<br />
<br />
android.R.layout.simple_list_item_1がデフォルトの行レイアウトです。android.R.id.text1はデフォルト行レイアウトに入ってるデフォルトidです。もちろん、自作の行レイアウトを使用することも可能です。<br />
<br />
次はメニューをクリックとトーストが表示するプログラムを作成します。<br />
<br />
<h3>
3. onListItemClickメソッドを実装</h3>
MainActivityクラスにonListItemClickメソッドを実装し、次のソースコードを入力します。<br />
<br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: #505050; font-weight: bold;">@Override</span>
<span style="color: green; font-weight: bold;">public</span> <span style="color: #303090; font-weight: bold;">void</span> <span style="color: #0060b0; font-weight: bold;">onListItemClick</span><span style="color: #303030;">(</span>ListView l<span style="color: #303030;">,</span>View v<span style="color: #303030;">,</span><span style="color: #303090; font-weight: bold;">int</span> position<span style="color: #303030;">,</span><span style="color: #303090; font-weight: bold;">long</span> id<span style="color: #303030;">){</span>
String item <span style="color: #303030;">=</span> <span style="color: #303030;">(</span>String<span style="color: #303030;">)</span>getListAdapter<span style="color: #303030;">().</span><span style="color: #0000c0;">getItem</span><span style="color: #303030;">(</span>position<span style="color: #303030;">);</span>
Toast<span style="color: #303030;">.</span><span style="color: #0000c0;">makeText</span><span style="color: #303030;">(</span>getApplicationContext<span style="color: #303030;">(),</span>
item<span style="color: #303030;">+</span><span style="background-color: #fff0f0;">""</span><span style="color: #303030;">,</span> Toast<span style="color: #303030;">.</span><span style="color: #0000c0;">LENGTH_SHORT</span><span style="color: #303030;">)</span>
<span style="color: #303030;">.</span><span style="color: #0000c0;">show</span><span style="color: #303030;">();</span>
<span style="color: #303030;">}</span>
</pre>
</div>
<div style="text-align: left;">
String itemにgetListAdapter.getItem()メソッドより選択したメニューの名前を代入します。そして、代入したitemをトーストより表示します。<br />
<br />
<h3>
4. 完成!!!</h3>
これでチュートリアルは終了です。ビルドすると最初に話したようなプログラムが動くはずです。そして、見ていただいてありがとうございました。<br />
<br />
次のソースコードは完成したMainActivityクラスです。<br />
<br /></div>
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: green; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">android.os.Bundle</span><span style="color: #303030;">;</span>
<span style="color: green; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">android.app.ListActivity</span><span style="color: #303030;">;</span>
<span style="color: green; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">android.view.View</span><span style="color: #303030;">;</span>
<span style="color: green; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">android.widget.ArrayAdapter</span><span style="color: #303030;">;</span>
<span style="color: green; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">android.widget.ListView</span><span style="color: #303030;">;</span>
<span style="color: green; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">android.widget.Toast</span><span style="color: #303030;">;</span>
<span style="color: green; font-weight: bold;">public</span> <span style="color: green; font-weight: bold;">class</span> <span style="color: #b00060; font-weight: bold;">MainActivity</span> <span style="color: green; font-weight: bold;">extends</span> ListActivity <span style="color: #303030;">{</span>
<span style="color: #505050; font-weight: bold;">@Override</span>
<span style="color: green; font-weight: bold;">protected</span> <span style="color: #303090; font-weight: bold;">void</span> <span style="color: #0060b0; font-weight: bold;">onCreate</span><span style="color: #303030;">(</span>Bundle savedInstanceState<span style="color: #303030;">)</span> <span style="color: #303030;">{</span>
<span style="color: green; font-weight: bold;">super</span><span style="color: #303030;">.</span><span style="color: #0000c0;">onCreate</span><span style="color: #303030;">(</span>savedInstanceState<span style="color: #303030;">);</span>
String<span style="color: #303030;">[]</span> values <span style="color: #303030;">=</span> <span style="color: green; font-weight: bold;">new</span> String<span style="color: #303030;">[]</span> <span style="color: #303030;">{</span> <span style="background-color: #fff0f0;">"Android"</span><span style="color: #303030;">,</span> <span style="background-color: #fff0f0;">"iPhone"</span><span style="color: #303030;">,</span> <span style="background-color: #fff0f0;">"WindowsMobile"</span><span style="color: #303030;">};</span>
<span style="color: grey;">// First parameter - Context</span>
<span style="color: grey;">// Second parameter - Layout for the row</span>
<span style="color: grey;">// Third parameter - ID of the TextView to which the data is written</span>
<span style="color: grey;">// Forth - the Array of data</span>
ArrayAdapter<span style="color: #303030;"><</span>String<span style="color: #303030;">></span> adapter <span style="color: #303030;">=</span> <span style="color: green; font-weight: bold;">new</span> ArrayAdapter<span style="color: #303030;"><</span>String<span style="color: #303030;">>(</span><span style="color: green; font-weight: bold;">this</span><span style="color: #303030;">,</span>
android<span style="color: #303030;">.</span><span style="color: #0000c0;">R</span><span style="color: #303030;">.</span><span style="color: #0000c0;">layout</span><span style="color: #303030;">.</span><span style="color: #0000c0;">simple_list_item_1</span><span style="color: #303030;">,</span> android<span style="color: #303030;">.</span><span style="color: #0000c0;">R</span><span style="color: #303030;">.</span><span style="color: #0000c0;">id</span><span style="color: #303030;">.</span><span style="color: #0000c0;">text1</span><span style="color: #303030;">,</span> values<span style="color: #303030;">);</span>
<span style="color: grey;">// Assign adapter to ListView</span>
setListAdapter<span style="color: #303030;">(</span>adapter<span style="color: #303030;">);</span>
<span style="color: #303030;">}</span>
<span style="color: #505050; font-weight: bold;">@Override</span>
<span style="color: green; font-weight: bold;">public</span> <span style="color: #303090; font-weight: bold;">void</span> <span style="color: #0060b0; font-weight: bold;">onListItemClick</span><span style="color: #303030;">(</span>ListView l<span style="color: #303030;">,</span>View v<span style="color: #303030;">,</span><span style="color: #303090; font-weight: bold;">int</span> position<span style="color: #303030;">,</span><span style="color: #303090; font-weight: bold;">long</span> id<span style="color: #303030;">){</span>
String item <span style="color: #303030;">=</span> <span style="color: #303030;">(</span>String<span style="color: #303030;">)</span>getListAdapter<span style="color: #303030;">().</span><span style="color: #0000c0;">getItem</span><span style="color: #303030;">(</span>position<span style="color: #303030;">);</span>
Toast<span style="color: #303030;">.</span><span style="color: #0000c0;">makeText</span><span style="color: #303030;">(</span>getApplicationContext<span style="color: #303030;">(),</span>
item<span style="color: #303030;">+</span><span style="background-color: #fff0f0;">""</span><span style="color: #303030;">,</span> Toast<span style="color: #303030;">.</span><span style="color: #0000c0;">LENGTH_SHORT</span><span style="color: #303030;">)</span>
<span style="color: #303030;">.</span><span style="color: #0000c0;">show</span><span style="color: #303030;">();</span>
<span style="color: #303030;">}</span>
<span style="color: #303030;">}</span>
</pre>
</div>
<div style="text-align: left;">
<br />
<br />
<br />
<br />
<div style="text-align: center;">
<br /></div>
<br /></div>
Anonymoushttp://www.blogger.com/profile/18125797009643745575noreply@blogger.com0tag:blogger.com,1999:blog-1677384167015568562.post-26228799284112777452012-12-15T15:04:00.001+09:002012-12-15T15:08:26.990+09:00Google Drive 共有ファイルをダウンロード<div style="text-align: center;">
どうやってGoogle drive の共有ファイルからダウンロードするのかわからない人にお教えします </div>
<div style="text-align: center;">
(^^)</div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
まずリングをクリックして、次の画面のようなが表示する。</div>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRfTEp9cHndRfyqVz8rxZz_LEpQU3nNNCFEx2iTL8FTQj78RluUgsYvQ7YUPBbGfH1TBMAokXF6wWvaIqQESiyvJXQTHJHG32UMD3tqlUgZ8ERviXYfFGPjB73JB4JLNcNbjSVjdCYfhbe/s1600/download2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="130" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRfTEp9cHndRfyqVz8rxZz_LEpQU3nNNCFEx2iTL8FTQj78RluUgsYvQ7YUPBbGfH1TBMAokXF6wWvaIqQESiyvJXQTHJHG32UMD3tqlUgZ8ERviXYfFGPjB73JB4JLNcNbjSVjdCYfhbe/s400/download2.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
画面の左上の「ファイル」をクリックして</div>
<div style="text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiA20NF1OVOSVttz6I65yTCMWyqHLs3ooSc_nJEvmRB3cy98AasQJVnBvkrEuSAW51psfrQD7xCZoZd-zHwJOfg6MFBu4jofBye7nbtTyKEtUTW17tK8Yf9nsw-D9lXSt6OM4Q0NAC-9DtM/s1600/download1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="162" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiA20NF1OVOSVttz6I65yTCMWyqHLs3ooSc_nJEvmRB3cy98AasQJVnBvkrEuSAW51psfrQD7xCZoZd-zHwJOfg6MFBu4jofBye7nbtTyKEtUTW17tK8Yf9nsw-D9lXSt6OM4Q0NAC-9DtM/s400/download1.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
んで、ファイルからメニューが表示する。そして、メニューの「ダウンロード」をクリックすると</div>
<div class="separator" style="clear: both; text-align: center;">
ダウンロードが始めます。</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
以上、不明な点があったらどうぞ質問お願いします。</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
Anonymoushttp://www.blogger.com/profile/18125797009643745575noreply@blogger.com0tag:blogger.com,1999:blog-1677384167015568562.post-19027096716820289392012-12-15T13:29:00.005+09:002013-01-06T15:44:56.201+09:00段ボールロボット<br />
<div>
<br /></div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6BNK0mfHJz9MoO7C8uQzkfm5AtYI1bT9Spzpzxkmw9LmxW1nYLgupgF82Sl5yDRPJdL5W-diNIrZj21tX3Rz9TVYmXaO-vEAF2q_XG4xg2LuMxpyusOqhO4lpW5xLAmAKmUucC2ynzzEU/s1600/robot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6BNK0mfHJz9MoO7C8uQzkfm5AtYI1bT9Spzpzxkmw9LmxW1nYLgupgF82Sl5yDRPJdL5W-diNIrZj21tX3Rz9TVYmXaO-vEAF2q_XG4xg2LuMxpyusOqhO4lpW5xLAmAKmUucC2ynzzEU/s1600/robot.png" /></a></div>
<br />
<div style="text-align: center;">
理大祭で展示した段ボールロボットです</div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
パソコンではこんな感じの画面です<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMxRSZCiHWgX4Ehx95uMNnA1M_HXocs5mDeKhsxF11mnzyvB3-pvzUhU9fSq4COMevec30mpAuz0G1BY9XwxQ2VJ1Rjq5HkaB4TAr1gdO5YTl__NC0ohZoNIKzUyyN2l59Mqeh008rICO2/s1600/console+app.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="179" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMxRSZCiHWgX4Ehx95uMNnA1M_HXocs5mDeKhsxF11mnzyvB3-pvzUhU9fSq4COMevec30mpAuz0G1BY9XwxQ2VJ1Rjq5HkaB4TAr1gdO5YTl__NC0ohZoNIKzUyyN2l59Mqeh008rICO2/s320/console+app.png" width="320" /></a></div>
<br /></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
コンソール画面に書いてある通り、j、k、lをキーボードから入力することによってロボットが回転したり、前進したりします。最初は押すときだけロボットが動き、キーボードから離れると勝手に止まるような設計しようと思いましたが、やり方よくわからなくてやめました (#>.<#)</div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
今回どうしてもおすすめしたのはこれ</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2HVT-eiQbi9oJ4ivNlKlF4ofUgf_t8GetHlZfJClktVH5HaCCdwnEmbVqaCwnYdjimr6_n5zKapQLMMlTwOO_f9sdUDXxtXR2h0sdHOxCH4Lt8a3c8d3IIUr_Aq4ps03oa1V6gDnUEMAV/s1600/bluetooth.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2HVT-eiQbi9oJ4ivNlKlF4ofUgf_t8GetHlZfJClktVH5HaCCdwnEmbVqaCwnYdjimr6_n5zKapQLMMlTwOO_f9sdUDXxtXR2h0sdHOxCH4Lt8a3c8d3IIUr_Aq4ps03oa1V6gDnUEMAV/s1600/bluetooth.png" /></a></div>
<div style="text-align: center;">
JY-MCU bluetooth - シリアル 無線通信モジュール</div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
日本ではあまり流行ってないようで、ビックカメラで探していたらものすごい高いしか売ってなくて、海外のサイトで購入しました。</div>
<div style="text-align: center;">
かなり評判の良いsellerなので、安心して購入できます。</div>
<div style="text-align: center;">
サイトは <a href="http://www.ebay.com/itm/JY-MCU-HC-06-V1-03-Bluetooth-Transeiver-RF-Module-Wireless-Serial-4p-Port-line-/261053366958">ここです</a> 英語のサイトですみません (><!)</div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<br />
接続の時はペアリングというパスワードみたいなものが画面に出てくると思います。</div>
<div style="text-align: center;">
次を入力すればよいです</div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
「 1234 」</div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
最後に出力ポートを確認すればマイコンにつなぐだけで使えます。</div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
ソースコードが欲しい人は以下のリングにて、ダウンロードしてください。<br />
<a href="https://doc-0c-ao-docs.googleusercontent.com/docs/securesc/misafpvofe45fuhe72rbpth5rls7tmpl/imspam8nt1hinc0vfliocguf1f017ekn/1357452000000/05404920801057170162/05404920801057170162/0B_eNoVzcHOuTUTdhMnVNY3pNVEU?e=download&nonce=i301hu30r6f1o&user=05404920801057170162&hash=veonjd2j2hftc0sbcb32d11kfqjdhnp9">ここをクリックし、ダウンロードします</a><br />
<br />
ただ単にパソコンでマイコンとシリアル通信がやりたい人には私が作ったとても<br />
<h3>
<b>シンプルなターミナル</b></h3>
が入っているので上記のリングにてダウンロードしてください。<br />
<br />
不明な点があったら気軽に質問してください<br />
どうぞよろしくお願いします</div>
Anonymoushttp://www.blogger.com/profile/18125797009643745575noreply@blogger.com0tag:blogger.com,1999:blog-1677384167015568562.post-74075991282761683762012-12-15T02:00:00.002+09:002012-12-15T02:03:23.470+09:00初めまして理大祭でみんなの力を集結し、作り上げたロボットをもっとたくさんの人見てもらいたい<br />
<br />
というきっかけでブログを始めました。<br />
<br />
ブログに全然初めてなので、改善するところを発見したらぜひ教えてください。<br />
<br />
その前に、まず自己紹介させてもらいます。<br />
<br />
私は日本人ではんく、純血なマレーシア人です。日本語を習得し始めたのはいま(2012年12月現時点)から3年8カ月 (正確過ぎるかなあ~) 2009年の4月から始めたので、まだまだ日本語は対してしゃべれないので、日本語も直していただけると嬉しいです。<br />
<br />
<br />
明日から理大祭のロボットに関する記事を書き始めるので<br />
<br />
よろしくお願いします<br />
<br />
<br />Anonymoushttp://www.blogger.com/profile/18125797009643745575noreply@blogger.com0