Forum: Mikrocontroller und Digitale Elektronik Arduino zu Processing.


von titus e. (Firma: auch egal) (villastraylight)


Lesenswert?

Hallo,
versuche seit mehreren Stunden eine serielle Kommunikation von Arduino 
zu Processing hinzugekommen...

Es geht um eine Übung die die LDR Pegel im Processing darstellen soll.
Irgendwie funktioniert das Ganze (also im Processing) nicht wie ich will 
und ich finde den Fehler nicht.

Ich sehe in der Arduino IDE wenn ich auf den Serial Monitor klicke die 
Pegel Werte, aber im Processing sehe ich gar nicht wenn ich auf 
"Ausführen/Play" klicke.
Habe auch schon probiert das als stand-alone Programm aus Processing zu 
Kompilieren, aber auch ohne Erfolg.

Vielleicht erkennt ja hier jemand wo der Fehler liegt.


( ! Achso ich Benutze ein Mac OSX)

Würde mich sehr über konstruktive Kritik freuen


Gruss titus






Anbei der Code.

1. Code für Arduino:

______________________________________________________________________ 
_____
1
int pin[] = {22,23,24,25,26,27,28,29,30,31,32,33,34}; // Pin-Array
2
int analogPin = 0; // Pin des analogen Eingangs
3
int analogWert = 0; // Speichert gemessenen Analogwert
4
5
void setup(){
6
  Serial.begin (9600);
7
  for(int i = 0; i < 13; i++)
8
    pinMode(pin[i], OUTPUT);
9
}
10
11
void loop(){
12
  analogWert = analogRead(analogPin);
13
  steuereLEDs(analogWert);
14
  
15
  Serial.println(analogRead(0));
16
}
17
18
// Funktion zum Ansteueren der LED´s
19
void steuereLEDs(int wert){
20
  int bargraphWert = map(wert, 0, 1023, 0, 12);
21
  for(int i = 0; i < 13; i++)
22
    digitalWrite(pin[i], (bargraphWert >= i)?HIGH:LOW);
23
}

2. Code für Processing:

______________________________________________________________________ 
__
1
import processing.serial.*;
2
3
Serial meinSeriellerPort;
4
int xPos = 1;
5
int serialValue;
6
int[] yPos;
7
8
void setup(){
9
  size(400,300);
10
  println(Serial.list());
11
  meinSeriellerPort = new Serial(this, Serial.list()[0],9600);// Für Mac-User
12
13
  meinSeriellerPort.bufferUntil('\n');
14
  
15
  background(0);
16
  yPos = new int[width];
17
}
18
19
void draw(){
20
  
21
  background(0);
22
  stroke(255,255,0,120);
23
  for(int i=0; i < width; i +=50)
24
  line(i, 0, i, height);
25
  for(int i=0; i < height; i+=50)
26
  line(0, i, width, i);
27
  
28
  
29
  stroke(255, 0, 0);
30
  strokeWeight(1);
31
  int yPosPrev = 0, xPosPrev = 0;
32
  println(serialValue);
33
  for(int x=1; x < width; x++)
34
  yPos[x-1] = yPos[x];
35
  
36
  yPos[width - 1] = serialValue;
37
    println (serialValue);
38
  
39
  for(int x = 0; x < width; x++){
40
    if(x >0)
41
    line(xPosPrev, yPosPrev, x, yPos[x]);
42
    xPosPrev = x;
43
    yPosPrev = yPos[x];
44
  }
45
  
46
47
}
48
49
void serialEvent(Serial meinSeriellerPort){
50
  String portStream =   meinSeriellerPort.readString();
51
  float data = float (portStream);
52
  serialValue = height - (int)map(data, 0, 1023, 0, height);
53
}


______________________________________________________________________ 
______

: Bearbeitet durch User
von titus e. (Firma: auch egal) (villastraylight)


Lesenswert?

Soooo,

also mit dem Code ist nichts falsch!!!

Habe jetzt das Ganze mal unter meiner "SnowLeopard" Partition getestest 
und siehe da, alles läuft ohne Mucken...


Mich wundert trotzdem weshalb unter "Mountain Lion" der Sketch nicht 
läuft...


Gruss titus

von Timm R. (Firma: privatfrickler.de) (treinisch)


Lesenswert?

Hallo,

hast du geschrieben, welcher Arduino?

Brauchen manche (alle?) nicht einen Treiber? Vielleicht hast du den 
unter Mountain Lion nicht drin? Oder er ist nicht mehr kompatibel?

vlg

 Timm

von titus e. (Firma: auch egal) (villastraylight)


Lesenswert?

Timm Reinisch schrieb:
> Hallo,
>
> hast du geschrieben, welcher Arduino?
>
> Brauchen manche (alle?) nicht einen Treiber? Vielleicht hast du den
> unter Mountain Lion nicht drin? Oder er ist nicht mehr kompatibel?
>
> vlg
>
>  Timm


Hallo Timm,
also es handelt sich um ein Arduino Mega 2560.
Habe anfangs gedacht das es irgendwas mit der Zuordnung von USB SERIAL 
für Mac nicht stimmt und habe versucht über das Scribt (Code),  die 
"Com3" (Bei Mac OSX anders) anzeigen zu lassen, aber dies lief auch 
nicht.
Deshalb habe ich dann unter einer anderen Partition (Snow Leopard) 
gebootet und sie da Alles lief.
Mit dieser Partition gehe ich nie ins Internet und daher besitzt diese 
auch keine Neueren Updates.

