Show Posts
Pages: [1]
1  International / Deutsch / Re: Bluetooth mit itead shild on: January 13, 2013, 09:57:42 pm
JUCHU.. Geschaft. Leider dann auch erst gesehen das du geschrieben hast!

Hier die Lösung (nach drei Tagen den Kopf gegen die Wand hauen!)
OK für alle die auch mit Bluetooth es probieren wollen. Erkläre ich lieber alles was ich nun herausgefunden habe.

Wichtig beim Multiplexer kann man die Receiver RX und Transceiver TX einstellen, wenn man ihn auf
TX 100000
D0 110000
RX 010000

Heisst das TX(BT Shield) geht auf DigitalPin(Arduino) 0 == RX also TX-->RX. Und RX(BT Shield) geht auf DigitalPin(Arduino) 1 == TX also RX-->TX. Logisch der Empfänger braucht immer ein Sender und umgekehrt.

Achtung das bedeutet aber das der "normale" Serial Port per USB über schrieben wird! Auf gut Deutsch wenn man dann das Shield auf den Arduino tut, kann man per USB den ATMega nicht mehr bespielen, da er nun nur noch auf das BT Shield horcht.
Bei dieser Einstellung muss also zum Hochladen des Codes das Shield runter! Dann ATMega bespielen und Shield wieder rauf.

Jetzt kann man den Arduino+Shield an eine andere Stromquelle hängen und seinen Laptop mit dem BT Shield koppeln. Dann kann man im Arduino Programm oben bei "TOOLS"-->"Serial Port" auf den tty.iTead-DevB stellen. Nun normal den Serial Monitor öffnen ACHTUNG Baudrate muss natürlich stimmen.

Der Witz bei der ganzen Geschichte ist das man diesen ganzen Mist mit dem
Quote
#include <SoftwareSerial.h>
#define txPin 0
#define rxPin 1
SoftwareSerial Bluetooth(rxPin, txPin);
Bluetooth.begin(38400);

NICHT BRAUCHT!!! Man arbeite wie per USB mit Serial.begin(9600); und dann weiter mit Serial.println("Hello World"); --> Warum? Weil das einzige was man gemacht hat ist das USB Kabel zu ziehen und es durch BT zu ersetzen.

Meine Idee vom Anfang die LED 13 zum Leuchten zu bringen ist also super easy! (jetzt! smiley-sad )

Code:
int ledPin = 13;

void setup()
{
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);
}

void loop()
{
  while(Serial.available() > 0)
  {
      int valSer = Serial.read() - '0';
      Serial.println(valSer);
     
      if(valSer == 1) {
         Serial.println("LED is On");
         digitalWrite(ledPin, HIGH);
      }
      else if(valSer == 0) {
          Serial.println("LED is Off");
          digitalWrite(ledPin, LOW);         
      }
      else {
          Serial.println("Invalid");
      }
  }
}

Der Code funktioniert natürlich auch ohne BT Shield! Könnte immer noch den Kopf an die Wand hämmern - dafür!

Theoretisch kann man dann natürlich auch nun das machen was dertester sagt, also zwei Wege zum Arduino legen. Einen per BT zb mit Multiplexer (TX --> DPin6, RX --> DPin7) nun mit SoftwareSerial Bluetooth(7, 6); eine eigene Seriale-Schnittstelle erstellen und von dort dann Dinge schicken. Achtung: Man muss genau darauf dann achten welchen Port man grade beim Serial Monitor sieht/benutzt.

Bei mir geht der letzte Theoretische Teil noch nicht! Wollte aber mein Wissen bzw Erfolg allen anderen BT Anfängern mitteilen smiley-grin
 
2  International / Deutsch / Re: Bluetooth mit itead shild on: January 13, 2013, 06:34:11 pm
OK ich komme der Sache langsam näher!

Code:
#include <SoftwareSerial.h>
#define txPin 0
#define rxPin 1

