蓝牙与C的通信

发布于 2024-10-03 23:22:16 字数 3140 浏览 2 评论 0原文

我想用 C 编写 2 个程序,一个在 Robot1 上工作,另一个在 Robot2 上工作。

所以我希望程序通过蓝牙从Robot1发送信号到Robot2,Robot2处理并接受这个信号(消息)并回复Robot1。 如何编码?

我需要任何帮助。

我的机器人的 API:

/* function for serial communication */
void SerWrite(unsigned char *data,unsigned char length)
{
unsigned char i = 0;
UCSRB = 0x08; // enable transmitter
while (length > 0) {
    if (UCSRA & 0x20) { // wait for empty transmit buffer
        UDR = data[i++];
        length --;
    }
}
while (!(UCSRA & 0x40)); 
for (i = 0; i < 0xFE; i++)
    for(length = 0; length < 0xFE; length++); 
}

void SerRead(unsigned char *data, unsigned char length,unsigned int timeout)
{
unsigned char i = 0;
unsigned int  time = 0;
UCSRB = 0x10; // enable receiver
/* non blocking */
if (timeout != 0) {
    while (i < length && time++ < timeout) {
        if (UCSRA & 0x80) {
            data[i++] = UDR;
            time = 0;
        }
    }
    if (time > timeout) data[0] = 'T';
}
/* blocking */
else {
    while (i < length) {
        if (UCSRA & 0x80) 
            data[i++] = UDR;
    }
}   
}

-------------------------------------------------------- ----------------------------------------------------------蓝牙型号.. .code...

#include "asuro.h"

void Sekunden(unsigned int s)       //Unterprogramm für Sekundenschleife (maximal 65s)
    {
    unsigned int t;                 // Definierung t als Vorzeichenloses int
    for(t=0;t<s*1000;t++)           // 1000*s durchlaufen
        {
        Sleep(72);                  // = 1ms
        }
    }

int main (void)
{
unsigned char daten[2], merker=0;   //Speicher bereitstellen, merker für start/stop
Init();
UBRRL = 0x67;   //4800bps @ 8MHz
Marke:                              // Endlosschleife
SerRead(daten,1,0);                 // Daten einlesen
switch (daten[0])                   //und verarbeiten
{
    case 0x38:  MotorDir(FWD,FWD);  // Vorwärts
                MotorSpeed(merker*120,merker*120);
                SerWrite("Vor                 \r",22);
                break;
    case 0x36:  MotorDir(FWD,FWD);  // Links
                MotorSpeed(merker*120,merker*170);
                SerWrite("Links               \r",22);
                break;
    case 0x37:  MotorDir(RWD,RWD);  // Rückwärts
                MotorSpeed(merker*120,merker*120);
                SerWrite("Zurueck             \r",22);
                break;
    case 0x34:  MotorDir(FWD,FWD);  // Rechts
                MotorSpeed(merker*170,merker*120);
                SerWrite("Rechts              \r",22);
                break;
    case 0x35:  if(merker==1)
                {
                MotorDir(FREE,FREE);// Stop
                MotorSpeed(0,0);
                SerWrite("Stop                \r",22);
                merker=0;
                break;
                }
                else
                {
                MotorDir(FWD,FWD);// Start
                MotorSpeed(120,120);
                SerWrite("Start                \r",22);
                merker=1;
                break;
                }

}

我想在我的机器人上运行这个程序。

I want to write 2 programs with C , one work on Robot1, the other work on Robot2.

So I want the program to send a signal from Robot1 via Bluetooth to Robot2 and Robot2 handles and accepts this signal (message)and reply to Robot1.
how to code this?

please I need any kind of help.

API OF my Robots:

/* function for serial communication */
void SerWrite(unsigned char *data,unsigned char length)
{
unsigned char i = 0;
UCSRB = 0x08; // enable transmitter
while (length > 0) {
    if (UCSRA & 0x20) { // wait for empty transmit buffer
        UDR = data[i++];
        length --;
    }
}
while (!(UCSRA & 0x40)); 
for (i = 0; i < 0xFE; i++)
    for(length = 0; length < 0xFE; length++); 
}

void SerRead(unsigned char *data, unsigned char length,unsigned int timeout)
{
unsigned char i = 0;
unsigned int  time = 0;
UCSRB = 0x10; // enable receiver
/* non blocking */
if (timeout != 0) {
    while (i < length && time++ < timeout) {
        if (UCSRA & 0x80) {
            data[i++] = UDR;
            time = 0;
        }
    }
    if (time > timeout) data[0] = 'T';
}
/* blocking */
else {
    while (i < length) {
        if (UCSRA & 0x80) 
            data[i++] = UDR;
    }
}   
}

-------------------------------------------------------------------------------------------Bluetooth Model...code...

#include "asuro.h"

void Sekunden(unsigned int s)       //Unterprogramm für Sekundenschleife (maximal 65s)
    {
    unsigned int t;                 // Definierung t als Vorzeichenloses int
    for(t=0;t<s*1000;t++)           // 1000*s durchlaufen
        {
        Sleep(72);                  // = 1ms
        }
    }

int main (void)
{
unsigned char daten[2], merker=0;   //Speicher bereitstellen, merker für start/stop
Init();
UBRRL = 0x67;   //4800bps @ 8MHz
Marke:                              // Endlosschleife
SerRead(daten,1,0);                 // Daten einlesen
switch (daten[0])                   //und verarbeiten
{
    case 0x38:  MotorDir(FWD,FWD);  // Vorwärts
                MotorSpeed(merker*120,merker*120);
                SerWrite("Vor                 \r",22);
                break;
    case 0x36:  MotorDir(FWD,FWD);  // Links
                MotorSpeed(merker*120,merker*170);
                SerWrite("Links               \r",22);
                break;
    case 0x37:  MotorDir(RWD,RWD);  // Rückwärts
                MotorSpeed(merker*120,merker*120);
                SerWrite("Zurueck             \r",22);
                break;
    case 0x34:  MotorDir(FWD,FWD);  // Rechts
                MotorSpeed(merker*170,merker*120);
                SerWrite("Rechts              \r",22);
                break;
    case 0x35:  if(merker==1)
                {
                MotorDir(FREE,FREE);// Stop
                MotorSpeed(0,0);
                SerWrite("Stop                \r",22);
                merker=0;
                break;
                }
                else
                {
                MotorDir(FWD,FWD);// Start
                MotorSpeed(120,120);
                SerWrite("Start                \r",22);
                merker=1;
                break;
                }

}

i want to run this programm on my Robot.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

完美的未来在梦里 2024-10-10 23:22:16

机器人 2 需要使用指向空缓冲区的指针(长度为 1 左右)、长度为 1 和零作为超时来调用 SerRead。然后,让它使用指向缓冲区的指针和长度为 1 来调用 SerWrite

机器人 1 应首先使用一个字节的数据调用 SerWrite,然后等待 SerRead 调用的结果。

Robot 2 needs to call SerRead with, lets say, a pointer to an empty buffer (length one or so), length one and zero as timeout. Afterwards, let it call SerWrite with a pointer to your buffer and length one.

Robot 1 should first call SerWrite with one byte of data and then wait for the result of a call to SerRead.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文