0

这是我的第一篇文章,我知道这个主题可能非常简单或显而易见,但我不知道如何解决它。

我有一个来自 jyetech wiuch 的电容表,声称具有 8-N-1 串行输出,这是手册的链接。我只想用我的 Arduino Uno 读取输出,有人能帮帮我吗?这是我所做的代码,我得到了一些真实的数据,但也有一些奇怪的字符。

#include <stdio.h>

void setup() {
Serial.begin(38400);

Serial.println("OK");
}

char command[1024];
char commandBuffer[128];
int commandBufferSize = 0;

void readCommandBuffer(int bytesToRead) {
int i = 0;
char c = 0;
while (i < 128 && (i < bytesToRead || bytesToRead <= 0)) {
    while (!Serial.available())
        ;
    c = Serial.read();
    if (c == '\r' || c == '\n') {
        break;
    }
    commandBuffer[i] = c;
    i++;
}
commandBufferSize = i;
}

void readCommand() {
command[0] = '\0';
readCommandBuffer(0);
if (strncmp(commandBuffer, "RCV", 3) == 0) {
    commandBuffer[commandBufferSize] = '\0';
    int expectedSize = atoi(commandBuffer + 4);
    if (expectedSize <= 0 || expectedSize > 1024) {
        return;
    }
    Serial.println("RDY");
    int bytesRead = 0;
    while (bytesRead < expectedSize) {
        readCommandBuffer(expectedSize - bytesRead);
        memcpy(command + bytesRead, commandBuffer, commandBufferSize);
        bytesRead += commandBufferSize;
        Serial.print("ACK ");
        Serial.println(commandBufferSize);
    }
    command[bytesRead] = '\0';
} else {
    memcpy(command, commandBuffer, commandBufferSize);
    command[commandBufferSize] = '\0';
}
}

void loop() {
if (Serial.available()) {
    readCommand();
    // "command" now contains the full command
    Serial.println(command);
}}
4

1 回答 1

0

您必须使用两个串行端口,一个与 PC 通信(通常的串行对象),另一个与仪器通信。如果你有一个 Arduino UNO,它只有一个硬件串口,你必须使用软件串口库。Mega 板有 4 个硬件串行端口,可通过内置对象 Serial1、Serial2 等使用。

顺便说一句,刚刚注意到不久前有人问了一个非常相似的问题:

串行数据通信 Arduino

于 2013-05-10T10:15:56.097 回答