Go Down

Topic: Arduino Mega+ Bluethoot shild (Read 882 times) previous topic - next topic

Feanur

May 01, 2013, 01:42 pm Last Edit: May 01, 2013, 03:19 pm by Feanur Reason: 1
Hallo
Ich hab das Arduino noch nicht lange. Ich besitze das Arduino Mega 2560 und versuche mich nun mit einem Bluetooth Shild (ITEAD Stuido BT Shield V2.2). Ich versuche nun eine einfache Anwendung (Led aktivieren mit 1 und deaktivieren mit 0). Eine Bluetooth Verbindung mittels Putty Terminal bekomme ich, aber leider passiert nichts wenn ich im Terminal 1 oder 0 eingebe.

Hier mein derzeitiger Code:

Code: [Select]
#include <SoftwareSerial.h>

#define RxD 0
#define TxD 1
char val;
int ledpin =13;
SoftwareSerial blueToothSerial(RxD,TxD);

void setup(){
  pinMode(ledpin,OUTPUT);
  pinMode(RxD, INPUT);
  pinMode(TxD, OUTPUT);
  setupBlueToothConnection();
  Serial.begin(115200); 
}

void loop(){
  digitalWrite(ledpin,LOW);
  Serial.println("LED aus");
  delay(2000);
  digitalWrite(ledpin,HIGH);
  Serial.println("LED ein");
  if(blueToothSerial.available()){
    blueToothSerial.print("Connection granted"); 
    val=blueToothSerial.read();
    Serial.println(val);
  }
 
  if(val=='0') 
  {
    digitalWrite(ledpin,LOW);
    delay(1000); 
    Serial.println("13 off");
  }
  if(val=='1') 
  {
    digitalWrite(ledpin,HIGH);
    delay(1000); 
    Serial.println("13 on");
  }
  delay(2000);
}

void setupBlueToothConnection()
{
blueToothSerial.begin(115200); //Set BluetoothBee BaudRate to default baud rate 115200
blueToothSerial.print("\r\n+STWMOD=0\r\n"); //set the bluetooth work in slave mode
blueToothSerial.print("\r\n+STOAUT=1\r\n"); // Permit Paired device to connect me
blueToothSerial.print("\r\n+STAUTO=0\r\n"); // Auto-connection should be forbidden here
delay(2000); // This delay is required.
blueToothSerial.print("\r\n+INQ=1\r\n"); //make the slave bluetooth inquirable
Serial.println("The slave bluetooth is inquirable!");
delay(2000); // This delay is required.
blueToothSerial.flush();
}

Die Ausgabe "The slave bluetooth is inquirable!" ist die erste Ausgabe die nicht angezeigt wird.
Stimmt etwas in meinem Code nicht, oder stimmt etwas mit der Verbindung nicht?

Hoffe mir kann hier jemand weiterhelfen

Feanur

sth77

Du belegst sowohl fürs Bluetooth-Shield als auch für die normale Kommunikation Pin 0 und 1, einmal per Software-Serial (BT) und einmal als Hardware-Serial.
Also Shield umjumpern auf Pin 3 und 4, Code anpassen und weiterbasteln - falls sich nicht noch ein Fehlerchen findet. ;)
Mein Arduino-Blog: http://www.sth77.de/ - letzte Einträge: Teensy 3.0 - Teensyduino unter Window 7 - Teensyduino unter Windows 8

Feanur

Danke für den Hinweis, werd ich dann gleich mal probieren

Feanur

Ok ich das mal probiert.
Stimmt das so?

Code: [Select]

#include <SoftwareSerial.h>

#define RxD 6
#define TxD 7


char val;
int ledpin =13;
SoftwareSerial blueToothSerial(RxD,TxD);

void setup(){
  Serial.begin(38400); 
  pinMode(RxD, INPUT);
  pinMode(TxD, OUTPUT);
  pinMode(ledpin,OUTPUT);
  setupBlueToothConnection();

}

void loop(){

  if(blueToothSerial.available()){
    val=blueToothSerial.read();
    Serial.println(val);
  }
 
  if(val=='0') 
  {
    digitalWrite(ledpin,LOW); //turn Off pin 13
    delay(1000); 
    Serial.println("13 off");
  }
  if(val=='1') 
  {
    digitalWrite(ledpin,HIGH); //turn On pin 13
    delay(1000); 
    Serial.println("13 on");
  }
  delay(2000);
}

