通过蓝牙+ arduino传输时只接收244和245号码

时间:2016-09-11 15:50:48

标签: android bluetooth arduino

遵循我的Arduino代码:

#include <SoftwareSerial.h>
    int bluetoothRx = 1;
    int bluetoothTx = 2;

    int led =13;

    SoftwareSerial bluetooth(bluetoothTx, bluetoothRx);

    void setup()
    {
    TCCR2B = TCCR2B & 0b11111000 | 0x01;
    Serial.begin(9600);
    pinMode(led,OUTPUT);
    bluetooth.begin(9600);


    }

    void loop()
    {

    if(bluetooth.available())
    {
    digitalWrite(led, HIGH);
    Serial.println((int)(bluetooth.read()));
    }

    }

这是我的Android代码:

MainActivity.java

公共类MainActivity扩展了AppCompatActivity         实现NavigationView.OnNavigationItemSelectedListener {

private Button connect_bluetooth, lamp2, lamp1, fan1;
private boolean lampstate = false, fanstate = false;
private static final int REQUEST_CONNECT_DEVICE = 1;
private static final int REQUEST_ENABLE_BT = 2;
private boolean connectStat = false;
protected static final int MOVE_TIME = 80;
private AlertDialog aboutAlert;
private View aboutView;
private View controlView;
private View.OnClickListener myClickListener;
private ProgressDialog myProgressDialog;
private Toast failToast;
private Handler mHandler;
private BluetoothAdapter mBluetoothAdapter = null;
private BluetoothSocket btSocket = null;
private OutputStream outStream = null;
private ConnectThread mConnectThread = null;
private String deviceAddress = null;
private static final UUID SPP_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
        }
    });

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
            this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawer.setDrawerListener(toggle);
    toggle.syncState();

    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(this);
    LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    aboutView = inflater.inflate(R.layout.aboutview, null);
    controlView = inflater.inflate(R.layout.activity_main, null);
    controlView.setKeepScreenOn(true);
    myProgressDialog = new ProgressDialog(this);
    failToast = Toast.makeText(this, R.string.failedToConnect, Toast.LENGTH_SHORT);
    mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            if (myProgressDialog.isShowing()) {
                myProgressDialog.dismiss();
            }

            if (msg.what == 1) {

                connectStat = true;
                write(10);
            } else {

                failToast.show();
            }
        }
    };

    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setView(aboutView).setCancelable(true).setTitle(getResources().getString(R.string.app_name) + " " + getResources().getString(R.string.appVersion)).setIcon(R.drawable.ic_menu_camera).setPositiveButton("Yes", (DialogInterface.OnClickListener) myClickListener);
    aboutAlert = builder.create();
    mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    if (mBluetoothAdapter == null) {
        Toast.makeText(this, R.string.no_bt_device, Toast.LENGTH_LONG).show();
        //finish();
        return;
    }

    if (!mBluetoothAdapter.isEnabled()) {
        Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
        startActivityForResult(enableIntent, REQUEST_ENABLE_BT);
    }

    connect_bluetooth = (Button) findViewById(R.id.connect_button);
    connect_bluetooth.setOnClickListener(new View.OnClickListener() {


        @Override
        public void onClick(View v) {
            if (connectStat) {
                // Attempt to disconnect from the device
                disconnect();
            } else {
                // Attempt to connect to the device
                connect();
            }
        }
    });
    lamp1 = (Button) findViewById(R.id.lamp1);
    lamp1.setOnClickListener(new View.OnClickListener() {


        @Override
        public void onClick(View arg0) {

            if (lampstate) {
                write(102);
                lampstate = false;
                toast1("lamp1 is Off" + 102);
            } else {
                write(101);
                lampstate = true;
                toast1("lamp1 is On" + 101);
            }
        }
    });

    lamp2 = (Button) findViewById(R.id.lamp2);
    lamp2.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {

            if (lampstate) {
                write(104);

                toast1("lamp2 is Off"  + 103);
                lampstate = false;
            } else {
                write(103);

                toast1("lamp2 is ON" + 103);
                lampstate = true;
            }
        }
    });

    fan1 = (Button) findViewById(R.id.Fan1);
    fan1.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {

            if (fanstate) {

                write(106);
                fanstate = false;
                toast1("Fan is Off" + 106);
            } else {
                write(105);

                toast1("Fan is ON" + 105);
                fanstate = true;
            }


        }
    });


}

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
        case REQUEST_CONNECT_DEVICE:
            if (resultCode == this.RESULT_OK) {
                myProgressDialog = ProgressDialog.show(this, getResources().getString(R.string.pleaseWait), getResources().getString(R.string.makingConnectionString), true);
                deviceAddress = data.getExtras().getString(DeviceListActivity.EXTRA_DEVICE_ADDRESS);
                mConnectThread = new ConnectThread(deviceAddress);
                mConnectThread.start();

            } else {
                Toast.makeText(this, R.string.macFailed, Toast.LENGTH_SHORT).show();
            }
            break;
        case REQUEST_ENABLE_BT:
            if (resultCode == this.RESULT_OK) {
            } else {
                Toast.makeText(this, R.string.bt_not_enabled_leaving, Toast.LENGTH_SHORT).show();
                finish();
            }
    }
}

