0
嗨我正在使用Arduino Flex传感器来控制视频游戏角色。 传感器数据被平均并重新映射到0-6之间的值。 当玩家弯曲他们的二头肌时,它读取最大值(这是完美的),但是如果玩家弯曲他们的手臂并且由于某种原因,传感器读取的最大值为6,因为玩家放松他们的手臂,进入游戏引擎(而不是从6到零,从6到5下降到4到3到2到1,然后达到零)。有人可以请告诉我应该如何改变我的代码,使传感器读数回到0而不是逐渐下降?Arduino传感器数据
#define NUM_LED 6 //sets the maximum numbers of LEDs
#define MAX_Low 75 //for people with low EMG activity
#define MAX_High 150//for people with high EMG activity
#define Threshold 3 // this sets the light to activate TENS
int reading[10];
int finalReading;
int MAX = 0;
int TENS =3;
int ledState = LOW;
byte litLeds = 0;
byte multiplier = 1;
byte leds[] = {8, 9, 10, 11, 12, 13};
char ch;
char contact;
void setup(){
Serial.begin(9600); //begin serial communications
digitalWrite(TENS, LOW);
for(int i = 0; i < NUM_LED; i++){ //initialize LEDs as outputs
pinMode(leds[i], OUTPUT);
pinMode(TENS, OUTPUT); // Set TENS output to StimPin
}
MAX = MAX_High; //This sets the default to people with high EMG activity.
}
void loop(){
for(int i = 0; i < 10; i++){ //take ten readings in ~0.02 seconds
reading[i] = analogRead(A0) * multiplier;
delay(2);
}
for(int i = 0; i < 10; i++){ //average the ten readings
finalReading += reading[i];
}
finalReading /= 10;
for(int j = 0; j < NUM_LED; j++)
{
digitalWrite(leds[j], LOW);//write all LEDs low and stim pin low
}
finalReading = constrain(finalReading, 0, MAX);
litLeds = map(finalReading, 0, MAX, 0, NUM_LED);
Serial.println(litLeds);
for(int k = 0; k < litLeds; k++){
digitalWrite(leds[k], HIGH); // This turns on the LEDS
}
{
// send data only when you receive data:
if (Serial.available() > 0)
{
ch = Serial.read();
contact=digitalRead(TENS);
if (ch == 'A' && contact==LOW)
{
digitalWrite(TENS, HIGH);
}
else if (ch == 'B' && contact==HIGH)
{
digitalWrite(TENS, LOW);
}
}
}
delay(80);
}
如果我使用更长的延迟,它会导致Unity游戏引擎冻结一秒....我不认为这样的延迟是一种选择。你可以给我更详细的建议,因为我不完全了解: “....或者只使用一个与最后3次读数相同的值以确保没有快速变化.... “ – joeyc
如果您阅读”1-2-3-4-5-6-6-6“,在阅读第三个”6“或其他类似内容之前不要发送任何内容。这个想法,存储最后N个读数并进行比较; N等于它们之间或它们之间的最小变化...... – jabujavi
任何人都可以建议我如何编写一段代码,该代码将一旦flex传感器被激活并且当它再次返回到零时选择最高值?即。如果flex的结果是:0-1-2-3-4-5-6-4-2-0'我将如何使用for循环来始终选择最高读数? – joeyc