Я пишу фрагмент кода Arduino, который управляет несколькими серводвигателями посредством определения значений датчиков мышечной ЭМГ мышц миокарда.
Дело в том, что когда мышца сокращается, сервоприводы движутся так, что увеличение в градусах соответствует тому, насколько сильно вы сократили мышцу (интенсивность сокращения).
Я попытался написать код, которыйвроде работает, как только вы изгибаете сервоприводы, они двигаются так, как я хочу.Но когда они достигают максимального значения (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);
}
}