Tischwaage - 30 kg / 1 g - 21 x 27 cm - LED | www.expondo.ch
Das ist nicht soviel Glück.
Die Waage hat nen 6V Akku und wird wohl mit 5V Logik betrieben ![]()
Man müsste nur die Logik auf dem RX-Pin am Arduino umdrehen...
Aber besser ist in jedem Fall ein richtiger MAX232 oder ähnliches.
Bin halt kein Hellseher ![]()
Ich auch nicht ![]()
Weis doch selber was für Akrobaten manchmal hier rumlaufen, 6V auf Pin geht doch, es wird ja immer geschrieben das man Minimum 6,5V auf VIN tun soll damit Ardu vernünftig funktioniert usw.
RX, TX auf "Kreutz" verbunden?
Bedeutet, RX zu TX und TX zu RX .
Bist du sicher das nix empfangen wird. ??
Setze mal eine Serial.println in die For-Next Schleife.
Es kann nämlich gut sein das da Daten übertragen werden, die eine Umwandlung erfordern.
So nach den Motto "Nur wenn man was lesen kann ist es kein Text, es können auch gut sortierte schwarze Punkte sein".
Davon abgesehen ist eine For-Next Schleife kompletter Unsinn. Man nimmt eine while-Schleife. Da liest man die Daten permanent als "Stream" ein. Analysiert JEDES Zeichen, und schaut dann was man damit macht.
Zu Erklärung. Seriale Übertragung ist ein Film den man Streamt. 1 Störung und der ganze Stream ist defekt und das Programm macht Unsinn. Weshalb man i.d.R. ein Startzeichen sendet, dann die Daten und dann ein Endzeichen. In der Analyse werden dann die Daten herausgefiltet und weiterverarbeiten, bzw. auf Übertragungsfehler reagiert. Dafür ist der Rückkanal zuständig. Da schickt man dann i.d.R. ein "bitte nochmal senden". Wobei man vorraussetzt das die Gegenstelle das versteht.
Bei solchen Technik wie einer Waage ist es eher üblich alle X-Sekunden die Daten neu zu schicken und die Emfängersoftware ignoriert einfach was sie nicht braucht.
Gruß
Pucki
also es ist ja so man kommt ja von der waage zum ttl wandler und dann bin ich beim ttl wandler vom (Abgang)
VCC auf 5V
RXD auf PIN 10
TXD auf PIN 11
GND auf GND
Im Code habe ich
RX =11
TX=10
Also ja habe ich in Kreutz verbunden
meinst du so, wenn ja funktioniert immer noch nicht. #include <SoftwareSerial.h>
#define RX_PIN 11
#define TX_PIN 10
SoftwareSerial mySerial(RX_PIN, TX_PIN);
void setup() {
Serial.begin(9600);
mySerial.begin(9600);
}
void loop() {
// Daten permanent als Stream einlesen und jedes Zeichen analysieren
while (mySerial.available()) {
// Lesen eines Zeichens
char incomingChar = mySerial.read();
// Überprüfen, ob das Zeichen ein Startzeichen ist
if (incomingChar == '<') {
// Array zum Speichern der empfangenen Bytes
byte data[6];
// Empfange die Daten
for (int i = 0; i < 6; i++) {
// Lesen eines Zeichens und speichern in das Datenarray
data[i] = mySerial.read();
}
// Extrahiere das Gewicht aus den BCD-Bytes
int weight = (data[2] & 0x0F) + ((data[3] & 0x0F) * 10) + ((data[4] & 0x0F) * 100);
// Konvertiere das Gewicht in Kilogramm, wenn die Einheiten lbs sind
if (data[5] == 'l') {
weight *= 0.453592; // 1 lb = 0.453592 kg
}
// Gib das Gewicht auf dem seriellen Monitor aus
Serial.print("Gewicht: ");
Serial.print(weight);
Serial.println(" kg");
// Breche die Schleife ab, da die Daten verarbeitet wurden
break;
}
}
}
Mach das einfach mal. Und erzähle ob sich da was tut.
Alternativ schreibe ein neues Skript was die Daten permanent ausliest und anzeigt. SInd nur max. 10 Zeilen Code.
Du musst erst sicherstellen das überhaupt was ankommt. Dann feststellen was ankommt und dann erst kannst du die Daten verarbeiten.
Gruß
Pucki
Hallo,
die Waage steht auch auf 9600.
Das Kabel von der Waage zur Schnittstelle ist 1:1 (nicht gekreutzt ?
die Verbindung vom Konverter zum Arduino ist RX auf RX TX auf TX ?
Lese doch erst mal alle ein was kommt und gebe es auf dem Monitor aus. Nimm das Beispiel aus der Softserial lib. "SoftwareSerialExample"
im Wesentlichen nur
loop(){
if (mySerial.available()) {
Serial.write(mySerial.read());
}
}
Wenn nichts kommt dann tausche mal die zwei Drähte am Arduino 10 und 11 gegeneinander.
warum dimensionirst Du das Array data immer neu im loop.
Die schleife bis 6 lauft doch viel schneller ab als die Zeichen kommen können , da wird nichts mehr drin sein. wenn einmal die forschleife verlassen wurde wird beim nächsten mal das Array neu dimensioniert.
Nachtrag
Setze bitte den gesamten Code in Codetaks nicht nur einen Teil. das kannst Du auch noch nachträglich ändern
Ich glaube gelesen zu haben, das man das Protokoll der Waage einstellen kann. Ergo muss der TO mal schauen was in der Waage eingestellt ist.
Gruß
Pucki
Sehe ich ebenso.
man könnte auch mal was auf der softseriellen ausgeben und bei abgesteckter Waage eine Brücke von TX auf RX machen an dem RS232 Stecker vom Konverter. Dann könnte man die Hardware testen.
Sowas in der Art mit Brücke von RX auf TX
loop(){
delay(100);
mySerial.print("ABC");
while (mySerial.available()) {
Serial.write(mySerial.read());
}
}
gemacht geht nicht.... #include <SoftwareSerial.h>
#define RX_PIN 11
#define TX_PIN 10
SoftwareSerial mySerial(RX_PIN, TX_PIN);
void setup() {
Serial.begin(9600);
mySerial.begin(9600);
}
void loop() {
if (mySerial.available()) {
Serial.println("WIESOGEHTSNICHT");
// Array zum Speichern der empfangenen Bytes
byte data[6];
// Empfange die Daten
for (int i = 0; i < 6; i++) {
data[i] = mySerial.read();
Serial.println("WIESOGEHTSWIEDERNICHT");
}
// Extrahiere das Gewicht aus den BCD-Bytes
int weight = (data[2] & 0x0F) + ((data[3] & 0x0F) * 10) + ((data[4] & 0x0F) * 100);
// Konvertiere das Gewicht in Kilogramm, wenn die Einheiten lbs sind
if (data[5] == 'l') {
weight *= 0.453592; // 1 lb = 0.453592 kg
}
// Gib das Gewicht auf dem seriellen Monitor aus
Serial.print("Gewicht: ");
Serial.print(weight);
Serial.println(" kg");
// Warte eine kurze Zeit, um sicherzustellen, dass keine weiteren Daten unmittelbar danach empfangen werden
delay(1000);
}
}
also schaut das ding ist ich habe ein rs 232 bestellt aber ich schwachkopf habe 2x kupplung an beiden enden und ja ich musste 2x stecker haben und deshalb mache ich es mit drähten aber spielt ja keine rolle solange ich die richtigen pins nehme oder? oder ist meine überlegung falsch ?
Fang mal ganz klein an. Alles abstecken und eine Brücke zwischen 10 und 11. Code aus #36 .Kommt was?
Wenn vom μC nichts an die Waage gesendet wird, dann muss lediglich Tx vom Konverter mit RX des Controllers und GND des Konvertes mit GND des Controllers verbunden werden. Fertig.
Also erstens nur so einen code kann ich nicht es gibt mir ständig fehler an, zweitens müsst ihr genauer beschreiben ich versteh =bahnhof, von waage habe ich die 9pins und gehe auf breadboard und von breadboard gehe ich auf ttl wandler und von dort aus auf arduino. Sagt mir bitte step by step was ich jetzt machen soll ich bin so richtig verwirrt und so gut in programmieren auch wieder nicht
Also normalerweise gehst du von der Waage auf den Konverter und vom Konverter auf das Breadboard. Um vom Konverter musst Du maximal drei Käbelchen an die richtige Stelle am μController stecken. Ist nicht sehr schwer.
Konverter -> Controller
Rx. an Tx
Tx. an Rx
GND an GND
Google kann auch ganz behilflich sein. Wenn man dort sucht, findet man z.B. sowas:

Muss ich mich also selber korrigieren… VCC muss bei diesem Konverter auch angeschlossen werden.
Okay habe es genau so angeschlossen Hast du eine idee was für ein code ich schreiben soll? nebenbei habe ich aber arduino uno r4 wifi und nicht arduino mega