0

私はラズベリーパイとarduinoを持っています。これまでのところ、シリアル通信を使用してPiからarduinoにデータを送信することができましたが、送信する変数は1つだけで、arduinoに送信したい複数の変数(2)(x、y座標)があります。これが可能かどうかは誰にもわかります。pi から送信される最初の数値を x に、2 番目の数値を y に、次の数値を次の座標の x にします。

1 つの変数を送信するために使用するコードを編集しようとしましたが、機能しません。

どんな助けでも素晴らしいでしょう

4

1 に答える 1

3

2 つの変数を同時に送信するには、次の方法を検討してください。

    int xpos, ypos;

    char x_tx_buffer[20], y_tx_buffer[20];
    char x_dummy_buffer[20];
    char y_dummy_buffer[20];
    char *p_x_tx_buffer, *p_y_tx_buffer;

    sprintf(x_dummy_buffer,"%d", xposs);
    sprintf(y_dummy_buffer,"%d", yposs);

    p_x_tx_buffer = &x_tx_buffer[0];
    *p_x_tx_buffer++ = x_dummy_buffer[0];
    *p_x_tx_buffer++ = x_dummy_buffer[1];
    *p_x_tx_buffer++ = x_dummy_buffer[2];
    *p_x_tx_buffer++ = x_dummy_buffer[3];

    p_y_tx_buffer = &y_tx_buffer[0];
    *p_y_tx_buffer++ = y_dummy_buffer[0];
    *p_y_tx_buffer++ = y_dummy_buffer[1];
    *p_y_tx_buffer++ = y_dummy_buffer[2];
    *p_y_tx_buffer++ = y_dummy_buffer[3];
    uart0_filestream = open("/dev/ttyAMA0", O_RDWR | O_NOCTTY | O_NDELAY);      //Open in non blocking read/write mode
    if (uart0_filestream == -1)
    {
        //ERROR - CAN'T OPEN SERIAL PORT
        printf("Error - Unable to open UART.  Ensure it is not in use by another application\n");
    }
    if (uart0_filestream != -1)
    {
        int countx = write(uart0_filestream, &x_tx_buffer[0], (p_x_tx_buffer - &x_tx_buffer[0]));       //Filestream, bytes to write, number of bytes to write
        int county = write(uart0_filestream, &y_tx_buffer[0], (p_y_tx_buffer - &y_tx_buffer[0]));       //Filestream, bytes to write, number of bytes to write
        if (countx < 0 || county < 0)
        {
            printf("UART TX error\n");
        }
    }
    close(uart0_filestream);

一度に最大 8 バイトを送信できます。これを念頭に置いて、about コードを変更して、同じ uart0_filestream で x 値と y 値を送信できるようにします。

幸運を。

于 2013-08-12T20:42:19.247 に答える