背景ストーリー:
ガレージドアオープナーに配線されたAsyncLabsのWishieldを備えたArduinoがあります。Arduinoはボタン付きのウェブサイトを表示します。ボタンを押すと、ボタンの新しいステータス(オンまたはオフ)でページが更新されます。唯一の問題は、ピン(および関連付けによってガレージドアのリモコン)が常にオンに設定されていることです。このWebページからデータを取得し、アプリからボタンを「プッシュ」するAndroidアプリを作成しました。
問題:
Arduinoと私のAndroidアプリのすべてが正常に動作します。必要なのは、アプリ内のある種のロジックです。ロジックを実装する方法や場所について頭を悩ませることはできません。ボタンを一度押すとドアが開き、回路が開いてから回路が閉じられるようにしたいと思います。現在、次のように機能します。
-------------------------------------------------------------------
Door | Circuit
closed | off -- default: door closed circuit off
open | on -- button pushed 1st time: door open circuit on
open | off -- button pushed 2nd time: door open circuit off
closed | on -- button pushed 3rd time: door closed circuit on
closed | off -- button pushed 4th time: door closed circuit off
私はそれがこのように機能するはずだと思います:
---------------------------------------------------------------------
Door | Circuit
closed | off -- default: door closed circuit off
open | on -- button pushed 1st time: door open circuit on
open | off -- after a set time app automatically closes circuit
closed | on -- button pushed 2nd time: door closed circuit on
closed | off -- after a set time app automatically closes circuit
関連コード:
//Http Task
private class httpTask extends AsyncTask<Void, Void, Void> {
HttpResponse responseGet = null;
HttpEntity resEntityGet = null;
@Override
protected void onPreExecute() {
EditText01 = (TextView) findViewById(R.id.EditText01);
GetMethod test = new GetMethod();
String returned;
try {
returned = test.getInternetData();
if (pinCheck == 2){
if(returned.toString().contains("\"Opener 2\">Door Closed")){ //"\"Opener 2\">Door Closed"
Toast.makeText(getBaseContext(), "Opening the door.", Toast.LENGTH_SHORT).show();
findViewById(R.id.button1).setBackgroundResource(R.drawable.dooropen);
}
if(returned.toString().contains("\"Opener 2\">Door Open")){
Toast.makeText(getBaseContext(), "Closing the door.", Toast.LENGTH_SHORT).show();
findViewById(R.id.button1).setBackgroundResource(R.drawable.doorclosed);
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
dialog = new ProgressDialog(GarageDoorOpenerActivity.this);
dialog.setMessage("Working");
dialog.show();
}
@Override
protected Void doInBackground(Void... params) {
try {
HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet(customURL[0] + URL + customURL[1] + pin);
responseGet = client.execute(get);
resEntityGet = responseGet.getEntity();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void params) {
if(dialog.isShowing())
dialog.dismiss();
if (resEntityGet != null) {
Toast.makeText(getBaseContext(), "Done. ", Toast.LENGTH_SHORT).show();
resEntityGet = null;
}
}
}
public class GetMethod {
public String getInternetData() throws Exception{
BufferedReader in = null;
String data = null;
try{
HttpClient client = new DefaultHttpClient();
URI url = new URI(customURL[0] + URL + customURL[1]); //customURL[0] + URL + customURL[1]
HttpGet request = new HttpGet();
request.setURI(url);
HttpResponse response = client.execute(request);
in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
StringBuffer sb = new StringBuffer("");
String l = "";
String nl = System.getProperty("line.separator");
while ((l = in.readLine()) !=null){
sb.append(l + nl);
}
in.close();
data = sb.toString();
return data;
} finally{
if (in !=null){
try{
in.close();
return data;
} catch (Exception e){
e.printStackTrace();
}
}
}
}
誰かがこれの独自のバージョンを作りたいなら、私は完全なAndroidとArduinoコードを投稿することができます。ご協力いただきありがとうございます。