0

我正在尝试设置计时器,之后音频将自动播放一次,但它不会播放任何噪音,但是当我单独运行音频程序时,它工作得非常好

这是我的代码,请帮助我找出我做错的地方。

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
#include <SD.h>
#include <TMRpcm.h>
#include <SPI.h>

int timer1_counter;
#define SD_ChipSelectPin 4
TMRpcm tmrpcm;

unsigned long time_now = 0;
LiquidCrystal_I2C lcd(0x27, 16, 2);
const byte ledPin = 13;

const byte interruptPin1 = 2;
const byte interruptPin2 = 3;
int counter2 = 0;

volatile byte state = LOW;
int count = 0;

int limit = 0;
bool TimerFlag = false;
int deviceTime = 0;

int set = 5;
bool soundplayflag = false;

void setup() 
{
    lcd.begin();
    Serial.begin(9600);
    pinMode(ledPin, OUTPUT);
    pinMode(interruptPin1, INPUT_PULLUP);
    pinMode(interruptPin2, INPUT_PULLUP);
    pinMode(set, INPUT_PULLUP);

    lcd.backlight();
    lcd.setCursor(1,0);
    lcd.print("Please Select:");

    noInterrupts();           // disable all interrupts

    TCCR1A = 0;

    TCCR1B = 0;

    TCNT1  = 0;

    OCR1A = 31250;            // compare match register 16MHz/256/2Hz

    TCCR1B |= (1 << WGM12);   // CTC mode

    TCCR1B |= (1 << CS12);    // 256 prescaler 

    TIMSK1 |= (1 << OCIE1A);  // enable timer compare interrupt

    interrupts();             // enable all interrupts
    // initialize timer1 
}

ISR(TIMER1_COMPA_vect)          // timer compare interrupt service routine
{
    if (soundplayflag == true)
    {
        counter2 = counter2+1;
        Serial.println(counter2/2);
    }
}

void loop() 
{
    //unsigned long currentMillis = millis();
    int up = digitalRead(interruptPin1);
    int down = digitalRead(interruptPin2);
    int setbutton = digitalRead(set);

    delay(230);

    if (up == 0)
    {
        Serial.println("Entering up");
        count++;
        if (count >= 0) {
            lcdprint(count);    
        }

    }
    else if (down == 0)
    {
        Serial.println("Entering down");
        count--;
        if (count >= 0) {
            lcdprint(count);
        }

    }
    else if (setbutton == 0)
    {
        Serial.println("Entering set");
        soundplayflag=true;
        deviceTime = count;
    }

    if (deviceTime > 0)
    {
        if (deviceTime == counter2)
        {
            soundplayflag=false;
            Serial.println("Hello world");
            PlaySound();
            counter2 = 0;
        }
    }
}

int lcdprint(int a)
{
    lcd.clear();
    lcd.setCursor(1,0);
    lcd.print("Please Select:");

    lcd.setCursor (7,1);
    lcd.print(a);
    Serial.println(a);

    lcd.setCursor (10,1);
    lcd.print("Min");
}// end of lcdprint(int a)


void PlaySound()
{
    for (int i = 0; i < 10; i++)
    {
        tmrpcm.setVolume(5);
        tmrpcm.play("3.wav");
        delay(1000);
    }// end of for loop
}// end of void PlaySound()

我的预期输出是它应该在我设置时间时播放声音

4

1 回答 1

0

似乎TMRpcm 使用 Timer1,这与您的TIMER1_COMPA_vect. 这将解释为什么如果你什么都不运行它会起作用。

也许尝试使用#define USE_TIMER2

于 2019-09-03T07:26:24.207 回答