产生不同频率的脉冲

Creating different frequency pulses

本文关键字:脉冲 频率      更新时间:2023-10-16

我想用我的uno创建同时工作的不同频率的脉冲。我刚刚设置了如下内容。当我在uno上执行程序时,两个函数都以相同的频率工作。我希望其中一个在1秒内创造一个高值,然后变为低值,另一个在1ms内创造高值,再变为低。这可能吗?如果是,那怎么办?

    int dirPin = 8;
    int stepPin = 9;

    void setup()
    {
      pinMode(dirPin,OUTPUT);
      pinMode(stepPin,OUTPUT);
    }
    void stepper()
    {
      digitalWrite(stepPin,HIGH);
      delay(1);
      digitalWrite(stepPin,LOW);
      delay(1);
    }
    void dir()
    {
          digitalWrite(dirPin,HIGH);
          delay(1000);
          digitalWrite(dirPin,LOW);
          delay(1000);
    }
    void loop()
    {
//interrupts functions from here https://www.arduino.cc/en/Referenc/Interrupts
    noInterrupts();
    dir();
    interrupts();
    stepper();     

    }

您当前的代码不起作用,因为它按顺序调用dir()stepper(),也就是说,它只在等待dir()的整个周期两秒钟后才调用stepper()

要模拟同时调用两者,您应该执行以下操作:

void stepForOneSecond(){
    for(int i = 0; i < 500; ++i){
        digitalWrite(stepPin,HIGH);
        delay(1);
        digitalWrite(stepPin,LOW);
        delay(1);
    }
}
void loop(){
    digitalWrite(dirPin,HIGH);
    stepForOneSecond();
    digitalWrite(dirPin,HIGH);
    stepForOneSecond();
}

stepForOneSecond的调用将持续(大约)1秒,之后将切换"dirPin"的值。