LabVIEWForum.de
Datenübertragung Arduino Mega zu Labview - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Instrument IO & VISA (/Forum-Instrument-IO-VISA)
+---- Thema: Datenübertragung Arduino Mega zu Labview (/Thread-Datenuebertragung-Arduino-Mega-zu-Labview)



Datenübertragung Arduino Mega zu Labview - biede1987 - 05.03.2014 16:03

Hallo liebes Labview Forum,

ich hab für meine Carrerabahn einen digitalen Start- Ziel Bogen entworfen. MIt zwei Lichtschranken und 4 - 7 Segmentanzeigen.

MIt hilfe des Arduino Mega habe ich ein Programm geschrieben, wenn eine Lichtschranke unterbrochen ist, soll zählt die anzeige hoch! Das funktioniert auch alles, nun will ich mit HIlfe von Labview auch die Runden und danach die Rundenzeiten auf Laptop angezeicht bekommen.

Mein Problem ist jetzt das ich ein Singal bekommen aber die Runde nicht gespeichert wird bei Labview!

Kann mir jemand helfen warum das so ist, ich möchte das der Wert in Labview gespeichter wird.


RE: Datenübertragung Arduino Mega zu Labview - jg - 05.03.2014 16:11

Rückfrage: Du arbeitest mit aktiviertem Termination Char bei der seriellen Kommunikation. Ist das korrekt? Beendet dein Arduino jede Nachricht mit einem <LF>. Wenn ja, dann brauchst du kein Bytes at Port. Außerdem fehlt dir jegliche Fehler-Auswertung. Wer sagt denn, dass alle 30 ms die Nachricht über die Anzahl der Runden kommt? Wenn dein Such-Tag "Runde1=" nicht gefunden wird, dann solltest du auch keine Rundenanzahl anzeigen.

Gruß, Jens


RE: Datenübertragung Arduino Mega zu Labview - biede1987 - 05.03.2014 16:37

// Programmierung des Mikrocontrollers
// Thomas Biedenbach
// CarreraBike
// Mikrocontroller Arduino Mega 2560


// Um die Runden der Fahrzeuge zu zählen, bedarf es einer Abfrage am Startzielbogen
// um dem Mikrocontroller mitzuteilen ob das Fahrzeuge durchgefahren ist oder nicht.
// Die Kontrolle, ob ein Fahrzeug durch den Startzielbogen gefahren ist , geschieht durch
// eine selbst gebaute Infrarot - Lichtschranke, die am Bogen unten angebracht ist.
// Ist die Lichtschranke belegt, dann sendet sie eine 1 an den Mikrokontroller, sobald sich
// nicht belegt ist sendet sie eine 0. Durch einen Reset Taster werden die Runden wieder auf zurückgesetzt



#include "SevSeg.h" //4 stellige 7 Segemnt Library hinzufügen
SevSeg sevseg;

int Lichtschranke1 = 11; // Zuweisung für Lichtschranke Bahn1 = Pin 11
int Lichtschranke2 = 13; // Zuweisung für Lichtschranke Bahn2 = Pin 13
int Lichtschrankeunterbrochen1; // Variable für Pin Zustand Bahn 1
int Lichtschrankeunterbrochen2; // Variable für Pin Zustand Bahn 2
int letzteRunde1; // Variable für den letzten Schalterzustand letzte Runde Bahn1
int letzteRunde2; // Variable für den letzten Schalterzustand letzte Runde Bahn2
int Runde1 = 0; // Varialbe für Rundeanzahl Bahn 1, am Anfang Runde = 0
int Runde2 = 0; // Varialbe für Rundeanzahl Bahn 2, am Anfang Runde = 0

int reset = 12; // Zuweisung für Resettaster = Pin 11
int resetdruecken; // Variable für Pin Zustand Resettaster

int auszugebende_Zahl; // Variable für auszugebende Zahl, am Display

void setup(){ //Setup Bedingungen des Programms

Serial.begin(9600); // Start der seriellen Kommunikation mit 9600bps
pinMode(Lichtschranke1,INPUT); // setzt den DigitalPin als Eingang
pinMode(Lichtschranke2,INPUT); // setzt den DigitalPin als Eingang

letzteRunde1 = digitalRead(Lichtschranke1); // Anfangszustand auslesen
letzteRunde2 = digitalRead(Lichtschranke2); // Anfangszustand auslesen
resetdruecken =digitalRead(reset); // Anfangszustand auslesen

sevseg.Begin(1,2,5,6,32,3,7,28,24,22,4,30,26); // Pin Belegung des Mikroconrollers für 4 stellige 7 Segement Display

sevseg.Brightness(10); // Helligkeit des Displays Wert von 0-100

}

