TESTEN

http://sites.prenninger.com/arduino-uno-r3/testen

http://www.linksammlung.info/

http://www.schaltungen.at/

                                                                                             Wels, am 2016-11-21

BITTE nützen Sie doch rechts OBEN das Suchfeld  [                                                              ] [ Diese Site durchsuchen]

DIN A3 oder DIN A4 quer ausdrucken
**********************************************************************************
DIN A4  ausdrucken
*********************************************************


ARDUINO Kochbuch
http://books.google.at/books?id=LiGw4IhN0RUC&pg=PA122&lpg=PA122&dq=%22char+HEADER+%3D+%27H%27;%22&source=bl&ots=7o2xVENwq0&sig=n9pfRmZD2xzBcq3AZSRmFsBRMFY&hl=de&sa=X&ei=w7ZtVMOqN4ObgwTV64H4Cw&ved=0CEoQ6AEwBA#v=onepage&q=%22char%20HEADER%20%3D%20%27H%27%3B%22&f=false

https://www.inkling.com/read/arduino-cookbook-michael-margolis-2nd/chapter-4/recipe-4-8


4.8Sending Binary Values from Processing to Arduino

Problem

You want to send binary bytes, integers, or long values from Processing to Arduino. For example, you want to send a message consisting of a message identifier “tag” and two 16-bit values.

Sie möchten Binärbytes, Ganzzahlen oder langen Werte von Verarbeitungs schicken Arduino. Zum Beispiel, um eine Nachricht, die aus einer Nachrichten-ID "tag" und zwei 16-Bit-Werte senden möchten.

Solution

Use this code:

// Processing Sketch
              
/* SendingBinaryToArduino
 * Language: Processing
 */
import processing.serial.*;

Serial myPort;  // Create object from Serial class
public static final char HEADER    = 'H';
public static final char MOUSE_TAG = 'M';

void setup()
{
  size(512, 512);
  String portName = Serial.list()[1];
  myPort = new Serial(this, portName, 9600);
}

void draw(){
}

void serialEvent(Serial p) {
  // handle incoming serial data
  String inString = myPort.readStringUntil('\n');
  if(inString != null) {     
    print( inString );   // echo text string from Arduino
  }
}

void mousePressed() {
  sendMessage(MOUSE_TAG, mouseX, mouseY);
}

void sendMessage(char tag, int x, int y){
  // send the given index and value to the serial port
  myPort.write(HEADER);
  myPort.write(tag);
  myPort.write((char)(x / 256)); // msb
  myPort.write(x & 0xff);  //lsb
  myPort.write((char)(y / 256)); // msb
  myPort.write(y & 0xff);  //lsb
}

When the mouse is clicked in the Processing window, sendMessage will be called with the 8-bit tag indicating that this is a mouse message and the two 16-bit mouse x and y coordinates. The sendMessage function sends the 16-bit x and y values as two bytes, with the most significant byte first.

Here is the Arduino code to receive these messages and echo the results back to Processing:

Wenn die Maus in das Verarbeitungsfenster geklickt wird, nachrichts mit dem 8-Bit-Markierung angibt, daß dies eine Mausnachricht und die zwei 16-Bit-Maus x und y-Koordinaten bezeichnet werden. Die Sendmessage-Funktion sendet die 16-Bit-x und y-Werte als zwei Bytes, wobei das höchstwertige Byte zuerst.

Hier ist der Arduino-Code, um diese Nachrichten zu empfangen und Echo die Ergebnisse zurück an
Verarbeitung


// BinaryDataFromProcessing
// These defines must mirror the sending program:
const char HEADER       = 'H';
const char MOUSE_TAG    = 'M';
const int  TOTAL_BYTES  = 6  ; // the total bytes in a message
                          
void setup()
{
  Serial.begin(9600);
}

void loop(){
  if ( Serial.available() >= TOTAL_BYTES)
  {
     if( Serial.read() == HEADER)
    {
      char tag = Serial.read();
      if(tag == MOUSE_TAG)
      {
        int x = Serial.read() * 256; 
        x = x + Serial.read();
        int y = Serial.read() * 256;
        y = y + Serial.read();
        Serial.print("Received mouse msg, x = ");
        Serial.print(x);
        Serial.print(", y =  ");
        Serial.println(y);
      }
      else
      {
        Serial.print("got message with unknown tag ");
        Serial.write(tag);
      }
    }
  }
}

Discussion

The Processing code sends a header byte to indicate that a valid message follows. This is needed so Arduino can synchronize if it starts up in the middle of a message or if the serial connection can lose data, such as with a wireless link. The tag provides an additional check for message validity and it enables any other message types you may want to send to be handled individually. In this example, the function is called with three parameters: a tag and the 16-bit x and y mouse coordinates.

The Arduino code checks that at least MESSAGE_BYTES have been received, ensuring that the message is not processed until all the required data is available. After the header and tag are checked, the 16-bit values are read as two bytes, with the first multiplied by 256 to restore the most significant byte to its original value.

Diskussion

Die Verarbeitungscode sendet ein Header-Byte, um anzugeben, dass eine gültige Nachricht folgt. Dies wird so Arduino Bedarf synchronisieren können, wenn es beginnt in der Mitte einer Nachricht oder die serielle Verbindung können Daten, wie beispielsweise mit einer drahtlosen Verbindung zu verlieren. Der Tag bietet eine zusätzliche Kontrolle für die Nachrichten Gültigkeit und es ermöglicht alle anderen Nachrichtentypen können Sie zu senden, um individuell gehandhabt werden. Einem Tag und der 16-Bit-x und y-Koordinaten der Maus: In diesem Beispiel wird die Funktion mit drei Parametern aufgerufen.

Die Arduino Code überprüft, dass mindestens MESSAGE_BYTES empfangen worden sind, um sicherzustellen, dass die Nachricht nicht verarbeitet, bis alle erforderlichen Daten verfügbar sind. Nachdem der Header und Tag überprüft werden, werden die 16-Bit-Werte in zwei Bytes zu lesen, mit dem ersten um 256 multipliziert, um das höchstwertige Byte auf seinen ursprünglichen Wert
wiederherzustellen.





DIN A4 ausdrucken
*********************************************************

Impressum: Fritz Prenninger, Haidestr. 11A, A-4600 Wels, Ober-Österreich, mailto:schaltungen@schaltungen.at
ENDE












Comments