Bluetooth Communication error

Post your NXJ projects, project ideas, etc here!

Moderators: roger, 99jonathan, imaqine

Bluetooth Communication error

Postby bczm8703 » Tue Jan 08, 2013 7:24 am

hi.. i seems to be having error with the Bluetooth communication... the PC is able to send data to my NXT and the NXT is able to received it successfully.. but when the NXT is trying to send the data over to PC, the BufferedReader on the PC side seem to always be empty... need some help on this...

i am running on Window 7 PC and using Ecplise IDE


Code for PC
Code: Select all
public class C_Play extends JFrame {
   JButton[]  b = new JButton[28];
   String[] abc = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","Solve","Quit"};
   JLabel statusName = new JLabel();
   JLabel statusScore = new JLabel();
   JLabel word = new JLabel("Supercalifragilisticexpialidocious");
   int score=0;
   int wrong=0;
   int index=0;
   private Bluetooth btPlay=null;
   boolean b1=false;
   BufferedImage img = null;
   BufferedImage img1 = null;
   Image image = null;
   Timer t1;
   //boolean write=false;
   
   public C_Play(String st, Bluetooth newBT){
      btPlay=newBT;
      gui(st);   
      t1= new Timer(1000,new btRec());
      t1.start();
   }
   
    public void hangman(Graphics g, int mistake){
       
       image = new ImageIcon("bin/Images/hangman"+mistake+".gif").getImage();
      g.drawImage(image,70,60,null);
      
       
       
   }
   
    public void paint(Graphics g) {
       super.paint(g);
       System.out.println("In paint for "+index);
       String msg = btPlay.readMessage();
       System.out.println("paint: "+msg);
       if (msg!=null)
       {
          if(!b1){
              hangman(g,wrong);   
           }
          if (msg.equalsIgnoreCase("finally"))
          {
             t1.stop();
          }
          System.out.println("Received NXT: "+msg);   
       index++;
       }
       else
       {
          System.out.println("Exit paint");
          index++;
          return;
       }
       
    }
   

       
   
   
   public void gui(String st){
      
      setSize(500,600);
      setLocation(500,100);
        setTitle("Hangman - Play");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
        setResizable(false);
        Container c = getContentPane();
        c.setLayout(new BorderLayout());
       
       
        JPanel wordPanel = new JPanel();
        wordPanel.add(word,BorderLayout.CENTER);
        word.setFont(new Font("Arial",1,20));
       
        JPanel panel1 = new JPanel();
        panel1.setLayout(new GridLayout(1,7));
        for(int i=0;i<7;i++){
           b[i] = new JButton(abc[i]);
           panel1.add(b[i]);
       }
   
        JPanel panel2 = new JPanel();
        panel2.setLayout(new GridLayout(1,7));
        for(int i=7;i<14;i++){
            b[i] = new JButton(abc[i]);
            panel2.add(b[i]);
        }
       
        JPanel panel3 = new JPanel();
        panel3.setLayout(new GridLayout(1,7));
        for(int i=14;i<21;i++){
            b[i] = new JButton(abc[i]);
            panel3.add(b[i]);
        }
       
        JPanel panel4 = new JPanel();
        panel4.setLayout(new GridLayout(1,7));
        for(int i=21;i<28;i++){
            b[i] = new JButton(abc[i]);
            panel4.add(b[i]);
        }

       
        JPanel southPanel = new JPanel();
        southPanel.setLayout(new GridLayout(5,1));
        southPanel.add(wordPanel);
        southPanel.add(panel1);
        southPanel.add(panel2);
        southPanel.add(panel3);
        southPanel.add(panel4);
        c.add(southPanel,BorderLayout.SOUTH);
       
        JPanel status = new JPanel();
        status.setLayout(new GridLayout(1,2));
        status.setBorder(BorderFactory.createLineBorder(Color.black));
        status.setFont(new Font("Arial",1,15));
        statusName.setText("Name: "+st );
        statusScore.setText("Score: "+score);
        status.add(statusName);
        status.add(statusScore);
        c.add(status,BorderLayout.NORTH);
      
        ButtonHandler handler = new ButtonHandler();
        for(int i=0;i<28;i++){
           b[i].addActionListener(handler);
        
        }
     
       
 
   }


