我有一架(S107G)迷你直升机和一架Arduino。可能性听起来很有趣。所以我开始寻找使用IR从控制器到直升机的数据传输协议。我用这段代码试图找出它的一些东西。
void setup()
{
Serial.begin(9600);
pinMode(12, INPUT_PULLUP); // 12 is IR sensor
}
void loop()
{
Serial.print(digitalRead(12) ? LOW : HIGH);
delay(1);
}
显然这有很多缺陷。
delay(1);
是任意选择的,我无法知道数据的传输速度。如果你们中的任何一个人知道如何做到这一点 我很感激。谢谢!
编辑:我发现this on SO这听起来很不错,但他没有深入了解他是如何做到的,以及他的发现是什么(速度等等)答案 0 :(得分:1)
您可以找到完整的代码库here on my GITHUB,您可以在其中找到IRsendDemoHelicopter.ino和IRrecvDump.ino的示例。这些和IRremote.cpp应该回答你的问题。我已经按照我的计划(有时候)在Esplora上实现了发射器。
以下是在https://github.com/mpflaga/Arduino-IRremote/blob/master/IRremoteInt.h#L192
找到的微秒#define SYMA_UPDATE_PERIOD_CH_A 120 // 0
#define SYMA_UPDATE_PERIOD_CH_B 180 // 1
#define SYMA_HDR_MARK 2000
#define SYMA_HDR_SPACE 2000
#define SYMA_BIT_MARK 320
#define SYMA_ONE_SPACE 687
#define SYMA_ZERO_SPACE 300
这里是R3和R5的位模式。我相信R5是生产中最常见的产品。
union helicopter {
uint32_t dword;
struct
{
uint8_t Throttle : 7; // 0..6 0 - 127
uint8_t Channel : 1; // 7 A=0, B=1
uint8_t Pitch : 7; // 8..14 0(forward) - 63(center) 127(back)
uint8_t Pspacer : 1; // 15 na
uint8_t Yaw : 7; // 16..22 127(left) - 63(center) - 0(right)
} symaR3;
struct
{
uint8_t Trim : 7; // 0..6 127(left) - 63(center) - 0(right)
uint8_t Tspacer : 1; // 7 na
uint8_t Throttle : 7; // 8..14 0 - 127
uint8_t Channel : 1; // 15 A=0, B=1
uint8_t Pitch : 7; // 16..22 0(forward) - 63(center) 127(back)
uint8_t Pspacer : 1; // 23 na
uint8_t Yaw : 7; // 24..30 127(left) - 63(center) - 0(right)
} symaR5;
};
但他们总是有可能推出新的模式。