public void write(int data) {
    if (outStream != null) {
        try {
            outStream.write(data);
        } catch (IOException e) {
        }
    }
}

public void emptyOutStream() {
    if (outStream != null) {
        try {
            outStream.flush();
        } catch (IOException e) {
        }
    }
}

public void connect() {
    Intent serverIntent = new Intent(this, DeviceListActivity.class);
    startActivityForResult(serverIntent, REQUEST_CONNECT_DEVICE);
}

public void disconnect() {
    if (outStream != null) {
        try {
            outStream.close();
            connectStat = false;

        } catch (IOException e) {
        }
    }
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main, menu);
    return true;
}


@Override
public void onResume() {
    super.onResume();

}

@Override
public void onDestroy() {
    emptyOutStream();
    disconnect();
    super.onDestroy();
}

public void toast1(String s1) {
    Toast.makeText(this, s1, Toast.LENGTH_SHORT).show();
}

@Override
public void onBackPressed() {
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    if (drawer.isDrawerOpen(GravityCompat.START)) {
        drawer.closeDrawer(GravityCompat.START);
    } else {
        super.onBackPressed();
    }
}


@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    switch (item.getItemId()) {
        case R.layout.aboutview:
            aboutAlert.show();
            return true;
    }
    return false;
}

@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
    // Handle navigation view item clicks here.
    int id = item.getItemId();

    if (id == R.id.nav_camera) {
        // Handle the camera action
    } else if (id == R.id.nav_gallery) {

    } else if (id == R.id.nav_slideshow) {

    } else if (id == R.id.nav_manage) {

    } else if (id == R.id.nav_share) {

    } else if (id == R.id.nav_send) {

    }

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    drawer.closeDrawer(GravityCompat.START);
    return true;
}


public class ConnectThread extends Thread {
    private String address;
    private boolean connectionStatus;
    private BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); ;

    ConnectThread(String MACaddress) {
        address = MACaddress;
        connectionStatus = true;
    }

    public void run() {
        try {
            BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);
            try {
                btSocket = device.createRfcommSocketToServiceRecord(SPP_UUID);
            } catch (IOException e) {
                connectionStatus = false;
            }
        } catch (IllegalArgumentException e) {
            connectionStatus = false;
        }
        mBluetoothAdapter.cancelDiscovery();
        try {
            btSocket.connect();
        } catch (IOException e1) {
            try {
                btSocket.close();
            } catch (IOException e2) {
            }
        }
        try {
            outStream = btSocket.getOutputStream();
        } catch (IOException e2) {
            connectionStatus = false;
        }
        if (connectionStatus) {
            mHandler.sendEmptyMessage(1);
        } else {
            mHandler.sendEmptyMessage(0);
        }
    }
}

}

DeviceList.java

public class DeviceListActivity extends Activity{

// Return Intent extra
public static String EXTRA_DEVICE_ADDRESS = "device_address";

// Member fields
private BluetoothAdapter mBtAdapter;
private ArrayAdapter<String> mPairedDevicesArrayAdapter;
private ArrayAdapter<String> mNewDevicesArrayAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Setup the window
    requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
    setContentView(R.layout.device_list);

    // Set result CANCELED incase the user backs out
    setResult(Activity.RESULT_CANCELED);

