scan2

Dependencies:   LcdAcm1602ni QEI mbed

Committer:
ekyykysn
Date:
Thu Mar 22 08:47:02 2018 +0000
Revision:
0:ae1d54517aa0
test

Who changed what in which revision?

UserRevisionLine numberNew 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 }