Ios 探测脉冲物镜
目前,我正在创建一个iOS应用程序,它可以可视化arduino的端口状态。因此,iPad通过串行电缆从Arduino接收信息。 Arduino每100毫秒发送一个包含当前端口状态的包。这种状态可以在iPad上看到。 这些端口是输入端口。我已经认识到我正在读取的设备正在脉冲端口,因此Arduino读取高低电平交替。这会在可视化中创建闪烁。 我现在的问题是如何检测电平是否升高或输入是否闪烁。 端口高达x秒,低达y秒,然后重复。如果端口低达z秒,我需要在可视化中将端口设置为低。否则就高了Ios 探测脉冲物镜,ios,input,arduino,Ios,Input,Arduino,目前,我正在创建一个iOS应用程序,它可以可视化arduino的端口状态。因此,iPad通过串行电缆从Arduino接收信息。 Arduino每100毫秒发送一个包含当前端口状态的包。这种状态可以在iPad上看到。 这些端口是输入端口。我已经认识到我正在读取的设备正在脉冲端口,因此Arduino读取高低电平交替。这会在可视化中创建闪烁。 我现在的问题是如何检测电平是否升高或输入是否闪烁。 端口高达x秒,低达y秒,然后重复。如果端口低达z秒,我需要在可视化中将端口设置为低。否则就高了 - (voi
- (void) readBytesAvailable:(UInt32)numBytes {
int bytesRead = [manager read:rxBuffer Length:numBytes];
if(rxBuffer[i]==48){
[self setButtonRed];
}else if(rxBuffer[i]==49){
[self setButtonWhite]
}
}
如果我理解得很好的话,场景是这样的:您想要确定输出是改变其状态还是卡在地上。您没有指定句点/上下限时间或管脚数,因此我假设您有四个按钮连接到arduino管脚1、2、3、5,我将使用文字 您必须将CHECK_PERIOD设置为适当的采样周期,以便可以对每个状态的输入进行4/5次采样,并检查_迭代,以便也可以忽略某些点 例如,如果正常波高100ms,低100ms,我将CHECK_PERIOD设置为20,CHECK_迭代设置为3或4
long previousInputCheck;
#define NUM_INPUTS 4
const int inputPins[] = { 1, 2, 3, 5}
unsigned char inputCounter[NUM_INPUTS];
unsigned char inputStates[NUM_INPUTS];
... THEN, INTO THE MAIN ...
if ((millis() - previousInputCheck) >= CHECK_PERIOD)
{
previousInputCheck += CHECK_PERIOD;
unsigned char i;
for (i = 0; i < NUM_INPUTS; i++)
{
if (digitalRead(inputPins[i]) == LOW)
{
if (inputCounter[i] <= CHECK_ITERATIONS)
inputCounter[i]++;
if (inputCounter[i] == CHECK_ITERATIONS)
{
inputStates[i] = LOW;
}
}
else
{ // HIGH
inputCounter[i] = 0;
inputStates[i] = HIGH;
}
}
}
所以你有闪烁,因为你有浮动输入?嗯,我认为最好的解决办法是。。不要让它们漂浮。使用大型上拉或下拉,例如100千欧。然后直接在arduino代码中实现一种去抖动,这样读数会更稳定。闪烁是因为我正在读取的设备正在将输出端口更改为输入端口,以便在连接到同一端口的按钮状态下读取。有一个LED和一个按钮连接,这项技术被称为三线制。我用一个光耦十比一地读取线路的状态。光耦并联首先我希望有一个限制电阻与LED串联;无论如何,你把一个光耦放在接触点1的线路上,好的,我假设你把光耦的另一侧连接到arduino。好啊现在,耦合器通常只有一个晶体管作为输出级。你是怎么连接的?我是这样连接光电的: