2016-08-31 28 views
0

私はarduinoの初心者です。私は副鼻腔波発生器を作ろうとしています。私は最近、すべてをメインのvoidループに入れることができないことがわかったので、割り込みを使用しようとしています。私は割り込み(遅延)内の変数を変更することに問題がある、私は間違いがどこにあるのか分からない。arduino割り込み変数が動作しない

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;  
} 
+0

'void setup'では、' pinMode(sensorPin、INPUT);を変更します。 'to' 'pinMode(sensorPin、INPUT_PULLUP);'。平均 'INPUT'は' RISING/FALLING'エッジを含まない。 @yuuhanC – dsgdfg

答えて

0

EDIT

これを試してみてください:

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

は、その見てみる試してみてください は、ここに私のコードです。

あなたはどのモデルを使用していますか?

+0

私は間違ったピンを使用していたことを知っていました。ピン2またはピン3でやっているはずです。しかし、それでも正常に動作していません。私はボタンを押すと遅延が変化するシリアルモニタを見ます。変更されません:/ – nyuhanC

+0

oそれは定期的な遅延()と動作しているようだ、何が間違ってからdelayMicroseconds ?? – nyuhanC

+0

@nyuhanC良い質問、それはちょうどハードウェアの不具合かもしれない、ボードに依存する可能性があります。私はdelay()がすべてのボード上で動作することを知っています。ループに遅れを入れ、ループを通してコードを実行する価値があるかもしれません。 – Astrify

0

私が今トラブルを引き起こす唯一の事はボタンです。私がそれを押すと、ボタンを何回か押したように(2,3または4倍)反応することがよくあります。

これは私の最終的なコードです。 voidループの実行時間は12マイクロ秒ですから、私は20,40 & 60Hzでジェネレータを実行するのに必要な遅延を計算しました。

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); 
} 
関連する問題