Как увеличить положение сервопривода относительно значений датчика ЭМГ? - PullRequest
0 голосов
/ 25 марта 2019

Я пишу фрагмент кода 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);


   }
  }

...