我正在研究一个 MC68HC11 微控制器,并有一个模拟电压信号输入,我已经对其进行了采样。该场景是一台称重机,当物体撞击传感器然后它稳定(这是我想要的样本)然后在物体角色关闭之前再次达到峰值时,会出现大峰值。
我遇到的问题是想办法让程序检测到这个稳定点并对其进行平均以产生整体权重,但无法弄清楚如何:/。我考虑过的一种方法是比较以前的值,看看它们之间是否有很大的差异,但我没有取得任何成功。下面是我正在使用的C代码:
#include <stdio.h>
#include <stdarg.h>
#include <iof1.h>
void main(void)
{
/* PORTA, DDRA, DDRG etc... are LEDs and switch ports */
unsigned char *paddr, *adctl, *adr1;
unsigned short i = 0;
unsigned short k = 0;
unsigned char switched = 1; /* is char the smallest data type? */
unsigned char data[2000];
DDRA = 0x00; /* All in */
DDRG = 0xff;
adctl = (unsigned char*) 0x30;
adr1 = (unsigned char*) 0x31;
*adctl = 0x20; /* single continuos scan */
while(1)
{
if(*adr1 > 40)
{
if(PORTA == 128) /* Debugging switch */
{
PORTG = 1;
}
else
{
PORTG = 0;
}
if(i < 2000)
{
while(((*adctl) & 0x80) == 0x00);
{
data[i] = *adr1;
}
/* if(i > 10 && (data[(i-10)] - data[i]) < 20) */
i++;
}
if(PORTA == switched)
{
PORTG = 31;
/* Print a delimeter so teemtalk can send to excel */
for(k=0;k<2000;k++)
{
printf("%d,",data[k]);
}
if(switched == 1) /*bitwise manipulation more efficient? */
{
switched = 0;
}
else
{
switched = 1;
}
PORTG = 0;
}
if(i >= 2000)
{
i = 0;
}
}
}
}
期待听到任何建议:)
(下图显示了这些值的外观,红色框是我要识别的区域。