int val;

SoftwareSerial Bluetooth(rxPin, txPin);
void setup()
{
  Bluetooth.begin(38400);
  Serial.begin(38400);
}

void loop()
{
  val += 1;
  Bluetooth.println(val);
  Bluetooth.write(val); // val als integer
  Bluetooth.read();
  //Bluetooth.flush();
  Serial.println(val);
  delay(1000);
}

Bei diesem Code, bekomme ich bei dem Serial (tty.usbmodemfa131) jede Sekunde eine Zahl ausgegeben. Bei der Bluetooth Schnittstelle (tty.itead-DevB) kommen cryptische Zeichen zb.
ù“úúù“ú3ÿ7ÿ;ÿ£Èúú§ùúú£ù—Äúú—úúú—ú“Ôúù“úúù“ú“Äú
und jede Sekunde eins dazu. Sieht also schon gut aus. Frage ist nun warum gibt es kein Integer?!?

Laut Datasheet vom BT ist nun alles richtig gesteckt:
When using the connection as Figure, the BT shield connects to the ATMega328 chip on board.
TX 100000
D0 110000
RX 010000

Oder doch eher das? Hatte bei mir aber nur dazu geführt das der Transiver dauerhaft leuchtet.
When using the connection as Figure 4, the HC-05 connects with the FT232RL chip, and the FT232RL connect to PC by USB. Whit this configuration you can use the serial software on PC to control or configure the HC-05 module.
TX 010000
D0 110000
RX 100000

Denke bei mir ist "nur" noch die Variable das Problem. Muss man mit BYTE arbeiten?
3  International / Deutsch / Re: Bluetooth mit itead shild on: January 13, 2013, 06:08:23 pm
Vielen Dank für die Antwort.
Habe immer 115200 Baud rate - der HC05 unterstützt diese auch alle. Habe aber durch deine Frage noch mal nachgelesen die standart Einstellung ist tatsächlich eine andere 38400Baud.

Das Pairing geht und es sind 5V die ich auch dem Shield geben. Trotzdem ein guter Ansatz.

Das mit dem Softserial ist gut zu wissen, das es wirklich geht. Wie funktioniert dann die Kommunikation wenn du nicht pin 0 und 1 nimmst sondern 2&3? Ich dachte wenn man mit dem ATMega sprechen will muss man die TX und RX benutzen die sonst für die Serial USB kommunikation ist. Also quasi überschreiben, das der MC nun auf von wo anders die Befehle bekommt. Wie hast du das umgesetzt, interessant halt für Debuging bei mir.
4  International / Deutsch / Re: Bluetooth mit itead shild on: January 13, 2013, 06:36:51 am
kann wirklich keiner helfen??
5  International / Deutsch / Re: Bluetooth mit itead shild on: January 12, 2013, 07:46:36 pm
Habe ein Video gefunden aber leider wird dort ein anderes Bluetooth Shield genutzt.
https://www.youtube.com/watch?v=g0pSfyXOXj8

Darin wird folgendes erklärt:

BT            Arduino
RX <--------> TX
TX <--------> RX

miteinander verbunden werden. Laut Arduino Uno beschreibung ist RX auf DigitalPin 0 und TX auf DigitalPin 1. Wenn die Jumper folgend gesteckt werden

TX 100000
D0 110000
RX 010000

(denke entspricht: TX = 0; RX = 1)

dauert es zwar ewig das der Serial Monitor sich aktiviert aber auch dieses ist ohne Erfolg.

Hoffe jemand wird sich finden der mir helfen kann.

6  International / Deutsch / Re: Bluetooth mit itead shild on: January 12, 2013, 05:50:09 pm
mmhh keiner eine Idee... Ich bin mit Bluetooth noch ein Anfänger, habe aber gefunden das man natürlich noch beim Adruino Programm den Serial Port auf tty-itead-dev8 umschalten müsste.

Trotzdem bekomme ich gar nichts. Ich habe nun auch erstmal versucht überhaupt dort etwas empfangen zu können.

Code:
#include <SoftwareSerial.h>

//SoftwareSerial mySerial(10, 11); // RX, TX
#define rxPin 2
#define txPin 4

SoftwareSerial Bluetooth(rxPin, txPin);
void setup() 
{
  Bluetooth.begin(115200);
}

void loop()
{
  Bluetooth.println("test text");
  delay(1000);
}

Also Shield ist auch gekoppelt und Serial Monitor ist nun auch auf dem richtigen Port. Aber trotzdem bekomme ich meine println nicht. Was funktioniert nicht?? Bitte ich steh total auf dem schlauch. Glaube aber immer noch das es mit den Pins zu tun hat - auch wenn ich schon fast alle kombinationen versucht habe.
7  International / Deutsch / Bluetooth mit itead shild on: January 12, 2013, 03:01:40 pm
Hi,
ich experimentiere mit Bluetooth. Ich habe ein Arduino UNO und das iteadstudio Shild.
(http://store.iteadstudio.com/images/produce/Shield/BTshieldv2.2/BTShieldV2.2_DS.pdf)
Zum Testen der Verbindung möchte ich nun über Bluetooth die LED13 auf dem Arduino an und aus machen.

Es hat einen UART Multiplexer um den RX und TX Pin zu stecken.

TX 0 0 1 0 0 0
D0 0 0 1 0 1 0
RX 0 0 0 0 1 0

auf der Platine ist auch aufgeschrieben:  [D0],D1,D4,D5,D6,D7

Ich gehe davon aus das es dann die Digitalen Pins sind. Bei meiner jumper konfiguration müsste es also TX = 4 und RX = 6 sein.

Mein Code ist
Code:
#include <SoftwareSerial.h>

//SoftwareSerial mySerial(10, 11); // RX, TX
#define rxPin 6
#define txPin 4

SoftwareSerial Bluetooth(rxPin, txPin);

int ledPin = 13;
int BT_val;

void setup() 
{
  //Bluetooth
  Bluetooth.begin(115200);
 
  pinMode(ledPin, OUTPUT);
}

void loop() // run over and over
{
 
// BLUETOOTH //
  while (Bluetooth.available() == 0)
    Bluetooth.println("Bluetooth connected");
    BT_val = Bluetooth.read() - '0';
   
  if(BT_val == 1) {
    Bluetooth.print("LED is on");
    digitalWrite(ledPin, HIGH); 
  }
  else if(BT_val == 0) {
   Bluetooth.print("LED is off");
   digitalWrite(ledPin, LOW);
  }
  else {
   Bluetooth.print("Invalid!");
  }
}

Ich arbeite auf einem Mac und hab nun die Arduino Software offen, das Shield gepaird und die Serielle Konsole offen mit 115200 Baud. Wenn ich nun eine 1 oder irgend was sende - passiert gar nichts!
Ok, natürlich ist das Arduino Board noch per USB angeschlossen um halt mit der Konsole ein Feedback zu bekommen, aber es müsste doch trotzdem etwas passieren.

Zum weiteren Testen habe ich mit Processing auch ein kleines Tool das auf 115200 Baud per klick eine 1 oder 0 sendet. Allerdings passiert damit auch nichts. Weder auf der Konsole noch leuchtet die LED!

Code:
import processing.serial.*;
 
Serial myPort;
String input;
 
boolean farbe = false;
void setup()
{
  //Alle Ports ausgeben und den richitgen auswählen
  println(Serial.list());
  //Index entsprechend setzten
  String portName = Serial.list()[8]; // [8] "/dev/tty.itead-DevB"
  myPort = new Serial(this, portName, 115200);
  //Erstes Einlesen wegwerfen
  input = myPort.readStringUntil('\n');
  input =null;
 
  size(200,200);
  background(0);
  smooth();
}
void draw()
{
  if(farbe)
  {
    background(255,0,0);
    myPort.write("1");
  }
  else
  {
    background(0);
    myPort.write("0");
  }
}
void mousePressed()
{
  farbe = !farbe;
}

Bin langsam am verzweifeln, kann mir jemand bitte helfen?
8  International / Deutsch / Re: Poti-Wert auslesen auf Webseite on: December 13, 2012, 07:34:17 pm
ok cool. Leider noch nicht ganz das was ich haben will.

Ich habe nun einen Webserver auf dem Mac Aktiviert und php5 am laufen. Im Verzeichnis habe ich ein potiTest.php mit folgendem Code:
<?php
require("php_serial.class.php");

$serial = new phpSerial();
$serial->deviceSet("/dev/tty.usbmodemfd121"); //steht auch über dem Serial Monitor Fenster
$serial->confBaudRate(9600);

// Then we need to open it
$serial->deviceOpen();

$read = $serial->readPort();
echo $read;
?>

So weit so gut.. ABER um die Werte zu bekommen muss natürlich die PHP-Datei neugeladen werden - was eigentlich ja auch Logisch ist. Ich hätte aber gerne das quasi ein Datenstream erzeugt wird, also wenn ich am Poti drehe sehe ich den geänderten Wert gleich auf der Seite --> wie beim Serial Monitor von Arduino. Ist die Anwort Ajax? Dies habe ich auch noch nicht gemacht, aber es scheint so als ob auch hier erst eine User Aktion gefordert wird und dann die PHP Seite angesprochen wird.
9  International / Deutsch / Re: Poti-Wert auslesen auf Webseite on: December 13, 2012, 06:32:51 pm
Wahnsinn mkl!! Das ist genau das was ich gerne tun wollte - gleich mal ausprobieren. Falls es geht stell ich hier auch gleich für den Nächsten eine Lösung ein.
VIELEN VIELEN DANK
10  International / Deutsch / Re: Poti-Wert auslesen auf Webseite on: December 13, 2012, 06:01:28 pm
nein im Moment ist der Arduino gar nicht mit einem Webserver verbunden. Ich könnte mein Ethernetshild ranmachen und dann halt auch einen Webserver wie im Forum beschrieben benutzen - aber ist das die Lösung?

Am liebsten würde ich irgend wie den Wert aus der tty.usbmodem auslesen und dies irgend wie mit JS auslesen und benutzen.
11  International / Deutsch / Poti-Wert auslesen auf Webseite on: December 13, 2012, 05:03:27 pm
nAbend,

da ich leider noch ein blutiger Anfänger bei Arduino bin habe ich eine Frage. Ich würde gerne ein Poti-Wert per Arduino Uno R2 auslesen und diesen onDemand auf einer Webseite darstellen, bzw benutzen. Ich benutze einen Mac und der Arduino ist als Serial unter zu finden tty.usbmodemfa131. Der Poti Funktioniert nun auch ganz gut lese mir die Werte im Serial Monitor aus.
Die Frage ist nun wie bekomme ich diese Werte in meine Webseite - bzw womit.
Ich programmiere ab und zu ein paar Webseiten mit JS, php und HTML5. Allerdings habe ich noch nie Extern einen Wert auslesen müssen.
Brauche ich ein Apache um den Wert auszulesen und dann per php abzurufen?
Oder brauche ich doch ein Arduino Leonardo mit HID?
Geht ein Podi als HID? Oder kann ich ihn dann nur als X-Achse von einer Maus definieren.

IDEE,
des ganzen ist mit dem Poti z.B. ein Farbwert zu steuern, dies bedeutet aber auch das die Webseite sich natürlich gleich ändern müsste, falls jemand am poti dreht.

Kann mir jemand da vielleicht einen Tipp geben? Ich steh etwas auf dem Schlauch.

Danke
Pages: [1]