我怎样才能在Arduino上读取数据并将数据转换为String?

时间:2013-03-27 21:06:24

标签: string arduino serial-port

我正在与2个Arduinos Leonardo建立通信系统。为了传输,我必须将字符串转换成比特并通过PWM引脚发送它们。问题是,我该如何做接收器?

我的想法是在数字引脚中接收数据,因此我可以将LOW / HIGH转换为'0'和'1',将8位转换为字符串,转换为char然后我有我的最终字符串。

一些信息: - 我正在使用PWM因为我想实现FSK调制,一点一点地发送; - - 我有一些硬件来使通信系统工作; - 我的通信物理通道是串口(通过Arduino引脚); - 在接收器硬件将提供我TTL信号,所以我将有0V / 5V。这就是为什么我认为digitalRead()应该工作; - 数据通过PWM发送,并以两级信号接收; - 我必须做一些协议来发送/接收数据,但仍然不知道如何......

这是我写的代码:

void setup() {
  Serial.begin(9600);
  while (!Serial) {;}
}
void loop() {
  char bitPosition = 0;
  String inMessage = 0;
  while (Serial.available() > 0) {
    char outChar;
    boolean digValue = digitalRead(inPin);
    for(bitPosition = 7; bitPosition >= 0;  ){
      if(digValue == LOW){
        bitWrite(outChar, bitPosition, 0);
      }
      if(digValue == HIGH){
        bitWrite(outChar, bitPosition, 1);
      }
    bitPosition--;
    }
  inMessage.concat(outChar);
  if(inMessage != 0){
    Serial.println("Received:  " + inMessage);
  }
 }
}

我希望这段代码能够在一串字符中从digitalRead转换HIGH / LOW状态。 0/1 - > char(outChar) - >字符串(inMessage)。我不知道我是不是想对了。建议? 我是否应该对波特率进行接收/传输数据?怎么样?

任何帮助/建议都将不胜感激。

2 个答案:

答案 0 :(得分:0)

了解如何在Arduino中实现SoftwareSerial,以获得如何完成此任务的线索。

http://arduino.cc/en/Reference/SoftwareSerial

“SoftwareSerial库的开发允许在Arduino的其他数字引脚上进行串行通信,使用软件复制功能(因此称为”SoftwareSerial“)。”

答案 1 :(得分:0)

嗯,你的问题,如果你相信的话要复杂得多。我已经阅读了EE.SE上发布的类似(相同的)问题。

你认为你没有抓住关于你的问题的根本事情。 这不是软件问题。如果我在全球范围内总结您的问题。

您想将数据从arduino A发送到arduino B.

您计划使用arduino A的PWM引脚生成FSK信号。

第一条评论:如何?指针根据相位调制移动的正弦波查找表?这似乎很容易。所以让我们以你选择的方式相信它。 (这里你说它是一个逻辑信号,但在EE.SE上你说它是无线信号)

现在你有一个XX kHz的信号(我们不知道XX值。但是根据你的Arduino的Xtal速度,我不能大于~500Khz)

在arduino B上,你必须解决时钟恢复问题,因为在arduino B上你无法访问arduino A的时钟。这意味着你无法将你得到的信号与参考时钟进行比较。分析接收到的信号时,您会获得相对于本地时钟的特定相位。但是因为你无法知道ardunio A的参考相位,你不能说接收位是-90°还是+ 90°。因此,您不能为接收信号指定0或1。

这不是一个小问题。根据您对此处或EE.SE中的问题和评论的回答,您正在尝试解决可能无法正常工作的算法的实现问题。您应该首先尝试找到一个可以使用MATLAB(或免费的OCTAVE)模拟的算法,确保它正常工作,然后尝试在嵌入式硬件上实现它。

你在EE.SE上收到很多关于你想做什么的答案。这是因为解决一个关于实现对专家来说看起来很虚假的问题没有任何意义。

因此,如果你想要有意义的答案。请花更多时间向我们解释在概念上您计划解决问题的方式和方式。

添加有关您的FSK如何运作的信息。你打算如何使用PWM来做FSK,这不是一件轻而易举的事。以及如何计划,从概念上检测接收的符号是1还是0。

实际上,我的答案是:如果我们可以解决您的问题,那么就无法解决您的问题。