我正在编写一段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);
}
}