私は MC68HC11 マイクロコントローラに取り組んでおり、サンプリングしたアナログ電圧信号が入っています。シナリオは計量機です。大きなピークは、オブジェクトがセンサーにぶつかったときに安定し (これが必要なサンプルです)、オブジェクトがロールオフする前に再びピークに達します。
私が抱えている問題は、プログラムがこの安定点を検出し、それを平均して全体の重みを生成する方法を考え出すことですが、その方法を理解することはできません:/. 私が考えた 1 つの方法は、以前の値を比較して、それらの間に大きな違いがないかどうかを確認することですが、成功していません。以下は、私が使用している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;
}
}
}
}
提案をお待ちしております:)
(下のグラフは、これらの値がどのように見えるかを示しています。赤いボックスは、特定したい領域です。