Robofun 機器人論壇

標題: ATDUINO程式問題 [打印本頁]

作者: ypyp3399    時間: 2013-9-6 18:36
標題: ATDUINO程式問題
想請問如何使用紅外線感測計數輪子轉動的圈數程式如下
  1. const int PIRSensor = 2;
  2. int val = 0;
  3. void setup()
  4. {
  5.   Serial.begin(9600);
  6.   pinMode(PIRSensor,INPUT);
  7.   pinMode(13,OUTPUT);
  8. }
  9. void loop(){


  10.   int i;
  11.   i = digitalRead(PIRSensor);
  12.   if(i == LOW){
  13.   digitalWrite(13,HIGH);
  14.   val += val + 1;

  15.   }

  16.   
  17.    Serial.print(val);
  18.    delay(1000);
  19. }
複製代碼

這是我計數的程式可是我要如何加到我的自動車程式中,我想再直線前進的時候用紅外感測來控制輪子轉的圈數達到我要的,已圈數控制直線距離。下面是車子的程式
  1. #include <HMC5883L.h>
  2. #include <Wire.h>

  3. HMC5883L compass;

  4. void Angle()
  5. {
  6.   MagnetometerRaw raw = compass.ReadRawAxis();
  7.   MagnetometerScaled scaled = compass.ReadScaledAxis();
  8.   float yHeading = atan2(scaled.ZAxis, scaled.XAxis);

  9.   if(yHeading < 0) yHeading += 2*PI;
  10.   if(yHeading > 2*PI) yHeading -= 2*PI;

  11.   int yDegrees = yHeading * 180/M_PI;

  12.   Serial.print(yDegrees);
  13.   Serial.print(",");
  14.   delay(500);
  15. }
  16. void setup()
  17. {
  18.   Serial.begin(9600);
  19.   Wire.begin();
  20.   compass = HMC5883L();
  21.   compass.SetScale(1.3);
  22.   compass.SetMeasurementMode(Measurement_Continuous);
  23.   pinMode(9, OUTPUT);
  24.   pinMode(DAC0, OUTPUT);
  25.   pinMode(11, OUTPUT);
  26.   pinMode(DAC1, OUTPUT);
  27. }

  28. void loop()
  29. {
  30.   int i;
  31.   do{
  32.   digitalWrite(9, LOW);
  33.   analogWrite(DAC0, 35);
  34.   digitalWrite(11, LOW);
  35.   analogWrite(DAC1, 90);
  36.   MagnetometerRaw raw = compass.ReadRawAxis();
  37.   MagnetometerScaled scaled = compass.ReadScaledAxis();
  38.   float yHeading = atan2(scaled.ZAxis, scaled.XAxis);
  39.   if(yHeading < 0) yHeading += 2*PI;
  40.   if(yHeading > 2*PI) yHeading -= 2*PI;
  41.   int yDegrees = yHeading * 180/M_PI;
  42.   Serial.print(yDegrees);
  43.   Serial.print(",");
  44.   i=yDegrees;
  45.   }
  46.   while((i > 29) || (i < 27));
  47.   digitalWrite(9, LOW);
  48.   analogWrite(DAC0, 35);
  49.   digitalWrite(11, LOW);
  50.   analogWrite(DAC1, 35);
  51.   delayMicroseconds(500);
  52. do{
  53.   digitalWrite(9, LOW);
  54.   analogWrite(DAC0, 110);
  55.   digitalWrite(11, LOW);
  56.   analogWrite(DAC1, 110);
  57.   MagnetometerRaw raw = compass.ReadRawAxis();
  58.   MagnetometerScaled scaled = compass.ReadScaledAxis();
  59.   float yHeading = atan2(scaled.ZAxis, scaled.XAxis);
  60.   if(yHeading < 0) yHeading += 2*PI;
  61.   if(yHeading > 2*PI) yHeading -= 2*PI;
  62.   int yDegrees = yHeading * 180/M_PI;
  63.   Serial.print(yDegrees);
  64.   Serial.print(",");
  65.   i=yDegrees;
  66. }
  67. while((i > 29) || (i < 27));
  68. delayMicroseconds(8000000);

  69. do{
  70.   digitalWrite(9, LOW);
  71.   analogWrite(DAC0, 35);
  72.   digitalWrite(11,LOW);
  73.   analogWrite(DAC1, 90);
  74.   MagnetometerRaw raw = compass.ReadRawAxis();
  75.   MagnetometerScaled scaled = compass.ReadScaledAxis();
  76.   float yHeading = atan2(scaled.ZAxis, scaled.XAxis);
  77.   if(yHeading < 0) yHeading += 2*PI;
  78.   if(yHeading > 2*PI) yHeading -= 2*PI;
  79.   int yDegrees = yHeading * 180/M_PI;
  80.   Serial.print(yDegrees);
  81.   Serial.print(",");
  82.   i=yDegrees;
  83. }
  84.   while((i > 278) || (i < 276));
  85.   digitalWrite(9, LOW);
  86.   analogWrite(DAC0, 35);
  87.   digitalWrite(11, LOW);
  88.   analogWrite(DAC1, 35);
  89.   delayMicroseconds(500);

  90. do{
  91.   digitalWrite(9, LOW);
  92.   analogWrite(DAC0, 110);
  93.   digitalWrite(11, LOW);
  94.   analogWrite(DAC1, 110);
  95.   MagnetometerRaw raw = compass.ReadRawAxis();
  96.   MagnetometerScaled scaled = compass.ReadScaledAxis();
  97.   float yHeading = atan2(scaled.ZAxis, scaled.XAxis);
  98.   if(yHeading < 0) yHeading += 2*PI;
  99.   if(yHeading > 2*PI) yHeading -= 2*PI;
  100.   int yDegrees = yHeading * 180/M_PI;
  101.   Serial.print(yDegrees);
  102.   Serial.print(",");
  103.   i=yDegrees;
  104. }
  105. while((i > 278) || (i < 276));
  106. delayMicroseconds(8000000);

  107. }
複製代碼

作者: vegewell    時間: 2013-9-9 21:16
回復 1# ypyp3399

建議你試把這行
delayMicroseconds(8000000);
改成:
for (int x=0; x <= ???; x++){
        int j;
  j = digitalRead(PIRSensor);
  if(j == LOW){
  digitalWrite(13,HIGH);
  val += val + 1;
   } }
??? >也許2000至4000之間




歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/) Powered by Discuz! X3.2