Arduino Bluetooth probléma

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Válasz küldése
Avatar
FBalazs
DrótVégénSzéndarab
Hozzászólások: 23
Csatlakozott: 2012. december 24. hétfő, 7:00

Arduino Bluetooth probléma

Hozzászólás Szerző: FBalazs »

Sziasztok!

Elnézést, lehet nem ide tartozik, de nem tudtam mihez forduljak a problémámmal.
Bluetoothon keresztül szeretném vezérelni az Arduino-m. Nem is volt semmi probléma. Az Arduinora egy egyszerű négy pin-es bluetooth panelt csatlakoztattam, a gépemre pedig bedugtam az usb sticket. Letöltöttem a TeraTerm 4.80-at amivel tökéletesen tudtam kezelni a robotot.

Most jön a de. A TeraTerm nem kezel egyszerre több billentyűlenyomást, így az autómmal (mert hogy távirányítású autóról van szó) nem tudtam egyszerre kanyarodni és gázt adni. Mivel Java-ban eléggé otthon vagyok elhatároztam, hogy csinálok egy saját programot. Ennek az az előnye is lenne, hogy ki tudnám jelezni az autó szenzorainak állapotát stb. Itt kezdődnek a problémák.

A Sun még régebben kivette az alap Java csomagból a soros kommunikáció támogatását, így külön kell letölteni hozzá egy könyvtárat. Mivel 64 bites Windows-ra úgy tudom csak az RxTx nevű könyvtár működik, ezért ezt töltöttem le. Pontosan a pre-release 2.2-es verzióját (a programom, futása elején kiírja, hogy a könyvtár csak 2.1-es, a native fájlok pedig 2.2-esek, pedig azt használom ami a letöltésben volt). A lentebb található Java programom USB-n keresztül tökéletesen működik. Kiírja az észlelt portokat, csatlakozik az Arduinohoz és mindkét irányban sikeres a kommunikáció. A problémám, hogy a program nem észleli a bluetooth portot. Az bluetooth stick portja COM8, ezt a program látja, vizsont az arduino bluetooth portját(COM7) nem látja. A TeraTerm mindkét portot tökéletesen látja és ha kapcsolódok vele az Arduino-hoz, az én programom is látja a COM7-es portot persze nem tud csatlakozni hozzá, mivel a TeraTerm már csatlakozott.

Remélem már találkozott valaki ugyanezzel a problémával és tud segíteni :)

Kód: Egész kijelölése

package fb.bluecom;

import gnu.io.CommPortIdentifier;
import gnu.io.NoSuchPortException;
import gnu.io.PortInUseException;
import gnu.io.UnsupportedCommOperationException;

import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;

public class BlueCom implements Runnable
{
	public static BlueCom instance;
	
	public static void main(String[] args)
	{
		new Thread(new BlueCom(), "BlueCom").start();
	}
	
	public static String translateCommPortType(int type)
	{
		switch(type)
		{
			case CommPortIdentifier.PORT_I2C:
				return "I2C";
			case CommPortIdentifier.PORT_PARALLEL:
				return "Parallel";
			case CommPortIdentifier.PORT_RAW:
				return "Raw";
			case CommPortIdentifier.PORT_RS485:
				return "RS485";
			case CommPortIdentifier.PORT_SERIAL:
				return "Serial";
			default:
				return "unknown";
		}
	}
	
	
	
	public List<String> names, owners, types;
	public List<SerialStream> streams;
	public boolean isRunning;
	public Logger logger;
	
	public BlueCom()
	{
		instance = this;
		this.names = new ArrayList<String>();
		this.owners = new ArrayList<String>();
		this.types = new ArrayList<String>();
		this.streams = new ArrayList<SerialStream>();
		this.logger = new Logger();
	}
	
	public void discover()
	{
		this.logger.println("Discovering...");
		Enumeration<CommPortIdentifier> portEnum = CommPortIdentifier.getPortIdentifiers();
		this.names.clear();
		this.owners.clear();
		this.types.clear();
		while(portEnum.hasMoreElements())
		{
			CommPortIdentifier identifier = portEnum.nextElement();
			this.names.add(identifier.getName());
			this.owners.add(identifier.getCurrentOwner());
			this.types.add(translateCommPortType(identifier.getPortType()));
			this.logger.println("Discovered device:");
			this.logger.println("\tPort: "+this.names.get(this.names.size()-1));
			this.logger.println("\tType: "+this.types.get(this.types.size()-1));
			this.logger.println("\tOwner: "+this.owners.get(this.owners.size()-1));
		}
		this.logger.println("Discovering finished!");
	}
	
	public void connect(String name, int baudrate) throws PortInUseException, NoSuchPortException, UnsupportedCommOperationException
	{
		this.logger.println("Connecting to "+name+" with baud: "+baudrate);
		this.streams.add(new SerialStream(name, baudrate));
		this.logger.println("Connected!");
	}
	
	public void disconnect(int id)
	{
		this.logger.println("Disconnecting from "+this.streams.get(id).port.getName());
		this.streams.get(id).port.close();
		this.streams.remove(id);
		this.logger.println("Disconnected!");
	}
	
	@Override
	public void run()
	{
		try
		{
			this.isRunning = true;
			this.discover();
			this.connect("COM6", 9600);
			new Thread("BlueComReceive")
			{
				@Override
				public void run()
				{
					while(isRunning)
					{
						try
						{
							for(int i = 0; i < streams.size(); i++)
							{
								if(streams.get(i).available() > 0)
									System.out.print(streams.get(i).readAll());
							}
						}
						catch(Exception e)
						{
							e.printStackTrace();
						}
					}
				}
			}.start();
			while(this.isRunning)
			{
				while(System.in.available() == 0);
				String str = "";
				while(System.in.available() > 0)
					str += (char)System.in.read();
				for(int i = 0; i < this.streams.size(); i++)
					this.streams.get(i).print(str);
				if(str.contains("exit"))
					this.isRunning = false;
			}
			this.disconnect(0);
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
	}
}
Segítségeteket előre is köszönöm!
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Arduino Bluetooth probléma

Hozzászólás Szerző: Robert »

Oprendszer?

XP alatt csak a BlueSoleil 6.x-től van hogy egy port küld _és_ fogad is...
Amire vigyázz!
Ha a BT nincs párosítva a slave-val, akkor a bejövő portot nem kezeli! Ha utólag csatlakozik, akkor is nyögvenyelősen!
Avatar
FBalazs
DrótVégénSzéndarab
Hozzászólások: 23
Csatlakozott: 2012. december 24. hétfő, 7:00

Re: Arduino Bluetooth probléma

Hozzászólás Szerző: FBalazs »

OS: Windows 7 64 bit
A COM8-ra azt írja, hogy az Arduino Incoming jele, de hiába csatlakozok hozzá, nem fogad üzeneteket a gép.
Párosítottam mindenek előtt.
Az imént megpróbáltam linuxról is, de mivel ahhoz még nem értek annyira, nem is sikerült. A párosításnál kér kódot az Arduino-tól, ami ugye lehetetlen. Persze megtaláltam a megoldást neten, de késő van már ahhoz, hogy értelmezzem és megcsináljam, és persze annak örülnék a legjobban, ha működne windows-ról.
Válasz küldése