Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 1916|回復: 1
打印 上一主題 下一主題

IRremote的問題

[複製鏈接]
跳轉到指定樓層
1#
發表於 2015-3-3 00:18:32 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
小弟最近用了以下電子零件:Arduino uno*1
步進馬達+輪胎*2
L198N*1
紅外線搖控器*1
拼湊成一台紅外線搖控小車
以下是小弟的程式,想請教線上的先進大大們,程式該怎麼修改才好
  1. #include <IRremote.h>
  2. const int ENA = 5;
  3. const int IN1 = 6;
  4. const int IN2 = 7;
  5. const int IN3 = 8;
  6. const int IN4 = 9;
  7. const int ENB = 10;
  8. const int RECV_PIN = 11;
  9. IRrecv irrecv(RECV_PIN);
  10. decode_results results;
  11. int motorSpeed = 255;
  12. int act = 0;
  13. const int delayTime = 1000;
  14. //motor act
  15. void forward(){
  16.   analogWrite(ENA,motorSpeed);
  17.   analogWrite(ENB,motorSpeed);
  18.   digitalWrite(IN1,HIGH);
  19.   digitalWrite(IN2,LOW);
  20.   digitalWrite(IN3,HIGH);
  21.   digitalWrite(IN4,LOW);
  22. }

  23. void backward(){
  24.   analogWrite(ENA,motorSpeed);
  25.   analogWrite(ENB,motorSpeed);
  26.   digitalWrite(IN1,LOW);
  27.   digitalWrite(IN2,HIGH);
  28.   digitalWrite(IN3,LOW);
  29.   digitalWrite(IN4,HIGH);
  30. }

  31. void turnLeft(){
  32.   analogWrite(ENA,motorSpeed);
  33.   analogWrite(ENB,motorSpeed);
  34.   digitalWrite(IN1,LOW);
  35.   digitalWrite(IN2,HIGH);
  36.   digitalWrite(IN3,HIGH);
  37.   digitalWrite(IN4,LOW);
  38. }

  39. void turnRight(){
  40.   analogWrite(ENA,motorSpeed);
  41.   analogWrite(ENB,motorSpeed);
  42.   digitalWrite(IN1,HIGH);
  43.   digitalWrite(IN2,LOW);
  44.   digitalWrite(IN3,LOW);
  45.   digitalWrite(IN4,HIGH);
  46. }

  47. void motorStop(){
  48.   analogWrite(ENA,0);
  49.   analogWrite(ENB,0);
  50.   digitalWrite(IN1,LOW);
  51.   digitalWrite(IN2,LOW);
  52.   digitalWrite(IN3,LOW);
  53.   digitalWrite(IN4,LOW);
  54. }

  55. void motorCmd(){
  56.   switch(results.value){
  57.     case 16736925: //up
  58.     act = 1;
  59.     break;
  60.     case 16754775: //down
  61.     act = 2;
  62.     break;
  63.     case 16720605: //left
  64.     act = 3;
  65.     break;
  66.     case 16761405: //right
  67.     act = 4;
  68.     break;
  69.   }
  70. }

  71. void motorAct(int act = 0){
  72.   switch(act){
  73.     case 1: //up
  74.     forward();
  75.     delay(delayTime);
  76.     motorStop();
  77.     break;
  78.     case 2: //down
  79.     backward();
  80.     delay(delayTime);
  81.     motorStop();
  82.     break;
  83.     case 3: //left
  84.     turnLeft();
  85.     delay(delayTime);
  86.     motorStop();
  87.     break;
  88.     case 4: //right
  89.     turnRight();
  90.     delay(delayTime);
  91.     motorStop();
  92.     break;
  93.     default:
  94.     motorStop();
  95.   }
  96. }

  97. void setup(){
  98.   Serial.begin(9600);
  99.   irrecv.enableIRIn();
  100.   pinMode(ENA,OUTPUT);
  101.   pinMode(IN1,OUTPUT);
  102.   pinMode(IN2,OUTPUT);
  103.   pinMode(IN3,OUTPUT);
  104.   pinMode(IN4,OUTPUT);
  105.   pinMode(ENB,OUTPUT);
  106. }

  107. void loop(){
  108.   if(irrecv.decode(&results)){
  109.     motorCmd();
  110.     motorAct(act);
  111.     irrecv.resume();
  112.   }
  113. }
複製代碼


小弟是想請問,當接收到搖控器的指令後,小車就做動作是沒有問題的
目前小弟的寫法是接收到紅外線,就做相對的動作一秒鐘,然後就停止馬達轉動
但是小弟希望當沒有接收到任何紅外線時,小車是停止不動的,有接收到紅外線才會動

請問這個部份應該要如何修改才對????
2#
發表於 2015-3-3 08:12:00 | 只看該作者
回復 1# mojamoja1202


設一變數記錄按下鍵的時間,然後在驅動馬達時減去馬達轉動的時間,
直到時間為0 馬達就停止.
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2025-1-31 07:19 , Processed in 0.142094 second(s), 7 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表