请问一下,下面的平衡车代码中,为何定时器中断是放在初始化函数中执行的,而不是放在LOOP主程序中,新手有点理解不了程序执行的顺序了! 谢谢!
- void setup()
- {
- //---------------
- // Wire.begin();
- Serial.begin(9600);
- accelgyro.initialize();
- delay(100);
- pinMode(TN1,OUTPUT);
- pinMode(TN2,OUTPUT);
- pinMode(TN3,OUTPUT);
- pinMode(TN4,OUTPUT);
- pinMode(ENA,OUTPUT);
- pinMode(ENB,OUTPUT);
- //Serial.println("ki ka kb kc");
- delay(100);
- // -----------
- pinMode(PinA,INPUT); //D2脚为输入
- pinMode(PinB,INPUT); //D3脚为输入
- attachInterrupt(0, blinkA,FALLING); //注册中断0调用函数blinkA
- attachInterrupt(1, blinkB, FALLING); //注册中断1调用函数blinkB
- pinMode(encoderPinA, INPUT);
- pinMode(encoderPinB, INPUT);
- digitalWrite(encoderPinA, HIGH);
- digitalWrite(encoderPinB, HIGH);
- // time = millis(); //时间初值
- delay(100);
- FlexiTimer2::set(10, flash); // call every 500 1ms "ticks"
- FlexiTimer2::start();
- }
- void loop()
- {
- accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz); //读取6050的值
- SDEER(); //调用中断函数,蓝牙控制WSAD
- kp=analogRead(0)*0.005;
- ki=analogRead(1)*0.005;
- kd=analogRead(2)*0.005;
- kpp=analogRead(3)*0.005;
- PWMB(); //电机中断函数,两个电机,前后左右转动
-
- // Serial.print(position_dot);
- // Serial.print(',');
- /*
- Serial.print(countA);
- Serial.print(',');
- Serial.print(countB);
- Serial.print(',');
- Serial.print(angleA);
- Serial.print(',');
- Serial.print(omega);
- Serial.print(',');
- Serial.println(Output);
- */
- }
复制代码 |