【发布时间】:2013-03-27 21:06:23
【问题描述】:
我正在与 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 -> 字符 (outChar) -> 字符串 (inMessage)。我不知道我是不是想错了。建议? 我应该对波特率做些什么来接收/传输数据吗?怎么样?
任何帮助/建议将不胜感激。
【问题讨论】:
-
所以您想将位按 8 分组并从中创建一个
char? -
是的,比如 8bits -> char -> String
-
然后使用位移位和按位逻辑运算符。
-
我试图理解这一点。你能解释一下它在我的情况下是如何工作的吗?
-
unsigned char c = 0; for (i = 0; i < 8; i++) { c <<= 1; c += bit; }
标签: string arduino serial-port