电脑用的是很老的笔记本,操作系统是ubuntu22,编程环境是Arduino IDE2.2.1。
写的代码中有两部本内容互相冲突。代码如下:
设置time0
unsigned long count=0;
int angle=0;
char val = '\0';
void setup(){
Serial.begin(9600);
pinMode(7,OUTPUT);
noInterrupts();
TCCR0A = 0;// set entire TCCR1A register to 0
TCCR0B = 0;// same for TCCR1B
TCNT0 = 0;//initialize counter value to 0
// set compare match register for 100Mhz increments
OCR0A = 15;// = (16*10^6) / (100000*8) - 1 (must be <65536)
// turn on CTC mode
TCCR0A |= (1 << WGM01);
// Set CS10 and CS12 bits for 8 prescaler
TCCR0B |= (1 << CS00);
// enable timer compare interrupt
TIMSK0 |= (1 << OCIE0A);
interrupts();
}
100MHz中断一次,控制引脚电压
ISR (TIMER0_COMPA_vect){// timer0中断100MHz方波控制电机
if(count>=0 && count<=map(angle,0,180,50,250)){
digitalWrite(7, HIGH);
}else if (count>map(angle,0,180,50,250) && count<2000) {
digitalWrite(7, LOW);
}else {
count=0;
}
++count;
接受串口命令
void loop(){
());
if(Serial.available()){
val=Serial.read();
switch (val) {
case 'b':
angle = Serial.parseInt();
Serial.println(angle);
break;
}
}
}
问题一、开启Time0中断后无法接受串口命令。关闭中断后正常可以接受串口命令。
问题二、全部代码上传Arduino uno3后,电机直接转到180度。
问题三、以上代码无论使用Timer0,1,2。影响一样。串口通讯和定时器之间是有什么影响么?使用Servo库函数就没有影响。实在是搞不懂。