Verwenden Sie Bash, um serielle Eingaben zu empfangen, führen Sie dann einige Berechnungen mit diesen Eingaben durch und senden Sie sie an den virtuellen seriellen Port, damit eine andere App sie lesen kann.

Verwenden Sie Bash, um serielle Eingaben zu empfangen, führen Sie dann einige Berechnungen mit diesen Eingaben durch und senden Sie sie an den virtuellen seriellen Port, damit eine andere App sie lesen kann.

Ich habe einen Arduino, der mir einige Zahlen über die serielle Schnittstelle mit 9600 Baud sendet. Zwei durch Kommas getrennte Werte, die etwa alle 500 ms gesendet werden. cat /dev/ttyACM0Sieht so aus: 10,5,20,3 mit Zahlen zwischen -10 und 100. Ich habe eine Anwendung, die diese Informationen empfängt und sie in ein Diagramm einträgt, damit ich sie visualisieren kann. Mein Problem ist, dass die betreffende Anwendung nicht in der Lage ist, mit den angegebenen Werten irgendwelche mathematischen Berechnungen durchzuführen, sodass ich nicht weiß, was der Arduino zur grafischen Darstellung senden kann.

Ich muss die Zahlen nehmen und sie sozusagen „konditionieren“. Am besten fügen Sie unten den Pseudocode ein:

read value1 //values parsed from serial using comma as a seperator
read value2 //I have no idea how to do that but I know its doable lol

var kwh = 0;
var lastReadTime = systemTimeMillis();

Loop {
var addKwh = (value1 + value2) * 120 * (systemTimeMillis() - lastReadTime)/1000/60/60/1000
kwh = kwh + addKwh
lastReadTime = systemTimeMillis();
echo $value1 + "," + $value2 + "," + $kwh > virtualSerialPortForOtherApplicationToRead
} 

Nun, ich weiß, was Sie denken: Warum nicht die „Konditionierung“ auf dem Arduino durchführen? Nun, ich muss diesen Wert am Ende des Tages zurücksetzen können, daher brauche ich die Systemzeit, die nur mühsam an den Arduino zurückgegeben werden kann, damit sie zuverlässig funktioniert.

Meine Idee ist also, ein Bash-Skript zu erstellen, das die eingehenden Daten aus dem seriellen Arduino-Stream liest und sie nach Bedarf „aufbereitet“ und dann die aufbereiteten Daten über einen Dummy-Seriellen-Port an meine andere Anwendung sendet. Ich habe keine Ahnung, wie ich den Teil mit dem virtuellen seriellen Port in der ganzen Sache machen soll. Und meine Bash-Kenntnisse sind auch begrenzt, also bin ich für Beispiele wirklich dankbar. Ich glaube, ich habe auch keine Ahnung, ob irgendetwas davon möglich ist, aber ich hoffe, eine Lösung zu finden.

Ein weiterer Grund für Bash ist, dass ich die konditionierten Werte auch problemlos an eine CSV-Datei senden kann, um sie selbst zu verwenden.

Dank im Voraus!

verwandte Informationen