0

背景ストーリー:

ガレージドアオープナーに配線された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コードを投稿することができます。ご協力いただきありがとうございます。

4

1 に答える 1

0

私があなたの説明を理解していることから、ボタンを押すたびに回路をオフにする時間指定のタスクを除いて、すべてが整っています。

ボタンを押すたびにカウントダウンタイマーを開始すると、機能する可能性があります。http://developer.android.com/reference/android/os/CountDownTimer.htmlを参照してください

これが例です

new CountDownTimer(30000, 1000) { //30 seconds count-down

 public void onTick(long millisUntilFinished) {
     //no need to do anything here
 }

 public void onFinish() {
     turnOffCircuit(); 
 }
}.start();

Arduinoでクールなもの。昨日、実際に私の最初のArduinoキットを購入しました:)

于 2012-04-13T07:32:31.190 に答える