    class btRec implements ActionListener
    {

        public void actionPerformed(ActionEvent e)
        {
           
            repaint();
        }
    }
       public class ButtonHandler implements ActionListener{
          public void actionPerformed(ActionEvent e){
           if(e.getSource()==b[0]){//letter A
              b1 = true;
              score++;
              statusScore.setText("Score: "+score);
              btPlay.sendMessage("A");
             }
          else if(e.getSource()==b[1]){//letter B
             b1=false;
             wrong++;
             score--;
             statusScore.setText("Score: "+score);
             btPlay.sendMessage("B");
            
             }
          else if(e.getSource()==b[2]){//letter C
             btPlay.sendMessage("C");   
             }
          else if(e.getSource()==b[3]){//letter D
             btPlay.sendMessage("D");
             }
          else if(e.getSource()==b[4]){//letter E
             btPlay.sendMessage("E");
             }
          else if(e.getSource()==b[5]){//letter F
             btPlay.sendMessage("F");
             }
          else if(e.getSource()==b[6]){//letter G
             btPlay.sendMessage("G");
             }
          else if(e.getSource()==b[7]){//letter H
             btPlay.sendMessage("H");
             }
          else if(e.getSource()==b[8]){//letter I
             btPlay.sendMessage("I");
             }
          else if(e.getSource()==b[9]){//letter J
             btPlay.sendMessage("J");
             }
          else if(e.getSource()==b[10]){//letter K
             btPlay.sendMessage("K");
             }
          else if(e.getSource()==b[11]){//letter L
             btPlay.sendMessage("L");
             }
          else if(e.getSource()==b[12]){//letter M
             btPlay.sendMessage("M");
             }
          else if(e.getSource()==b[13]){//letter N
             btPlay.sendMessage("N");
             }
          else if(e.getSource()==b[14]){//letter O
             btPlay.sendMessage("O");
             }
          else if(e.getSource()==b[15]){//letter P
             btPlay.sendMessage("P");
             }
          else if(e.getSource()==b[16]){//letter Q
             btPlay.sendMessage("Q");
             }
          else if(e.getSource()==b[17]){//letter R
             btPlay.sendMessage("R");
             }
          else if(e.getSource()==b[18]){//letter S
             btPlay.sendMessage("S");
             }
          else if(e.getSource()==b[19]){//letter T
             btPlay.sendMessage("T");
             }
          else if(e.getSource()==b[20]){//letter U
             btPlay.sendMessage("U");
             }
          else if(e.getSource()==b[21]){//letter V
             btPlay.sendMessage("V");
             }
          else if(e.getSource()==b[22]){//letter W
             btPlay.sendMessage("W");
             }
          else if(e.getSource()==b[23]){//letter X
             btPlay.sendMessage("X");
             }
          else if(e.getSource()==b[24]){//letter Y
             btPlay.sendMessage("Y");
             }
          else if(e.getSource()==b[25]){//letter Z
             btPlay.sendMessage("Z");
             }
          else if(e.getSource()==b[26]){//Solve
            
         }
          else if(e.getSource()==b[27]){//Quit
             btPlay.sendMessage("-1");
             btPlay.terminateBT();
             System.exit(0);
             
         }
             
          }
          
       
   }
       
}


PC Bluetooth codes

Code: Select all