    // Initialize the button to perform device discovery
    Button scanButton = (Button) findViewById(R.id.button_scan);
    scanButton.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            doDiscovery();
            v.setVisibility(View.GONE);
        }
    });
    mPairedDevicesArrayAdapter = new ArrayAdapter<String>(this, R.layout.device_name);
    mNewDevicesArrayAdapter = new ArrayAdapter<String>(this, R.layout.device_name);
    ListView pairedListView = (ListView) findViewById(R.id.paired_devices);
    pairedListView.setAdapter(mPairedDevicesArrayAdapter);
    pairedListView.setOnItemClickListener(mDeviceClickListener);

    // Find and set up the ListView for newly discovered devices
    ListView newDevicesListView = (ListView) findViewById(R.id.new_devices);
    newDevicesListView.setAdapter(mNewDevicesArrayAdapter);
    newDevicesListView.setOnItemClickListener(mDeviceClickListener);

    // Register for broadcasts when a device is discovered
    IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
    this.registerReceiver(mReceiver, filter);

    // Register for broadcasts when discovery has finished
    filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
    this.registerReceiver(mReceiver, filter);

    // Get the local Bluetooth adapter
    mBtAdapter = BluetoothAdapter.getDefaultAdapter();

    // Get a set of currently paired devices
    Set<BluetoothDevice> pairedDevices = mBtAdapter.getBondedDevices();

    // If there are paired devices, add each one to the ArrayAdapter
    if (pairedDevices.size() > 0) {
        findViewById(R.id.title_paired_devices).setVisibility(View.VISIBLE);
        for (BluetoothDevice device : pairedDevices) {
            mPairedDevicesArrayAdapter.add(device.getName() + "\n" + device.getAddress());
        }
    } else {
        String noDevices = getResources().getText(R.string.none_paired).toString();
        mPairedDevicesArrayAdapter.add(noDevices);
    }
}

@Override
protected void onDestroy() {
    super.onDestroy();

    // Make sure we're not doing discovery anymore
    if (mBtAdapter != null) {
        mBtAdapter.cancelDiscovery();
    }

    // Unregister broadcast listeners
    this.unregisterReceiver(mReceiver);
}

/**
 * Start device discover with the BluetoothAdapter
 */
private void doDiscovery() {

    // Indicate scanning in the title
    setProgressBarIndeterminateVisibility(true);
    setTitle(R.string.scanning);

    // Turn on sub-title for new devices
    findViewById(R.id.title_new_devices).setVisibility(View.VISIBLE);

    // If we're already discovering, stop it
    if (mBtAdapter.isDiscovering()) {
        mBtAdapter.cancelDiscovery();
    }

    // Request discover from BluetoothAdapter
    mBtAdapter.startDiscovery();
}

// The on-click listener for all devices in the ListViews
private OnItemClickListener mDeviceClickListener = new OnItemClickListener() {
    public void onItemClick(AdapterView<?> av, View v, int arg2, long arg3) {
        // Cancel discovery because it's costly and we're about to connect
        mBtAdapter.cancelDiscovery();

        // Get the device MAC address, which is the last 17 chars in the View
        String info = ((TextView) v).getText().toString();
        try {
            // Attempt to extract a MAC address
            String address = info.substring(info.length() - 17);

            // Create the result Intent and include the MAC address
            Intent intent = new Intent();
            intent.putExtra(EXTRA_DEVICE_ADDRESS, address);

            // Set result and finish this Activity
            setResult(Activity.RESULT_OK, intent);
            finish();
        }catch (IndexOutOfBoundsException e) {
            // Extraction failed, set result and finish this Activity
            setResult(Activity.RESULT_CANCELED);
            finish();
        }
    }
};

// The BroadcastReceiver that listens for discovered devices and
// changes the title when discovery is finished
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();

        // When discovery finds a device
        if (BluetoothDevice.ACTION_FOUND.equals(action)) {
            // Get the BluetoothDevice object from the Intent
            BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
            // If it's already paired, skip it, because it's been listed already
            if (device.getBondState() != BluetoothDevice.BOND_BONDED) {
                mNewDevicesArrayAdapter.add(device.getName() + "\n" + device.getAddress());
            }
        // When discovery is finished, change the Activity title
        } else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
            setProgressBarIndeterminateVisibility(false);
            setTitle(R.string.select_device);
            if (mNewDevicesArrayAdapter.getCount() == 0) {
                String noDevices = getResources().getText(R.string.none_found).toString();
                mNewDevicesArrayAdapter.add(noDevices);
            }
        }
    }
};

}

我正在使用Arduino Uno并试图通过串口监视器波特9600/4800看到传递的消息和所有其他但我可以看到从android到arduino的传递号码

0 个答案:

没有答案