Ausserdem läuft unter Snow Leopard nur Processing bis v.1.5.1...
Daher kann es nichts mit Treiber oder anderem zutun haben.

Habe dann Java Runtime von Oracle neu installiert und die Dev- Tools 
deinstalliert und ML geupgedatet aber ohne Erfolg...  Ich finde den 
Fehler einfach nicht.


Nervt mich aber werde mir jetzt warscheinlich mal einen Tripple Boot mit 
Linux auf meinen Mac spielen damit ich diese Probleme vermeiden kann.
Das ganze hat mich 5 Stunden gekostet :-(



Trotzdem Danke für deine Antwort

Gruss titus




Hier der Code für die USB PORT Lokalisierung:
1
/**
2
 * 
3
 *
4
 * Listet die verfügbaren seriellen Ports auf
5
 * und gibt empfangene Zeichen aus
6
 */
7
8
9
import processing.serial.*;
10
11
Serial myPort;      // Serial-Objekt erzeugen
12
int portIndex = 0;  // Arduino-Port
13
int val;            // Vom seriellen Port empfangene Daten
14
15
void setup()
16
{
17
  size(200, 200);
18
  println(Serial.list()); // Liste aller Ports ausgeben
19
  println(" Verbinde mit -> " + Serial.list()[portIndex]);
20
  myPort = new Serial(this, Serial.list()[portIndex], 9600);
21
}
22
23
void draw()
24
{
25
  if ( myPort.available() > 0) // Wenn Daten verfügbar sind,
26
  {
27
    val = myPort.read();         // einlesen und in val speichern
28
    print(val);
29
  }
30
}

: Bearbeitet durch User
von titus e. (Firma: auch egal) (villastraylight)


Angehängte Dateien:

Lesenswert?

Hallo,
wollte noch mal das Thema aufgreifen, da ich in gewisser Weise immer 
noch Ratlos bin.

Einführung:
Hatte ja wie oben beschrieben, Probleme mit einem Sketch aus dem 
Arduino, der über Serielle Kommunikation ein "Processing" Programm mit 
Daten beliefern soll und über einen Grafen (X/Y Achse ) die Parameter 
darstellen soll....


Problem:
Irgendwie funktioniert das in Mountain Lion nicht, und "Processing" 
führt keine Programme aus...


Lösung: Habe das dann wie oben beschrieben in Snow Leopard und alles hat 
funktioniert...




Nachtrag:
Habe jetzt das komplette Mountain Lion OSX noch einmal Neuinstalliert in 
der Hoffnung das es danach funktioniert. Hatte vermutet das irgendwelche 
installierten Treiber, Programme oder sonstiges die Probleme in 
Processing bewirken.
Aber nach der Neuinstallation hat sich nichts geändert ausser das ich 
eine Fehlermeldung von Processing erhalte:

--FEHLER MELDUNG SIEHE SCREENSHOT--

Code auf dem unteren Fenster:
1
 
2
/dev/cu.Bluetooth-Modem /dev/cu.Bluetooth-PDA-Sync /dev/cu.Bluetooth-Serial-1 /dev/cu.Bluetooth-Serial-2 /dev/cu.usbmodem262431 /dev/tty.Bluetooth-Modem /dev/tty.Bluetooth-PDA-Sync /dev/tty.Bluetooth-Serial-1 /dev/tty.Bluetooth-Serial-2 /dev/tty.usbmodem262431




Frage:

Hat irgendjemand hier ähnlich Probleme schon mal gehabt, oder weiss ob 
es häufig Probleme in Mountain Lion gibt?

Hatte anfangs den Verdacht (habe ich immer noch), dass es irgendwelche 
Java Probleme mit OSX ML geben könnte, da Apple ja immer "eigene 
Schrauben" erfinden will...
Da mit die Fehlermeldung jetzt nach der Neuinstallation eher wie ein 
Hardware Konflikt aussieht, wollte ich hier fragen ob jemand Rat weiss.

Muss ich da irgendwelche Treiber noch installieren oder so?



Wäre sehr dankbar für eine Antwort


Gruss titus

von Timm R. (Firma: privatfrickler.de) (treinisch)


Lesenswert?

Hi,

also der Mega 2560 braucht glaube ich keinen Treiber.

1. Probier doch erstmal im Terminal mit dem screen Befehl oder mit einem 
Terminal-Programm, wie zB CoolTerm, ob die serielle Kommunikation 
ordentlich klappt! (Natürlich mit der Baudrate wie im Listing).

Dann kennst du auch den richtigen Device-Namen, ich würde mal sagen 
/dev/tty.usbmodemIRGENDWAS

2. Ich kenne mich mit Processing nicht aus, aber, wie kommt es 
eigentlich, dass garantiert ist, dass der Arduino auf dem Index 0 der 
Device-Liste liegt?

Besser gesagt, scheint mir die Annahme, der Arduino liege auf dem Index 
0 der Device-Liste falsch zu sein, und du versuchst 
/dev/cu-Bluetoothmodem zu öffnen. Liegt das nicht einfach nur daran, 
dass du den falschen Index verwendest? Versuch doch mal mit dem 
richtigen Index. Vielleicht 9?

Vielleicht ist aus welchem Grund auch immer, die Device-Liste unter 
Leopard anders sortiert? Oder Processing findet die BT Devices nicht, so 
dass der Index 0 stimmt?

Wäre es nicht generell besser, den Benutzer durch eine 
Keyboard-Interaktion das Device wählen zu lassen, oder wenn schon 
hardcoded, dann den Devicenamen? Oder einfach in der Devices-Liste nach 
einem Muster suchen?

vlg.
 Timm

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.