import lejos.pc.comm.*;
import java.io.*;
import java.io.DataOutputStream;
import java.io.IOException;
public class Bluetooth {
   NXTConnector conn = new NXTConnector();
   DataOutputStream dos=null;
   boolean  connected=false;
   DataInputStream dis=null;
   public Bluetooth() {
      conn.addLogListener(new NXTCommLogListener(){

         public void logEvent(String message) {
            System.out.println("BTSend Log.listener: "+message);
            
         }

         public void logEvent(Throwable throwable) {
            System.out.println("BTSend Log.listener - stack trace: ");
             throwable.printStackTrace();
            
         }
         
      }
      );
      // TODO Auto-generated constructor stub
   }
   public boolean connectBT()
   {
      
      connected = conn.connectTo("btspp://");
      
      return connected;
   }
   public void sendMessage(String msg)
   {
      //byte[]sendMsg;
      //sendMsg=msg.getBytes();
      if(!connected)
      {
         System.out.println("No NXT connected");
         return;
      }
      dos = new DataOutputStream(conn.getOutputStream());
      try
      {
         msg=msg+"\n";
         dos.writeUTF(msg);
         dos.flush();
         dos.close();
      }
      catch (IOException ioe)
      {
         System.out.println("IO Exception writing bytes:");
         System.out.println(ioe.getMessage());
         return;
      }
   }
   @SuppressWarnings("deprecation")
   public String readMessage()
   {
      
      String msg="";
      dis= new DataInputStream(conn.getInputStream());
      BufferedReader pcBr = new BufferedReader(new InputStreamReader(dis));
      
      try
      {
         if(pcBr.ready())
         {
            msg=pcBr.readLine();
            System.out.println("Bluetooth: "+msg);
            
            dis.close();
            pcBr.close();
         }
         else
         {
            System.out.println("no data");
            dis.close();
            pcBr.close();
         }
         
      }
      catch(IOException ioe)
      {
         System.out.println("IO Exception reading bytes:");
         System.out.println(ioe.getMessage());
         return "-1";
      }
      return msg;
   }
   public void terminateBT()
   {
      try
      {
         conn.close();
      }
      catch(IOException ioe)
      {
         System.out.println("Error in closing connection");
         System.out.println(ioe.getMessage());
      }
   }

}



NXT Codes
Code: Select all
public class hMWOBT {

