テスト

Dependencies:   RemoteIR TB6612FNG2 mbed

Fork of RemoteIR_TestProgram by Shinichiro Nakamura

Revision:
6:9bddde38e25e
Parent:
5:40750d5779ca
diff -r 40750d5779ca -r 9bddde38e25e main.cpp
--- a/main.cpp	Wed Oct 13 10:51:41 2010 +0000
+++ b/main.cpp	Wed Dec 23 16:59:17 2015 +0000
@@ -1,33 +1,14 @@
-/**
- * RemoteIR library - Test program.
- *
- * Copyright (C) 2010 Shinichiro Nakamura (CuBeatSystems)
- * http://shinta.main.jp/
- */
-
-#include <mbed.h>
+#include "mbed.h"
 
 #include "ReceiverIR.h"
 #include "TransmitterIR.h"
-#include "TextLCD.h"
-
-#define TEST_LOOP_BACK  0
-
-ReceiverIR ir_rx(p15);
-TransmitterIR ir_tx(p21);
-TextLCD lcd(p24, p26, p27, p28, p29, p30);
-BusOut led(LED4, LED3, LED2, LED1);
-Ticker ledTicker;
+#include "TB6612.h"
 
-/**
- * Receive.
- *
- * @param format Pointer to a format.
- * @param buf Pointer to a buffer.
- * @param bufsiz Size of the buffer.
- *
- * @return Bit length of the received data.
- */
+ReceiverIR ir_rx(p14);
+TransmitterIR ir_tx(p23);
+TB6612 MOTOR_A(p21,p19,p20);            // PWM IN1 IN2
+TB6612 MOTOR_B(p22,p29,p30);            // PWM IN1 IN2
+
 int receive(RemoteIR::Format *format, uint8_t *buf, int bufsiz, int timeout = 100) {
     int cnt = 0;
     while (ir_rx.getState() != ReceiverIR::Received) {
@@ -39,15 +20,6 @@
     return ir_rx.getData(format, buf, bufsiz * 8);
 }
 
-/**
- * Transmit.
- *
- * @param format Format.
- * @param buf Pointer to a buffer.
- * @param bitlength Bit length of the data.
- *
- * @return Bit length of the received data.
- */
 int transmit(RemoteIR::Format format, uint8_t *buf, int bitlength, int timeout = 100) {
     int cnt = 0;
     while (ir_tx.getState() != TransmitterIR::Idle) {
@@ -59,148 +31,91 @@
     return ir_tx.setData(format, buf, bitlength);
 }
 
-/**
- * Display a current status.
- */
-void display_status(char *status, int bitlength) {
-    lcd.locate(8, 0);
-    lcd.printf("%-5.5s:%02d", status, bitlength);
+int SearchCode( uint8_t *code ,uint8_t **buf , int size)
+{
+    int ret = -1;
+    for(int i=0;i<5;i++)
+    {
+        if(memcmp( code , buf[i] , size ) == 0 ){
+            ret = i;
+            break;
+        }
+    }
+    return(ret);
 }
 
-/**
- * Display a format of a data.
- */
-void display_format(RemoteIR::Format format) {
-    lcd.locate(0, 0);
-    switch (format) {
-        case RemoteIR::UNKNOWN:
-            lcd.printf("????????");
-            break;
-        case RemoteIR::NEC:
-            lcd.printf("NEC     ");
-            break;
-        case RemoteIR::NEC_REPEAT:
-            lcd.printf("NEC  (R)");
-            break;
-        case RemoteIR::AEHA:
-            lcd.printf("AEHA    ");
-            break;
-        case RemoteIR::AEHA_REPEAT:
-            lcd.printf("AEHA (R)");
-            break;
-        case RemoteIR::SONY:
-            lcd.printf("SONY    ");
-            break;
-    }
-}
+void RegistrationCode(uint8_t *forward ,uint8_t *back ,uint8_t *left ,uint8_t *right ,uint8_t *stop)
+{
+    uint8_t buf[32];
+    int bitlength;
+    RemoteIR::Format format;
+    uint8_t *ir_buf[5] = {forward,back,left,right,stop};
+    
+    memset(buf, 0x00, sizeof(buf));
+    
+    for(int i=0;i<5;i++)
+    {
+        bitlength = -1;
+        while(bitlength < 0)
+        {
+            bitlength = receive(&format, buf, sizeof(buf));
+            if (bitlength < 0) {
+                continue;
+            }
+            
+            if( SearchCode(buf,ir_buf,sizeof(buf)) != -1 )
+            {
+                bitlength = -1;
+                continue;
+            }
 
-/**
- * Display a data.
- *
- * @param buf Pointer to a buffer.
- * @param bitlength Bit length of a data.
- */
-void display_data(uint8_t *buf, int bitlength) {
-    lcd.locate(0, 1);
-    const int n = bitlength / 8 + (((bitlength % 8) != 0) ? 1 : 0);
-    for (int i = 0; i < n; i++) {
-        lcd.printf("%02X", buf[i]);
-    }
-    for (int i = 0; i < 8 - n; i++) {
-        lcd.printf("--");
+            memcpy( ir_buf[i] , buf , sizeof(buf));
+        }
     }
 }
 
-void ledfunc(void) {
-    led = led + 1;
-}
-
-/**
- * Entry point.
- */
 int main(void) {
-
-    ledTicker.attach(&ledfunc, 0.5);
+    
+    uint8_t forward[32],back[32],left[32],right[32],stop[32];
+    uint8_t *ir_buf[5] = {forward,back,left,right,stop};
 
-    /*
-     * Splash.
-     */
-    lcd.cls();
-    lcd.locate(0, 0);
-    lcd.printf("RemoteIR        ");
-    lcd.locate(0, 1);
-    lcd.printf("Program example.");
-    wait(3);
+    RegistrationCode( forward ,back  ,left ,right ,stop);
 
-    /*
-     * Initialize.
-     */
-    led = 0;
-    lcd.cls();
-    lcd.locate(0, 0);
-    lcd.printf("Press a button  ");
-    lcd.locate(0, 1);
-    lcd.printf("on a controller.");
-
-    /*
-     * Execute.
-     */
     while (1) {
-        uint8_t buf1[32];
-        uint8_t buf2[32];
+        uint8_t buf[32];
         int bitlength1;
-        int bitlength2;
         RemoteIR::Format format;
 
-        memset(buf1, 0x00, sizeof(buf1));
-        memset(buf2, 0x00, sizeof(buf2));
+        memset(buf, 0x00, sizeof(buf));
 
-        {
-            bitlength1 = receive(&format, buf1, sizeof(buf1));
-            if (bitlength1 < 0) {
-                continue;
-            }
-            display_status("RECV", bitlength1);
-            display_data(buf1, bitlength1);
-            display_format(format);
-        }
-
-#if TEST_LOOP_BACK
-        wait_ms(100);
-
-        {
-            bitlength1 = transmit(format, buf1, bitlength1);
-            if (bitlength1 < 0) {
-                continue;
-            }
-            display_status("TRAN", bitlength1);
-            display_data(buf1, bitlength1);
-            display_format(format);
+        bitlength1 = receive(&format, buf, sizeof(buf));
+        if (bitlength1 < 0) {
+            continue;
         }
-
-        wait_ms(100);
-
+        switch(SearchCode(buf,ir_buf,sizeof(buf)))
         {
-            bitlength2 = receive(&format, buf2, sizeof(buf2));
-            if (bitlength2 < 0) {
-                continue;
-            }
-            display_status("RECV", bitlength2);
-            display_data(buf2, bitlength2);
-            display_format(format);
+        case 0: // forward
+            MOTOR_A = 100;
+            MOTOR_B = 100;
+            break;
+        case 1: // back
+            MOTOR_A = -100;
+            MOTOR_B = -100;
+            break;
+        case 2: // left
+            MOTOR_A = 100;
+            MOTOR_B = -100;
+            break;
+        case 3: // right
+            MOTOR_A = -100;
+            MOTOR_B = 100;
+            break;
+        case 4: // stop
+            MOTOR_A = 0;
+            MOTOR_B = 0;
+            break;
+        default:
+            break;
         }
-
-        wait_ms(100);
-
-        {
-            for (int i = 0; i < sizeof(buf1); i++) {
-                if (buf1[i] != buf2[i]) {
-                    display_status("CPERR", bitlength2);
-                    wait(1);
-                    continue;
-                }
-            }
-        }
-#endif
     }
 }
\ No newline at end of file