Nagano kosen robocon

Dependencies:   mbed QEI

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers Switch.cpp Source File

Switch.cpp

00001 #include "Switch.h"
00002 
00003 #include <stdint.h>
00004 #include "mbed.h"
00005 
00006 namespace SWITCH {
00007     DigitalIn dipSw[] = {
00008         DigitalIn(DIP0_PIN),
00009         DigitalIn(DIP1_PIN),
00010         DigitalIn(DIP2_PIN),
00011         DigitalIn(DIP3_PIN),
00012     };
00013 
00014     DigitalIn limitSw(LS_PIN);
00015     DigitalOut selectPin[] = {
00016         DigitalOut(SELECT0_PIN),
00017         DigitalOut(SELECT1_PIN),
00018         DigitalOut(SELECT2_PIN),
00019         DigitalOut(SELECT3_PIN),
00020     };
00021     
00022     DigitalIn pushSw[] = {
00023         DigitalIn(SW0_PIN),
00024         DigitalIn(SW1_PIN),
00025         DigitalIn(SW2_PIN),
00026         DigitalIn(SW3_PIN),
00027         DigitalIn(SW4_PIN),
00028     };
00029 
00030     void DipSw::Initialize() {
00031         for(uint8_t i=0; i < sizeof(dipSw)/sizeof(dipSw[0]); i++) {
00032             dipSw[i].mode(PullUp);
00033         }
00034     }
00035 
00036     uint8_t DipSw::GetStatus() {
00037         if(DIP0 == SW_ON)       return 0;
00038         else if(DIP1 == SW_ON)  return 1;
00039         else if(DIP2 == SW_ON)  return 2;
00040         else if(DIP3 == SW_ON)  return 3;
00041 
00042         return 0;
00043     }
00044 
00045     void LimitSw::Initialize() {
00046         for(uint8_t i=0; i<4; i++) selectPin[i] = 0;
00047         limitSw.mode(PullUp);
00048     }
00049 
00050     bool LimitSw::IsPressed(uint8_t index) {
00051         // if(index > 0x0f) return false;
00052         MP_Channel ch;
00053         ch.all = 15-index;
00054 
00055         selectPin[0] = ch.s0;
00056         selectPin[1] = ch.s1;
00057         selectPin[2] = ch.s2;
00058         selectPin[3] = ch.s3;
00059 
00060         // while(1);
00061         wait_us(10);
00062         
00063         return limitSw ? false : true;
00064     }
00065     
00066     void PushSw::Initialize() {
00067         for(uint8_t i=0; i<4; i++) pushSw[i].mode(PullUp);
00068         pushSw[4].mode(PullNone);
00069     }
00070 
00071     bool PushSw::IsPressed(uint8_t index) {
00072         return pushSw[index] ? false : true;
00073     }
00074 }
00075