   /**
    * @param args
    */
   /**
    * @param args
    */
   public static void main(String[] args) {
      // TODO Auto-generated method stub
      int PENSPEED_X = 100; // motor power for arm when drawing
      int PENSPEED_D = 10;// MOTOR POWER FOR DIAGONAL LINES
      String btMsg="A";
      int PENSPEED_Y = -20; // motor power for wheels when drawing
      int SPEEDFRONT = 40; // motor power for wheels when drawing
      int SPEEDBACK = 30; // motor power for wheels when drawing
      BTNXT bt = new BTNXT();
      int xStep = 2;
      int yStep = 20;
      boolean enterWrite = false;
      boolean writeDone=true;
      int front = 8;
      int back = 8;
      // int startX,startY;
      // HORIZONTAL = 7 VERTICAL = 7
      //0 A = DBBBBBBBUFFFFFFFDRRRRRRRBBBBBBBUFFFFDLLLLLLLUBBBB
      //1 B = DBBBBBBBUFFFFFFFDRRRRRRRBBBLLLLLLLURRRRRRRDBBBBLLLLLLLU
      //2 C = DRRRRRULLLLLDBBBBBBBRRRRRRRULLLLLLL
      //3 D = DRRRRRRRBBBBBBBLLLLLLLFFFFFFFUBBBBBBB
      //4 E = DRRRRRRRULLLLLLLDBBBRRRRRULLLLLDBBBBRRRRRRRULLLLLLL
      //5 F = DRRRRRRRULLLLLLLDBBBRRRRRULLLLLDBBBBU
      //6 G = DRRRRRRULLLLLLDBBBBBBBRRRRRRRFFFLLLLLURRRRRBBBLLLLLLL // LOOK ABIT WEIRD
      //7 H = DBBBBBBBUFFFFDRRRRRRRUFFFDBBBBBBBULLLLLLL
      //8 I = DRRRRRRRULLLLLDBBBBBBBULLDRRRRRRRULLLLLLL
      //9 J = DRRRRRRRULLLLLDBBBBBBBUDLLLLLUDFFFFUBBBBRRRRR
      //10 K = RRRRRRRRRRDVVBVVBVBVBVBVBVBUDRRRRRRRRBBBBULLLLLLLLDFFFFFFFFFFFULLBBBBBBBBBBB
      //11 L = DBBBBBBBBBRRRRRRRULLLLLL
      //12 M = DBBBBBBBUFFFFFFFDRRRRRRUDBBBUFFFDRRRRRBBBBBBULLLLLLLLLL
      //13 N = DCBCBCBCBCBCBCBFUDFFFFFFFFU // NOT COMPLETE
      //14 O = DRRRRRRRRUDBBBBBBBUDLLLLLLLLUDFFFFFFFFURRRRRDBBBBBBBBULLLLL
      //15 P = DRRRRRRUDBBBBUDLLLLLLUFFFFDBBBBBBBBU
      //16 Q = DRRRRRRRRUDBBBBBBBUDLLLLLLLLUDFFFFFFFFURRRRRRBBBBBBDBCBCBCBU // LOOK ABIT WEIRD
      //17 R = DRRRRRRUDBBBBUDLLLLLLUFFFFDBBBBBBBBURRRRRRRDFFVVFVVFVVFVVFURBBBBBBB // LOOK ABIT WEIRD
      //18 S = RRRRRRRDLLLLLLLBBBBRRRRRRRBBBBLLLLLLLU
      //19 T = DRRRRRRRULLLLLDBBBBBBBULL
      //20 U = DBBBBBBBRRRRRRRFFFFFFFULLLLLLLBBBBBBB
      //21 V = RRRRDLLBLBLBBLBBLBBLBBLBLFFLFFLFFLFFLFLFLU //  LOOK ABIT WEIRD
      //22 W = DBBBBBBBRRRRRRUDFFFFUBBBBDRRRRFFFFFFFULLLLLLLLLLLBBBBBBB
      //23 X = RRRRRRRRRDVVBVVBVBVBVBVBBVBVBURRRRRRRRRFDVVFVFVFVFVFVFVVFVFURBBBBBBBBB
      //24 Y = RRRRRRRRRDVVBVVBVBVBVBVBBVBVBURRRRRRRRRFVVFVFVFVDFVFVFVVFVFURRBBBBBBBBBB
      //25 Z = RRDRRRRRRRRVVBVVBVBVBVBVBBVBVBUDRRRRRRRRRRULLLLLLLLLLLL
      bt.connect();
      
      String sequence="";
      //btMsg="I";
      //btMsg.toString();
      //btMsg=btMsg.substring(2);
      while (!btMsg.equalsIgnoreCase("-1"))
      {
         
         
         btMsg=bt.receiveBTMessage();
         btMsg=btMsg.substring(2);
         btMsg.toUpperCase();
         
         /*System.out.println(btMsg);
         if (btMsg.equalsIgnoreCase("a"))
         {
            bt.sendBTMessage("1");
         }
         else if (btMsg.equalsIgnoreCase("b"))
         {
            bt.sendBTMessage("2");
         }
         else if (btMsg.equalsIgnoreCase("c"))
         {
            bt.sendBTMessage("3");
         }
         else{
            bt.sendBTMessage("NXT sending");
         }*/
         
         //LCD.drawString(btMsg, 0, 10);
         switch(btMsg)
         {
         case "A":
            btMsg="-2";
            sequence="DBBBBBBBUFFFFFFFDRRRRRRRBBBBBBBUFFFFDLLLLLLLLLUBBBBBBBB";
            break;
         case "B":
            btMsg="-2";
            sequence="DBBBBBBBBBUFFFFFFFFFDRRRRRRRBBBBLLLLLLLLURRRRRRRRDBBBBBLLLLLLLURBBBB";
            break;
         case "C":
            btMsg="-2";
            sequence = "DRRRRRRRULLLLLLLDBBBBBBBRRRRRRRULLLLLLLBBBB";
            break;
         case "D":
            btMsg="-2";
            sequence = "DRRRRRRRRBBBBBBBBLLLLLLLLFFFFFFFFUBBBBBBBBBBBB";
            break;
         case "E":
            btMsg="-2";
            sequence = "DRRRRRRRULLLLLLLDBBBRRRRRULLLLLDBBBBRRRRRRRULLLLLLLBBBB";
            break;
         case "F":
            btMsg="-2";
            sequence = "DRRRRRRRULLLLLLLDBBBRRRRRULLLLLDBBBBUBBBB";
            break;
         case "G":
            btMsg="-2";
            sequence = "DRRRRRRULLLLLLDBBBBBBBRRRRRRRFFFLLLLLURRRRRBBBLLLLLLLBBBB";
            break;   
         case "H":
            btMsg="-2";
            sequence = "DBBBBBBBBUFFFFFDRRRRRRRUFFFDBBBBBBBBULLLLLLLBBBB";
            break;
         case "I":
            btMsg="-2";
            sequence = "DRRRRRRRULLLLLDBBBBBBBULLDRRRRRRRULLLLLLLBBBB";
            break;
         case "J":
            btMsg="-2";
            sequence = "DRRRRRRRULLLLLDBBBBBBBUDLLLLLUDFFFFUBBBBRRRRBBBB";
            break;
         case "K":
            btMsg="-2";
            sequence = "RRRRRRRRRRDVVBVVBVBVBVBVBUDRRRRRRRRBBBBULLLLLLLLDFFFFFFFFFFFULLBBBBBBBBBBBBBBB";
            break;
         case "L":
            btMsg="-2";
            sequence="DBBBBBBBBBRRRRRRRULLLLLLLLBBBB";
            break;
         case "M":
            btMsg="-2";
            sequence="DBBBBBBBUFFFFFFFDRRRRRRUDBBBUFFFDRRRRRBBBBBBULLLLLLLLLLBBBB";
            break;
         case "N":
            btMsg="-2";
            //sequence="DBBBBBBBBURRRRRRRRRRRDFVVFVVFVFVFVFVFVFVFURRRRRRRRDBBBBBBBBULLLLLLLLBBBB";
            sequence="RRRRRRRRRVVBVVBVBVBVBVBBVBVBRRRRRRRRRRRRFDVVFVVFVFVFVFVFVVFVFUDRBBBBBBBBBUFFFFFFFFFRRRRRRRRRRDBBBBBBBBBULLLLLLLLLLLBBBB";
            break;   
         case "O":
            btMsg="-2";
            //sequence="RRRRDLLBLBLBBLBBLBBLBBLUDFFFFFFFFFFFUDRRRRRRBBBBBBBBUDLLLLLLUBBBB";
            sequence="RRRRRRRRRVVBVVBVBVBVBVBBVBVBRRRRRRRRRRRRFDVVFVVFVFVFVFVFVVFVFUDRBBBBBBBBBUFFFFFFFFFDRRRRRRRRRRBBBBBBBBBLLLLLLLLLLLUBBBB";
            break;   
         case "P":
            btMsg="-2";
            sequence="DRRRRRRRRUDBBBBUDLLLLLLLLUFFFFDBBBBBBBBUBBBB";
            break;   
         case "Q":
            btMsg="-2";
            //sequence="DRRRRRRRRUDBBBBBBBUDLLLLLLLLUDFFFFFFFFURRRRRRBBBBBBDBCBCBCBUBBBB";
            sequence="RRRRRRRRRVVBVVBVBVBVBVBBVBVBRRRRRRRRRRRRFDVVFVVFVFVFVFVUFFFFFLLLLDBBBBBBBBUFFFFFFFFDRRRRRRRRRRBBBBBBBBLLLLLLLLLLLUBBBB";
            break;   
         case "R":
            btMsg="-2";
            sequence="DRRRRRRRRUDBBBBUDLLLLLLLLUFFFFDBBBBBBBBURRRRRRRDFFVVFVVFVVFVVFURBBBBBBBBBBB";
            break;   
         case "S":
            btMsg="-2";
            sequence="RRRRRRRDLLLLLLLBBBBRRRRRRRBBBBLLLLLLLUBBBB";
            break;   
         case "T":
            btMsg="-2";
            sequence="DRRRRRRRRRULLLLLLDBBBBBBBULLLLBBBB";
            break;
         case "U":
            btMsg="-2";
            sequence="DBBBBBBBRRRRRRRFFFFFFFULLLLLLLBBBBBBBBBBB";
            break;
         case "V":
            btMsg="-2";
            sequence="RRRRDLLBLBLBBLBBLBBLBBLBLFFLFFLFFLFFLFLFLFLUFRRRRRRRRRRRRBBBBBBBBBBBBBB";
            break;
         case "W":
            btMsg="-2";
            sequence="DBBBBBBBRRRRRRUDFFFFUBBBBDRRRRFFFFFFFULLLLLLLLLLLBBBBBBBBBBB";
            break;
         case "X":
            btMsg="-2";
            sequence="RRRRRRRRRDVVBVVBVBVBVBVBBVBVBURRRRRRRRRFDVVFVFVFVFVFVFVVFVFURBBBBBBBBBBBBB";
            break;
         case "Y":
            btMsg="-2";
            sequence="RRRRRRRRRDVVBVVBVBVBVBVBBVBVBURRRRRRRRRFVVFVFVFVDFVFVFVVFVFURRRBBBBBBBBBBBBBBB";
            break;   
         case "Z":
            btMsg="-2";
            sequence="RRDRRRRRRRRVVBVVBVBVBVBVBBVBVBUDRRRRRRRRRRULLLLLLLLLBBBB";
            break;   
         case "-1":
            System.exit(0);
            break;
         }
         
         if (sequence.length()>5)
         {
            //sequence = "RRRRRRRRRDVVBVVBVBVBVBVBBVBVBURRRRRRRRRFVVFVFVFVDFVFVFVVFVFURRBBBBBBBBBB";
            for (int i = 0; i < sequence.length(); i++) {
               char direction = sequence.charAt(i);
               if (direction == 'L') {
                  Motor.B.setSpeed(PENSPEED_X);
                  Motor.B.rotate(xStep);
               }
               
               else if (direction == 'R') {
                  Motor.B.setSpeed(PENSPEED_X);
                  Motor.B.rotate((xStep * -1));
               }
               
               else if (direction == 'U') {
                  Motor.A.setSpeed(PENSPEED_Y);
                  Motor.A.rotate(-1 * yStep);
               }
               
               else if (direction == 'D') {
                  Motor.A.setSpeed(PENSPEED_Y);
                  Motor.A.rotate(yStep);
               }

               else if (direction == 'F') {
                  Motor.C.setSpeed(SPEEDFRONT);
                  Motor.C.rotate(-1 * front);
               }

               else if (direction == 'B') {
                  Motor.C.setSpeed(SPEEDBACK);
                  Motor.C.rotate(back);

               } else if (direction == 'V') { // diagonal left

                  Motor.B.setSpeed(PENSPEED_D);
                  Motor.B.rotate(xStep);

               } else if (direction == 'C') { // diagonal right

                  Motor.B.setSpeed(PENSPEED_D);
                  Motor.B.rotate(xStep * -1);
               }

               Delay.msDelay(500);
               
            }
            bt.sendBTMessage("finally");
         }
         
      }// end while
      
      


NXT Bluetooth code

Code: Select all
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStreamReader;

import lejos.nxt.LCD;
import lejos.nxt.comm.BTConnection;
import lejos.nxt.comm.Bluetooth;

public class BTNXT {
   private String message;
   private BTConnection btc;
   private DataInputStream nxtDis;
   private DataOutputStream nxtDos;
   public BTNXT()
   {
      
      
      
   }
   public boolean connect()
   {
      btc=Bluetooth.waitForConnection();
      if (btc!=null)return true;
      else
         {
         System.out.println("Connected");
         return false;
         }
      
   }
   public void sendBTMessage(String msg)
   {
      try
      {
         if (btc!=null)
         {
            
            nxtDos=btc.openDataOutputStream();
            msg=msg+"\n";
            nxtDos.writeUTF(msg);
            nxtDos.flush();
            nxtDos.close();
            
         }
      }
      catch (Exception e)
      {
         System.out.println("Error found: "+e.getMessage());
      }
      
   }
   public String receiveBTMessage()
   {
      try
      {
         if (btc!=null)
         {
            
            nxtDis=btc.openDataInputStream();
            BufferedReader nxtBR = new BufferedReader(new InputStreamReader(nxtDis));
            
            message=nxtBR.readLine();
            nxtDis.close();
            return message;
         }
      }
      catch (Exception e)
      {
         System.out.println("Error found:"+e.getMessage());
      }
      
      return message;
   }

}

bczm8703
New User
 
Posts: 15
Joined: Fri Sep 21, 2012 7:58 am

Return to NXJ Projects

Who is online

Users browsing this forum: No registered users and 2 guests

more stuff