scan2
Dependencies: LcdAcm1602ni QEI mbed
scan2.cpp@0:ae1d54517aa0, 2018-03-22 (annotated)
- Committer:
- ekyykysn
- Date:
- Thu Mar 22 08:47:02 2018 +0000
- Revision:
- 0:ae1d54517aa0
test
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ekyykysn | 0:ae1d54517aa0 | 1 | /*--------------------------------ライブラリ------------------------------------*/ |
ekyykysn | 0:ae1d54517aa0 | 2 | // |
ekyykysn | 0:ae1d54517aa0 | 3 | // 以下の3つのライブラリを使用するので、それぞれのライブラリをImportする。 |
ekyykysn | 0:ae1d54517aa0 | 4 | // (1) EthernetInterface |
ekyykysn | 0:ae1d54517aa0 | 5 | // (2) mbed-rtos |
ekyykysn | 0:ae1d54517aa0 | 6 | // (3) TextLCD |
ekyykysn | 0:ae1d54517aa0 | 7 | |
ekyykysn | 0:ae1d54517aa0 | 8 | #include "mbed.h"//20170621 バージョン固定 |
ekyykysn | 0:ae1d54517aa0 | 9 | #include "LPC17xx.h"//LPCExpresso |
ekyykysn | 0:ae1d54517aa0 | 10 | #include "LcdAcm1602ni.h" |
ekyykysn | 0:ae1d54517aa0 | 11 | #include "string.h" |
ekyykysn | 0:ae1d54517aa0 | 12 | #include <limits.h> |
ekyykysn | 0:ae1d54517aa0 | 13 | //#include "TextLCD.h" |
ekyykysn | 0:ae1d54517aa0 | 14 | #include "Serial.h" |
ekyykysn | 0:ae1d54517aa0 | 15 | //#include "QEI.h" |
ekyykysn | 0:ae1d54517aa0 | 16 | # |
ekyykysn | 0:ae1d54517aa0 | 17 | /*-----------------------------------定義--------------------------------------*/ |
ekyykysn | 0:ae1d54517aa0 | 18 | |
ekyykysn | 0:ae1d54517aa0 | 19 | //MOTOR |
ekyykysn | 0:ae1d54517aa0 | 20 | #define CW 0 |
ekyykysn | 0:ae1d54517aa0 | 21 | #define CCW 1 |
ekyykysn | 0:ae1d54517aa0 | 22 | |
ekyykysn | 0:ae1d54517aa0 | 23 | |
ekyykysn | 0:ae1d54517aa0 | 24 | //MLED |
ekyykysn | 0:ae1d54517aa0 | 25 | #define OFF 0 |
ekyykysn | 0:ae1d54517aa0 | 26 | #define ON 1 |
ekyykysn | 0:ae1d54517aa0 | 27 | |
ekyykysn | 0:ae1d54517aa0 | 28 | /*--------------------------------ピン定義-------------------------------------*/ |
ekyykysn | 0:ae1d54517aa0 | 29 | |
ekyykysn | 0:ae1d54517aa0 | 30 | //MLED mbed内LEDの設定 |
ekyykysn | 0:ae1d54517aa0 | 31 | DigitalOut mled0(LED1); |
ekyykysn | 0:ae1d54517aa0 | 32 | DigitalOut mled1(LED2); |
ekyykysn | 0:ae1d54517aa0 | 33 | DigitalOut mled2(LED3); |
ekyykysn | 0:ae1d54517aa0 | 34 | DigitalOut mled3(LED4); |
ekyykysn | 0:ae1d54517aa0 | 35 | |
ekyykysn | 0:ae1d54517aa0 | 36 | //TextLCD lcd(p24, p26, p27, p28, p29, p30); |
ekyykysn | 0:ae1d54517aa0 | 37 | LcdAcm1602ni lcd(p28,p27);// sda,scl |
ekyykysn | 0:ae1d54517aa0 | 38 | |
ekyykysn | 0:ae1d54517aa0 | 39 | //インターフェイス |
ekyykysn | 0:ae1d54517aa0 | 40 | //LED |
ekyykysn | 0:ae1d54517aa0 | 41 | //DigitalOut open_led(p9); |
ekyykysn | 0:ae1d54517aa0 | 42 | //DigitalOut close_led(p10); |
ekyykysn | 0:ae1d54517aa0 | 43 | |
ekyykysn | 0:ae1d54517aa0 | 44 | //スイッチ |
ekyykysn | 0:ae1d54517aa0 | 45 | //DigitalIn close_sw(p19); |
ekyykysn | 0:ae1d54517aa0 | 46 | DigitalIn open_sw(p20); |
ekyykysn | 0:ae1d54517aa0 | 47 | |
ekyykysn | 0:ae1d54517aa0 | 48 | //エンコーダー |
ekyykysn | 0:ae1d54517aa0 | 49 | //InterruptIn pulse_input(p17); |
ekyykysn | 0:ae1d54517aa0 | 50 | |
ekyykysn | 0:ae1d54517aa0 | 51 | |
ekyykysn | 0:ae1d54517aa0 | 52 | //モーター① 入出力ピン |
ekyykysn | 0:ae1d54517aa0 | 53 | DigitalOut ccw_pwm(p21);//CW方向へ回転 |
ekyykysn | 0:ae1d54517aa0 | 54 | DigitalOut cw_pwm(p22);//CCW方向へ回転 |
ekyykysn | 0:ae1d54517aa0 | 55 | DigitalIn close_limit(p15); |
ekyykysn | 0:ae1d54517aa0 | 56 | DigitalIn open_limit(p16); |
ekyykysn | 0:ae1d54517aa0 | 57 | DigitalIn pulse_input(p9); |
ekyykysn | 0:ae1d54517aa0 | 58 | |
ekyykysn | 0:ae1d54517aa0 | 59 | Ticker flipper; |
ekyykysn | 0:ae1d54517aa0 | 60 | Serial pc(USBTX,USBRX); |
ekyykysn | 0:ae1d54517aa0 | 61 | /*-------------------------------グローバル変数---------------------------------*/ |
ekyykysn | 0:ae1d54517aa0 | 62 | |
ekyykysn | 0:ae1d54517aa0 | 63 | long wt = 500;//モーターパルス用変数 wt = 周期T/2 max500 |
ekyykysn | 0:ae1d54517aa0 | 64 | int dir = 1; |
ekyykysn | 0:ae1d54517aa0 | 65 | float tim_pulse = 0; |
ekyykysn | 0:ae1d54517aa0 | 66 | float lastpulse = 0; |
ekyykysn | 0:ae1d54517aa0 | 67 | float tim_d = 0; |
ekyykysn | 0:ae1d54517aa0 | 68 | int tim_arry[30] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; |
ekyykysn | 0:ae1d54517aa0 | 69 | int state = 0; |
ekyykysn | 0:ae1d54517aa0 | 70 | int nstep = 0; |
ekyykysn | 0:ae1d54517aa0 | 71 | int cstep = 0; |
ekyykysn | 0:ae1d54517aa0 | 72 | int count = 0; |
ekyykysn | 0:ae1d54517aa0 | 73 | int pulse = 0; |
ekyykysn | 0:ae1d54517aa0 | 74 | |
ekyykysn | 0:ae1d54517aa0 | 75 | /*-----------------------------set up -----------------------------------*/ |
ekyykysn | 0:ae1d54517aa0 | 76 | /*for (int i = 0; i < 2; i++) { |
ekyykysn | 0:ae1d54517aa0 | 77 | // pinMode(sw[i],INPUT_PULLUP); |
ekyykysn | 0:ae1d54517aa0 | 78 | pinMode(tim_pulse, INPUT_PULLUP); //光電センサ変更時に変更 プルダウン必要 |
ekyykysn | 0:ae1d54517aa0 | 79 | }*/ |
ekyykysn | 0:ae1d54517aa0 | 80 | /*-----------------------------flip 割り込み-----------------------------------*/ |
ekyykysn | 0:ae1d54517aa0 | 81 | //tim.mode(PullNone); |
ekyykysn | 0:ae1d54517aa0 | 82 | void flip(){ |
ekyykysn | 0:ae1d54517aa0 | 83 | //tim_pulse = tim.read(); |
ekyykysn | 0:ae1d54517aa0 | 84 | //tim_d = last_tim - tim_pulse; |
ekyykysn | 0:ae1d54517aa0 | 85 | //last_tim = tim_pulse; |
ekyykysn | 0:ae1d54517aa0 | 86 | //palse = wheel.getPulses(); |
ekyykysn | 0:ae1d54517aa0 | 87 | //wheel.reset(); |
ekyykysn | 0:ae1d54517aa0 | 88 | //rpm = 60000*palse/1024; |
ekyykysn | 0:ae1d54517aa0 | 89 | mled1 = ON; |
ekyykysn | 0:ae1d54517aa0 | 90 | pulse = pulse_input.read(); |
ekyykysn | 0:ae1d54517aa0 | 91 | //pc.printf("%d",pulse); |
ekyykysn | 0:ae1d54517aa0 | 92 | if (pulse != lastpulse){ |
ekyykysn | 0:ae1d54517aa0 | 93 | //ラストパルス(一つ前のパルス)と同じではないとき !←同じでない |
ekyykysn | 0:ae1d54517aa0 | 94 | if (pulse == 1) count ++; //パルスが1の時カウント |
ekyykysn | 0:ae1d54517aa0 | 95 | lcd.initialize(); |
ekyykysn | 0:ae1d54517aa0 | 96 | lcd.locate(0,1); |
ekyykysn | 0:ae1d54517aa0 | 97 | lcd.printf(" count"); |
ekyykysn | 0:ae1d54517aa0 | 98 | //pc.printf("%d",count); |
ekyykysn | 0:ae1d54517aa0 | 99 | mled2 = ON; |
ekyykysn | 0:ae1d54517aa0 | 100 | } |
ekyykysn | 0:ae1d54517aa0 | 101 | lastpulse = pulse; //00または、11の意味 |
ekyykysn | 0:ae1d54517aa0 | 102 | mled3 = ON; |
ekyykysn | 0:ae1d54517aa0 | 103 | //pc.printf("int : %d",pulse_input); |
ekyykysn | 0:ae1d54517aa0 | 104 | } |
ekyykysn | 0:ae1d54517aa0 | 105 | |
ekyykysn | 0:ae1d54517aa0 | 106 | /*-----------------------------シリアル通信-------------------------------------*/ |
ekyykysn | 0:ae1d54517aa0 | 107 | /*int recvStr(void) { |
ekyykysn | 0:ae1d54517aa0 | 108 | int i = 0, flg = 0; |
ekyykysn | 0:ae1d54517aa0 | 109 | char c, buf[30] = ""; |
ekyykysn | 0:ae1d54517aa0 | 110 | state = -1; |
ekyykysn | 0:ae1d54517aa0 | 111 | pc.printf("waiting"); |
ekyykysn | 0:ae1d54517aa0 | 112 | do { |
ekyykysn | 0:ae1d54517aa0 | 113 | while (Serial.available()) { |
ekyykysn | 0:ae1d54517aa0 | 114 | c = Serial.read(); |
ekyykysn | 0:ae1d54517aa0 | 115 | buf[i] = c; |
ekyykysn | 0:ae1d54517aa0 | 116 | if (i == 1 && state < 0) { |
ekyykysn | 0:ae1d54517aa0 | 117 | if (strcmp(buf, "sp") == 0) { |
ekyykysn | 0:ae1d54517aa0 | 118 | state = SP; |
ekyykysn | 0:ae1d54517aa0 | 119 | i = -1; |
ekyykysn | 0:ae1d54517aa0 | 120 | } |
ekyykysn | 0:ae1d54517aa0 | 121 | else if (strcmp(buf, "gc") == 0) state = GC; |
ekyykysn | 0:ae1d54517aa0 | 122 | else if (strcmp(buf, "gp") == 0) state = GP; |
ekyykysn | 0:ae1d54517aa0 | 123 | else if (strcmp(buf, "gv") == 0) state = GV; |
ekyykysn | 0:ae1d54517aa0 | 124 | else if (strcmp(buf, "rp") == 0) state = RP; |
ekyykysn | 0:ae1d54517aa0 | 125 | } |
ekyykysn | 0:ae1d54517aa0 | 126 | |
ekyykysn | 0:ae1d54517aa0 | 127 | if (c == ';') { |
ekyykysn | 0:ae1d54517aa0 | 128 | buf[i + 1] = '\0'; |
ekyykysn | 0:ae1d54517aa0 | 129 | nstep = atoi(buf); |
ekyykysn | 0:ae1d54517aa0 | 130 | if (nstep == 0 && state == SP) |
ekyykysn | 0:ae1d54517aa0 | 131 | state = RP; |
ekyykysn | 0:ae1d54517aa0 | 132 | flg = 1; |
ekyykysn | 0:ae1d54517aa0 | 133 | //CRLFを読みとり、シリアルバッファをクリアにする |
ekyykysn | 0:ae1d54517aa0 | 134 | Serial.read(); |
ekyykysn | 0:ae1d54517aa0 | 135 | Serial.read(); |
ekyykysn | 0:ae1d54517aa0 | 136 | break; |
ekyykysn | 0:ae1d54517aa0 | 137 | } |
ekyykysn | 0:ae1d54517aa0 | 138 | else if (state >= 0 || (buf[0] == 'g' || buf[0] == 's' || buf[0] == 'r')) { |
ekyykysn | 0:ae1d54517aa0 | 139 | i++; |
ekyykysn | 0:ae1d54517aa0 | 140 | delay(1); |
ekyykysn | 0:ae1d54517aa0 | 141 | } |
ekyykysn | 0:ae1d54517aa0 | 142 | } |
ekyykysn | 0:ae1d54517aa0 | 143 | } while (flg == 0); |
ekyykysn | 0:ae1d54517aa0 | 144 | |
ekyykysn | 0:ae1d54517aa0 | 145 | return flg; |
ekyykysn | 0:ae1d54517aa0 | 146 | }*/ |
ekyykysn | 0:ae1d54517aa0 | 147 | |
ekyykysn | 0:ae1d54517aa0 | 148 | |
ekyykysn | 0:ae1d54517aa0 | 149 | /*-----------------------------MotorContoroll---------------------------------*/ |
ekyykysn | 0:ae1d54517aa0 | 150 | void motorControll(){ |
ekyykysn | 0:ae1d54517aa0 | 151 | |
ekyykysn | 0:ae1d54517aa0 | 152 | // if(long i = 0; i < abs(nstep[ch]); i++){ |
ekyykysn | 0:ae1d54517aa0 | 153 | // if(i == 0){ |
ekyykysn | 0:ae1d54517aa0 | 154 | // digitalWrite(con[0],HIGH);) |
ekyykysn | 0:ae1d54517aa0 | 155 | if(open_sw == ON){ |
ekyykysn | 0:ae1d54517aa0 | 156 | if(open_limit == OFF){ |
ekyykysn | 0:ae1d54517aa0 | 157 | //mled1 = ON; |
ekyykysn | 0:ae1d54517aa0 | 158 | cw_pwm = ON; |
ekyykysn | 0:ae1d54517aa0 | 159 | wait_us(wt); |
ekyykysn | 0:ae1d54517aa0 | 160 | |
ekyykysn | 0:ae1d54517aa0 | 161 | cw_pwm = OFF; |
ekyykysn | 0:ae1d54517aa0 | 162 | wait_us(wt); |
ekyykysn | 0:ae1d54517aa0 | 163 | } |
ekyykysn | 0:ae1d54517aa0 | 164 | else |
ekyykysn | 0:ae1d54517aa0 | 165 | { |
ekyykysn | 0:ae1d54517aa0 | 166 | //mled2 = ON; |
ekyykysn | 0:ae1d54517aa0 | 167 | ccw_pwm = ON; |
ekyykysn | 0:ae1d54517aa0 | 168 | wait_us(wt); |
ekyykysn | 0:ae1d54517aa0 | 169 | |
ekyykysn | 0:ae1d54517aa0 | 170 | ccw_pwm =OFF; |
ekyykysn | 0:ae1d54517aa0 | 171 | wait_us(wt); |
ekyykysn | 0:ae1d54517aa0 | 172 | } |
ekyykysn | 0:ae1d54517aa0 | 173 | |
ekyykysn | 0:ae1d54517aa0 | 174 | } |
ekyykysn | 0:ae1d54517aa0 | 175 | else |
ekyykysn | 0:ae1d54517aa0 | 176 | { |
ekyykysn | 0:ae1d54517aa0 | 177 | //mled1= OFF; |
ekyykysn | 0:ae1d54517aa0 | 178 | //mled2= OFF; |
ekyykysn | 0:ae1d54517aa0 | 179 | } |
ekyykysn | 0:ae1d54517aa0 | 180 | |
ekyykysn | 0:ae1d54517aa0 | 181 | } |
ekyykysn | 0:ae1d54517aa0 | 182 | |
ekyykysn | 0:ae1d54517aa0 | 183 | int main(){ |
ekyykysn | 0:ae1d54517aa0 | 184 | lcd.initialize(); |
ekyykysn | 0:ae1d54517aa0 | 185 | lcd.locate(0,0); |
ekyykysn | 0:ae1d54517aa0 | 186 | lcd.printf("*scan*"); |
ekyykysn | 0:ae1d54517aa0 | 187 | pc.printf("*AutoSlideCover*"); |
ekyykysn | 0:ae1d54517aa0 | 188 | lcd.locate(1,0); |
ekyykysn | 0:ae1d54517aa0 | 189 | lcd.printf("setup...."); |
ekyykysn | 0:ae1d54517aa0 | 190 | pc.printf("setup...."); |
ekyykysn | 0:ae1d54517aa0 | 191 | //char c; |
ekyykysn | 0:ae1d54517aa0 | 192 | //count = 0; |
ekyykysn | 0:ae1d54517aa0 | 193 | pc.baud(115200); |
ekyykysn | 0:ae1d54517aa0 | 194 | flipper.attach(&flip, 2.0); |
ekyykysn | 0:ae1d54517aa0 | 195 | //tim.mode(PullNone); |
ekyykysn | 0:ae1d54517aa0 | 196 | |
ekyykysn | 0:ae1d54517aa0 | 197 | while(1){ |
ekyykysn | 0:ae1d54517aa0 | 198 | //flipper.attach(&flip, 2.0); |
ekyykysn | 0:ae1d54517aa0 | 199 | dir = CW; |
ekyykysn | 0:ae1d54517aa0 | 200 | motorControll(); |
ekyykysn | 0:ae1d54517aa0 | 201 | dir = CCW; |
ekyykysn | 0:ae1d54517aa0 | 202 | motorControll(); |
ekyykysn | 0:ae1d54517aa0 | 203 | |
ekyykysn | 0:ae1d54517aa0 | 204 | //pc.printf("Pulses is: %i\n", wheel.getPulses()); |
ekyykysn | 0:ae1d54517aa0 | 205 | //pc.printf("rpm is: %i\n", rpm); |
ekyykysn | 0:ae1d54517aa0 | 206 | } |
ekyykysn | 0:ae1d54517aa0 | 207 | } |