void loop() { // Bedingungen die ständig wiederholt werden

sevseg.PrintOutput(); // Erzeugt die Ausgabe am Display

if (digitalRead(reset) == HIGH) // Wenn Reset 1, Dann Runde1 = 0, Runde wird zurückgesetzt
Runde1 = 0;

Lichtschrankeunterbrochen1 = digitalRead(Lichtschranke1); // Lichtschranke1 Wert lesen und in Varibale Lichtschrankeunterbrochen1 speichern
if (Lichtschrankeunterbrochen1 != letzteRunde1) { // Der Zustand des Schalters hat sich verändert

if (Lichtschrankeunterbrochen1 == LOW) { // Wenn Lichtschranke unterbrochen dann
Runde1++; // Runde1 hochzählen +1
if (Runde1==99) { // Wenn Runde 99 erreicht, dann zurücksetzen auf 0
Runde1=0;}


Serial.print("Wir sind jetzt in der "); // Ausgaben zum Serial Monitor, nur sichtbar am PC
Serial.print(Runde1);
Serial.println(" Runde Bahn1");
}
}

letzteRunde1 = Lichtschrankeunterbrochen1; // Den letzten Schalterzustand merken


if (digitalRead(reset) == HIGH) // Wenn Reset 1, Dann Runde2 = 0, Runde wird zurückgesetzt
Runde2 = 0;

Lichtschrankeunterbrochen2 = digitalRead(Lichtschranke2); // Lichtschranke2 Wert lesen und in Varibale Lichtschrankeunterbrochen2 speichern
if (Lichtschrankeunterbrochen2 != letzteRunde2) { // Der Zustand des Schalters hat sich verändert

if (Lichtschrankeunterbrochen2 == HIGH) { // Wenn Lichtschranke unterbrochen
Runde2++; // Runde2 hochzählen +1
if (Runde2==99) { // Wenn Runde 99 erreicht, dann zurücksetzen auf 0
Runde2=0;}

Serial.print("Wir sind jetzt in der "); // Ausgaben zum Serial Monitor, nur sichtbar am PC
Serial.print(Runde2);
Serial.println(" Runde Bahn2");

}

letzteRunde2 = Lichtschrankeunterbrochen2; // Den letzten Schalterzustand merken
}

auszugebende_Zahl = Runde1 * 100 + Runde2; // Formel umd Runden am Display anzuzeigen
sevseg.NewNum(auszugebende_Zahl,(byte) 2); // Ausgabe zum 4 stelligen 7 Segmentanzeige

}


RE: Datenübertragung Arduino Mega zu Labview - GerdW - 05.03.2014 16:42

Hallo biede,

was sollen wir mit dem Arduino-Code anfangen?

Und musst du wirklich "Wir sind jetzt in der xx Runde Bahn1<LF>" über die serielle Schnittstelle schicken, wenn es auch die kürzere Botschaft "B1=xx<LF>" tun würde? Bei nur 9600baud macht das schon eine Menge aus…


RE: Datenübertragung Arduino Mega zu Labview - biede1987 - 05.03.2014 16:48

Hallo ich hab hier mein arduino Programm, reingestellt ich beende meine nachricht zum schluss mit ln,
Beispie: Wir sind jetzt in Runde " " Bahn 1!

Wie meinst du das mit den keine Bytes at Port?

die 30 ms habe ich eingefügt das er immer alle 30 ms sekunden abfragt, ob was passiert ist oder nicht, dass kann ich auch höher setzen!

es kommt die RUnde ja auch an nur der Wert wird nicht gespeichert!
Ja das mit dem Wir sind jetzt in der Runde Bahn 1 war ja nur ein Beispiel,
ich kann das schön kürzer machen!


RE: Datenübertragung Arduino Mega zu Labview - jg - 05.03.2014 17:01

(05.03.2014 16:48 )biede1987 schrieb:  Hallo ich hab hier mein arduino Programm, reingestellt ich beende meine nachricht zum schluss mit ln,
Beispie: Wir sind jetzt in Runde " " Bahn 1!

Wie meinst du das mit den keine Bytes at Port?
Ganz einfach: Bei aktiviertem Term Char übernimmt LabVIEW die "Ende" Erkennung einer Botschaft. Du musst bei VISA-Read eine sehr große Anzahl von Bytes anschließen, der Lesevorgang wird trotzdem bei Erkennung des TermChar (oder des Timeout) beendet.

Bei deinem Vorgehen dagegen wird der Read-Vorgang in der Regel viel früher beendet, da Bytes at Port im schlimmsten Fall eine 0 (oder 1) zurückliefert, VISA-Read liest also 0 oder 1 Byte, du hast keine komplette Botschaft. EDIT: Und in diesen unvollständigen Botschaften suchst du dann nach deinem Suchtext...

Gruß, Jens


RE: Datenübertragung Arduino Mega zu Labview - biede1987 - 12.03.2014 21:10

Hallo Jens, kannst du mir bitte ein Beispiel Bild machen wie das mit dem Term Char ausehen soll?

soll ich aus dem bytes at port ein term char machen?


RE: Datenübertragung Arduino Mega zu Labview - biede1987 - 15.04.2014 11:09

Hallo Liebes Labview Team,

ich versuch grad weiter zuarbeiten an meinem Projekt!
Ich hab mir jetzt das arduino tool kit herruntergeladen, hat auch alles so weit geklappt,
hab auf meinem Arduino Steckbrett ein Taster angeschlossen um ein Eingang am Controller zu erhalten!

Ich möchte jetzt das ich wenn den Taster drücke eine 1 in Labview ankommt,Also das ich den Eingang abfrage in Labview!

Meine erste Frage ist muss am meinem Mikrocontroller, ein bestimmtes Programm aufladen, damit er mit Labview kommuniziert?
z.B? LIFA_Base

im Anhang ist meine VI angefügt, wer schön wenn wir jeamnd helfen könnte


RE: Datenübertragung Arduino Mega zu Labview - biede1987 - 15.04.2014 11:41

Labview erkennt nur den Eingag wenn ich dann auch schreibe

Serial.print(Eingang 13);

z.B Beispiel wenn ich z.B die Übung Blink nehme,
müsste man doch dann in Labview die 1 dann sehen oder?
Danke für euer HIlfe

/*
Blink
Turns on an LED on for one second, then off for one second, repeatedly.

This example code is in the public domain.
*/

// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int led = 13;

// the setup routine runs once when you press reset:
void setup() {
// initialize the digital pin as an output.
Serial.begin(9600);
pinMode(led, OUTPUT);
}

// the loop routine runs over and over again forever:
void loop() {
digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
Serial.print(led);
}