arduino中断变量不起作用

时间:2016-08-31 21:54:32

标签: arduino

我是arduino的初学者,我正在尝试制作一个正弦波发生器。因为我最近发现我无法将所有内容都放入主void循环中,所以我试图使用中断。我在更改内部变量(延迟)时遇到问题,我不知道哪里出错了。 这是我的代码:

int sine256[]  = { //256 sin values from 0 to 2pi
};

int i = 0;
int sensorPin = 7;  
int outputPin = 6;
volatile float Delay = 10000;


void setup()
{  
  Serial.begin(9600);
  pinMode(outputPin, OUTPUT);
  pinMode(sensorPin, INPUT); 
  attachInterrupt(digitalPinToInterrupt(sensorPin), freq, RISING);

}
void loop()
{
  analogWrite(6,sine256[i]);
  i = i + 1;
  if(i == 256){
    i = 0; 
    } 

  Serial.println(Delay);

  delayMicroseconds(Delay);
}

void freq() {
  Delay = Delay/2;     
}

2 个答案:

答案 0 :(得分:0)

修改

试试这个:

int sine256[]  = { //256 sin values from 0 to 2pi
};

int i = 0;
int sensorPin = 7;  
int outputPin = 6;
volatile float Delay = 10000;


void setup()
{  
  Serial.begin(9600);
  pinMode(outputPin, OUTPUT);
  pinMode(sensorPin, INPUT); 
  //attachInterrupt(digitalPinToInterrupt(sensorPin), freq, RISING);

}
void loop()
{
  analogWrite(6,sine256[i]);
  i = i + 1;
  if(i == 256){
    i = 0; 
  } 

  Serial.println(Delay);

  freq();
  delay(Delay);
}

void freq() {
  Delay = Delay / 2;     
}

https://www.arduino.cc/en/Reference/AttachInterrupt

试着看一下。

您使用的是哪种型号?

答案 1 :(得分:0)

现在唯一让我烦恼的是按钮;当我按下它时,它经常响应,好像我多次按下按钮(2,3或4x)。

这是我现在的最终代码。由于无效循环的执行时间是12微秒,我计算了在20,40& 20上运行发电机所需的延迟。 60赫兹。

int sine256[]  = { //256 sin values from 0 to 2pi (from 0 to 255)
int i = 0;
int sensorPin = 2;  
volatile int outputPin = 7;
volatile float Delay = 1000;
int time1;
int time2;

void setup()
{  
  Serial.begin(9600);
  pinMode(outputPin, OUTPUT);
  pinMode(sensorPin, INPUT_PULLUP); 
  attachInterrupt(digitalPinToInterrupt(sensorPin), freq, FALLING);

}
void loop()
{  
  //time1 = micros();

  analogWrite(outputPin,sine256[i]);
  i = i + 1;
  if(i == 256){
    i = 0; 
    } 

  //time2 = micros();

  //Serial.println(time2 - time1);

  delay(Delay);
}

void freq() {  
  outputPin = 6;
  if(Delay == 0.02){
    analogWrite(6,LOW);
    outputPin = 7;
    Delay = 1000;
  }
  if(Delay == 0.04){
    Delay = 0.02;
  }
  if(Delay == 0.09){
    Delay = 0.04;
  }
  if((Delay == 1000)&&(outputPin == 6)){
    Delay = 0.09;
  } 
  Serial.println(Delay);  
}