如何相对于EMG传感器值增加伺服位置?

时间:2019-03-25 05:49:30

标签: arduino servo

我正在编写一段Arduino代码,该代码通过检测Myoware肌肉EMG的传感器值来控制多个伺服电机。

关键点是当伺服器使肌肉收缩时,伺服器的运动程度的增加与您收缩肌肉的程度(收缩强度)相对应。

我尝试编写一个可以起作用的代码,一旦您弯曲舵机,它就会移动,并且它们按照我希望的方式移动。但是,当它们达到最大值(180度)时,伺服器会将其位置重置为0,我希望它保持在该值(180度)。我认为它必须与for循环有关,但我不确定。

简而言之,我希望每次模拟传感器值增加时,伺服位置都会增加一些值(我已在代码中放置了10度);我还希望它一直待在那儿,直到模拟传感器值减小,然后导致伺服位置减小。

#include <Servo.h>

const int analogInPin = A0; 
const int analogOutPin = 9;
const int degreeRotation = 923/180;
unsigned long time;


int sensorValue = 0; 
int outputValue = 0;
int degreeValue = 0;
int servoPos = 0;

Servo servo1;

void setup() {
  servo1.attach(3);

  Serial.begin(9600);
}

void loop() {
  sensorValue = analogRead(analogInPin);
  // map it to digital:
  outputValue = map(sensorValue, 0, 1023, 0, 255);
  // change the analog out value:
  analogWrite(analogOutPin, outputValue);
  // print the results to the Serial Monitor:
  time = millis();
//  Serial.println(time); //prints time since program started
  delay(100);    
//  Serial.print(sensorValue);
  Serial.print(" ");
  // Serial.println(outputValue);

  if(outputValue >= 100) {
    degreeValue = (sensorValue + degreeRotation - 100)/degreeRotation;
    for(servoPos=0; servoPos <= degreeValue; servoPos += 10){
      Serial.println(servoPos);
      servo1.write(servoPos);
      delay(100);
    }
  }
   else {
    servoPos = 0;
    servo1.write(servoPos);
    delay(100);


   }
  }

0 个答案:

没有答案