Serielle Kommunikation

Hallo Leute,

bin absoluter Neueinsteiger.
Habe gestern das Arduino Uno bekommen uns muss damit ein Problem lösen:

Ich übertrage X- und Y- Koordinaten eines Maussensors (ADNS-2051) über den USB-Port des Arduinos.
Das scheint schonmal zu funktionieren.

Und jetzt das eig. Problem:
Ist es irgendwie möglich, diesen übertragenen Werten einen genauen Zeitwert zuzuordnen?
Jeder übertragene Wert sollte genau den Zeitwert beinhalten, der seit beginn der Messung vergangen ist.

Hat jemand damit vielleicht schon Erfahrungen?

Wäre sehr sehr dankbar für eure Hilfe!

Grüße,
Sebbo

Hat jemand damit vielleicht schon Erfahrungen?

Nein. Aber zu

Ist es irgendwie möglich, diesen übertragenen Werten einen genauen Zeitwert zuzuordnen?
Jeder übertragene Wert sollte genau den Zeitwert beinhalten, der seit beginn der Messung vergangen ist.

Möglich ist es bestimmt, nur muss man dafür wissen, was du mit den Werten machen willst. Wenn du erstmal testen willst, würde ich dir empfehlen per Serial.println() beziehungsweise Serial.print() immer in einer Zeile erst die Koordinaten zu schreiben und dann die Zeit

int x = A0; //weiß nicht, ob die Signale digital oder analog sind, musst du dann halt anpassen
int y = A1; //weiß nicht, ob die Werte in ganzen Zahlen auf zwei pins reinkommen, musst du halt anpassen

void setup(){
Serial.begin(9600); //Zum Beispiel
pinMode(x, INPUT);
pinMode(y, INPUT);
}

void loop(){
Serial.print(analogRead(x) + ", " + analogRead(y) + ", " millis() + " ms;");
Serial.println;
delay(1); //damit nicht allzuviele Werte reinkommen.
}

keine Ahnung, ob das so geht, aber du kannst es ja mal (mit seriellem Monitor halt) ein paar Sekunden laufen lassen und die Maus ein bisschen bewegen. Dann mal angucken ob du das so haben willst.
Wenn du die Werte aber irgendwie verarbeiten willst, würde ich EEPROM empfehlen, oder Variablen, die das ganze erst mal speichern und dann verarbeiten.
Wie man das am besten macht weiß ich leider nicht.

hi,

wnn Du sagst, daß Du die kooerdinaten über usb überträgst, meinst Du sicher, die daten vom uno auf den computer, oder? die daten vom maussensor kriegst Du nicht über usb in den arduino...

wenn Du nur einen "zeitwert" brauchst, dann nimm doch millis().
beschreibung hier unter main site oben links, dann reference, in der rubrik time. gibt Dir die millisekunden seit dem letzten reset des uno zurück.

gruß stefan

Hallo,

danke schonmal für die schnellen Antworten!
Bin begeistert!

Zu Eisbear
"wnn Du sagst, daß Du die kooerdinaten über usb überträgst, meinst Du sicher, die daten vom uno auf den computer, oder? die daten vom maussensor kriegst Du nicht über usb in den arduino..."

Ja klar, das meinte ich, hab mich zu undeutlich ausgedrückt.
Ich "zapfe" die Pins des Sensors direkt an und die gehen aufs Arduino. Ich habe eine fertige Library dafür benutzt. Alleine hätte ich das nicht so schnell hinbekommen...:wink:

Hier mal das Programm:

//#include "PAN3101.h"
#include "ADNS2051.h"
// #include "ADNS2610.h"
// #include "ADNS2083.h"

#define SCLK 2 // Serial clock pin on the Arduino
#define SDIO 3 // Serial data (I/O) pin on the Arduino

//PAN3101 Optical1 = PAN3101(SCLK, SDIO); // Create an instance of the PAN3101 object
ADNS2051 Optical1 = ADNS2051(SCLK, SDIO);
// ADNS2610 Optical1 = ADNS2610(SCLK, SDIO);
// ADNS2083 Optical1 = ADNS2083(SCLK, SDIO);

signed long x = 0; // Variables for our 'cursor'
signed long y = 0; //

int c = 0; // Counter variable for coordinate reporting

void setup()
{
Serial.begin(38400);
Optical1.begin(); // Resync (not really necessary?)
}

void loop()
{

// The status commands are available only for the PAN3101 and the ADNS2051:

// Optical1.updateStatus(); // Get the latest motion status
// if (Optical1.motion()) // If the 'Motion' status bit is set,
// {

x += Optical1.dx(); // Read the dX register and in/decrease X with that value
y += Optical1.dy(); // Same thing for dY register.....

// }

if (c++ & 0x80)
{ // Report the coordinates once in a while...
Serial.print("x=");
Serial.print(x, DEC);
Serial.print(" y=");
Serial.print(y, DEC);
Serial.println();
c = 0; // Reset the report counter
}
}

hi,

na dann hänge:
Serial.print(millis());
dazwischen.

gruß stefan