void setupBlueToothConnection()
{
blueToothSerial.begin(38400); //Set BluetoothBee BaudRate to default baud rate 38400
blueToothSerial.print("\r\n+STWMOD=0\r\n"); //set the bluetooth work in slave mode
blueToothSerial.print("\r\n+STOAUT=1\r\n"); // Permit Paired device to connect me
blueToothSerial.print("\r\n+STAUTO=0\r\n"); // Auto-connection should be forbidden here
delay(2000); // This delay is required.
blueToothSerial.print("\r\n+INQ=1\r\n"); //make the slave bluetooth inquirable
Serial.println("The slave bluetooth is inquirable!");
delay(2000); // This delay is required.
blueToothSerial.flush();
}


Jetzt sehe ich nur noch "The slave bluetooth is inquirable! die anderen Ausgabe bekomme ich nun nicht mehr. Aber das Programm macht leider immer noch nicht was es soll. Ich finde meine Fehler einfach nicht  =(

sth77

Wie sieht denn die "Gegenstelle" aus? Wer sendet denn '1' oder '0'?
Mein Arduino-Blog: http://www.sth77.de/ - letzte Einträge: Teensy 3.0 - Teensyduino unter Window 7 - Teensyduino unter Windows 8

Feanur

ich machen das mit Putty (Console) gebe da 1 oder 0 ein und sende das, das müßte dich gehen oder

sth77

Und Putty ist dann so konfiguriert, dass ein Com-Port einen BT-Adapter angesprochen wird? So schickst du ein Zeichen bei 38400 Baud und erwartest eine Rückmeldung im Serial Monitor der Arduino-IDE? Habe ich hoffentlich richtig verstanden?
Und da erscheint dann keinerlei Reaktion auf irgendeinen Tastendruck?

Dein Codeblock sollte ja zumindest irgendwas ausgeben:
Code: [Select]
if(blueToothSerial.available()){
    val=blueToothSerial.read();
    Serial.println(val);
  }
Mein Arduino-Blog: http://www.sth77.de/ - letzte Einträge: Teensy 3.0 - Teensyduino unter Window 7 - Teensyduino unter Windows 8

Feanur

Hab bei Putty den Com Port (für BT, bei mir Com 6 ) eingestellt und auch die Baud rate ist eingestellt
Ja das sollte er machen, und er sollte auch das LED ein bzw ausschalten

Feanur

Ok hab mich mal weiter gespielt. Das Shield ist eingestellt und mein Code sieht folgendermaßen aus:

Code: [Select]
//simple LED Test
#include <SoftwareSerial.h>

#define RxD 6
#define TxD 7


int val=2;
int ledpin =13;
SoftwareSerial mySerial =  SoftwareSerial(RxD, TxD);

void setup(){
  mySerial.begin(38400);
  Serial.begin(9600); 
  pinMode(RxD, INPUT);
  pinMode(TxD, OUTPUT);
  pinMode(ledpin,OUTPUT); //pin 13 as output
 

}

void loop(){
  Serial.println(mySerial.available());
  if(mySerial.available()>0){
    val=mySerial.read();
    Serial.println(val);
    }
 
  if(val=='0')  //if '0' was received led 13 is switched off
  {
    digitalWrite(ledpin,LOW); //turn Off pin 13
    delay(1000);  //waits for a second
    Serial.println("13 off");
  }
  if(val=='1')  //if '1' was received led 13 on
  {
    digitalWrite(ledpin,HIGH); //turn On pin 13
    delay(1000);  //waits for a second
    Serial.println("13 on");
  }
  delay(2000);
}



Mein Problem ist das ich bei   Serial.println(mySerial.available()); immer 0 erhalte, wo liegt da mein Fehler?

Feanur

#9
May 05, 2013, 06:07 pm Last Edit: May 05, 2013, 06:09 pm by Feanur Reason: 1
So nun habe ich meine Code nochmals ganz von vorne begonnen und hab alles auf einem UNO Board getestet. Alles ok. Doch sobald ich den Code auf mein MEGA (2560 R3) lade, funktioniert die Übertragung nicht mehr. An was kann es liegen? Die Einstellungen sind bei beiden Boards gleich.

Hier nochmals der Code:

Code: [Select]
#include <SoftwareSerial.h>
#define RxD 7
#define TxD 6

int ledpin=13;
int val=2;
SoftwareSerial mySerial = SoftwareSerial(RxD, TxD);

void setup(){
 mySerial.begin(38400);
 //Serial.begin(9600);
 pinMode(ledpin,OUTPUT);
 pinMode(RxD, INPUT);
 pinMode(TxD, OUTPUT);
}

void loop(){
 if(mySerial.available()>0){
   val=mySerial.read();
 }
 
 if(val=='0'){
   digitalWrite(ledpin,LOW);
   mySerial.println("LED OFF");
   delay(1000);
 }
 if(val=='1'){
   digitalWrite(ledpin,HIGH);
   mySerial.println("LED ON");
   delay(1000);
 }
}



Go Up