Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Timer 使用Arduino中的计时器寄存器是否可以获得2秒延迟?_Timer_Arduino_Adc - Fatal编程技术网

Timer 使用Arduino中的计时器寄存器是否可以获得2秒延迟?

Timer 使用Arduino中的计时器寄存器是否可以获得2秒延迟?,timer,arduino,adc,Timer,Arduino,Adc,我现在正在做一个简单的项目。我需要写一个代码,在定时器和ADC寄存器的帮助下,每秒钟改变电位计的值。我用定时器0来完成这个任务,一切正常,但是串行监视器的输出变化很快,不是在2秒内。为什么会这样 我的代码: void setup() { TCCR0A = 0; //reset the register TCCR0B = 0; //reset the register OCR0A = 0; //reset the register TCCR0A = (1 << C

我现在正在做一个简单的项目。我需要写一个代码,在定时器和ADC寄存器的帮助下,每秒钟改变电位计的值。我用定时器0来完成这个任务,一切正常,但是串行监视器的输出变化很快,不是在2秒内。为什么会这样

我的代码:

void setup()
{
  TCCR0A = 0; //reset the register
  TCCR0B = 0; //reset the register
  OCR0A = 0;  //reset  the register

  TCCR0A = (1 << COM0A1)|(0 << WGM01) | ( 0 << WGM00);
  TCCR0B = (1 << CS02)  |(1 << CS00); //1024 prescaler 

  ADCSRA = (1 << ADEN) | ( 1 << ADSC); 
  //enabling the ADC with shifting ADEN by 1
  ADMUX  = (1 << REFS0)| (1<<MUX0) | (0 << MUX1) | (1 << MUX2);
  //shifting REFS0 by 1 means setting it as AVCC
  //shifting MUX0 and MUX2 by 1 means setting A5 pin on

  Serial.begin(9600);

}

void loop() {

  int highval = ADCH; //Data Register High
  int lowwal = ADCL; //Data Register Low
  int sensval = analogRead(A5);

  uint8_t answer; 
  answer = ((highval) * 256 + lowwal) * 5 / 1023; 

  if(TCNT0 == 0xF1) {
        Serial.println(answer);
  }
  if(TCNT0 == 0x00) {
        Serial.println(answer);
  }

}

void timdel() {

  TCNT0 = 0xF1;     // 2 seconds 
}
void setup()
{
TCCR0A=0;//重置寄存器
TCCR0B=0;//重置寄存器
OCR0A=0;//重置寄存器

TCCR0A=(1Arduinos通常在16MHz cpu时钟上运行。您已将预分频器设置为1024和8位计时器/计数器0。因此,它每隔
1/(16000000/1024/256)
ie
16.384ms
溢出一次


但是您可以使用16位T/C 1。您可以在4秒内获得时间。但是我会使用CTC模式及其相应的标志(无中断)。

timdel()应该做什么?它永远不会被调用。TCNT0等于2秒,但当我在if语句中调用它时,它仍然不起作用。