Последовательное построение ШИМ

Я пытаюсь построить график значения ШИМ, которое увеличивается (каждые 2 секунды), а затем уменьшается, чтобы сравнить его со значением энкодера. Я ожидал продолжения значения (например, шага) в течение 2 секунд, но вместо этого у меня появился сигнал треугольника. Вот мой код

const int pwmG = 2;
const int DirG = 8 ;
int a =0;


#define encoder1_CHA 18  //Левый кодер
#define pin_channelB_left 6
int b =0;

void setup() {
  Serial.begin(9600);
  pinMode(pwmG,OUTPUT) ; 
  pinMode(DirG,OUTPUT) ; 
  attachInterrupt(digitalPinToInterrupt(encoder1_CHA),interruptUp,RISING);
  
  }
  
void interruptUp(){
  b = !b;
  
}

void loop() {
  Serial.println(b);
  //Serial.print(" ");
  pwm();
  
  //Serial.println(а);
  

 
  //Serial.println(b);
}

void pwm(){
   for (int i =0; i< 10; i++){
      a = a +5;
      analogWrite(pwmG, a);
      
      Serial.println(a);
      delay(200);
      }
      //Serial.println(b);
      
  for (int i =0; i< 10; i++){
    a = a -5;
    analogWrite(pwmG, a);
    
    Serial.println(a);
    delay(200);
  }
}

Что у меня есть:

То, что я ожидал (пример найден в Интернете: Чего я ожидал (пример найден в Интернете

, 👍3

Обсуждение

Посмотрите на результат вашего скетча на последовательном мониторе, а не на плоттере. Должно сразу стать ясно, что происходит., @Edgar Bonet


1 ответ


3

Во-первых, последовательный плоттер будет отображать значения во времени, соединяя их прямой линией. Именно так он представляет данные на графике (только для специальной визуализации, а не для детального построения графиков и анализа данных).

Второй момент заключается в том, что для каждого шага вы отправляете только одно значение через последовательный интерфейс, то есть только одну точку данных на шаг. Затем последовательный плоттер отображает эту точку данных в зависимости от времени и соединяет ее с точками для других шагов прямой линией. Таким образом, вы получаете наклонные линии/треугольники в последовательном плоттере.

Изображение, которое вы ожидали, похоже на осциллограф. Это будет иметь гораздо больше точек данных вдоль оси X, а не только одну на шаг. Таким образом, вы действительно можете увидеть шаги. Если вы хотите воспроизвести изображение с помощью своего кода, вы можете отправлять текущее значение a чаще на каждой итерации цикла for (например, 20-кратный цикл отправки значения и задержка около 10 мс). .

,