与C的蓝牙通信

时间:2010-11-21 10:31:35

标签: c bluetooth

我想用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;
    }
}   
}

----------------------------------------------- --------------------------------------------蓝牙模型...代码...

#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;
                }

}

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

1 个答案:

答案 0 :(得分:0)

机器人2需要调用SerRead,比方说,指向一个空缓冲区(长度为1),长度为1,为超时为零。然后,让它用指向缓冲区和长度为1的指针调用SerWrite

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