[PH]

Dependencies:   IRremouteAndButton QuadDisplayMy LIS3MDL_my sMotor

Committer:
allesh
Date:
Mon May 17 07:17:06 2021 +0000
Revision:
1:b24bac622a37
Parent:
0:eb99909151eb
placeholder;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ankazwork 0:eb99909151eb 1 #include "mbed.h"
ankazwork 0:eb99909151eb 2 #include "platform/mbed_thread.h"
ankazwork 0:eb99909151eb 3 #include "UserButton.h"
ankazwork 0:eb99909151eb 4 #include "sMotor.h"
ankazwork 0:eb99909151eb 5 #include "lis3mdl_class.h"
ankazwork 0:eb99909151eb 6 #include "QuadDisplay2.h"
ankazwork 0:eb99909151eb 7
ankazwork 0:eb99909151eb 8 /****************************************************************
ankazwork 0:eb99909151eb 9 * Definitions
ankazwork 0:eb99909151eb 10 ****************************************************************/
ankazwork 0:eb99909151eb 11
ankazwork 0:eb99909151eb 12 // Blinking rate in milliseconds
ankazwork 0:eb99909151eb 13 #define step_speed 1500
ankazwork 0:eb99909151eb 14 #define POINTS 1
ankazwork 0:eb99909151eb 15 #define M_PI 3.14159265358979323846
ankazwork 0:eb99909151eb 16 #define RADIAN M_PI/180.0
ankazwork 0:eb99909151eb 17
ankazwork 0:eb99909151eb 18 /****************************************************************
ankazwork 0:eb99909151eb 19 * Prototypes
ankazwork 0:eb99909151eb 20 *****************************************************************/
ankazwork 0:eb99909151eb 21
ankazwork 0:eb99909151eb 22 void Ini();
ankazwork 0:eb99909151eb 23 void HowManyClicks();
ankazwork 0:eb99909151eb 24 void proximityR_isr();
ankazwork 0:eb99909151eb 25 void proximityF_isr();
ankazwork 0:eb99909151eb 26 //-----------------------
ankazwork 0:eb99909151eb 27 void polling_sensors_isr();
ankazwork 0:eb99909151eb 28 void sensors_task();
allesh 1:b24bac622a37 29 void FrameTimeoutCW_isr();
allesh 1:b24bac622a37 30 void FrameTimeoutCCW_isr();
allesh 1:b24bac622a37 31 void BounceTimeoutCW_isr();
allesh 1:b24bac622a37 32 void BounceTimeoutCCW_isr();
allesh 1:b24bac622a37 33 void CW_switch_isr();
allesh 1:b24bac622a37 34 void CCW_switch_isr();
ankazwork 0:eb99909151eb 35 //-----------------------
allesh 1:b24bac622a37 36 //void clk_speed_isr();
ankazwork 0:eb99909151eb 37 /*****************************************************************
ankazwork 0:eb99909151eb 38 * Interface
ankazwork 0:eb99909151eb 39 ******************************************************************/
ankazwork 0:eb99909151eb 40
ankazwork 0:eb99909151eb 41 DigitalOut led1(LED1);
allesh 1:b24bac622a37 42 InterruptIn CW_switch(D10);
allesh 1:b24bac622a37 43 InterruptIn CCW_switch(D11);
ankazwork 0:eb99909151eb 44 //---
ankazwork 0:eb99909151eb 45 RawSerial pc(USBTX, USBRX);
ankazwork 0:eb99909151eb 46 DevI2C devI2c(D14,D15);
ankazwork 0:eb99909151eb 47 LIS3MDL magnetometer(&devI2c,LIS3MDL_M_MEMS_ADDRESS_LOW);
ankazwork 0:eb99909151eb 48 DigitalOut led2(A0);
ankazwork 0:eb99909151eb 49 SPI spi(D4, D5, D3);
ankazwork 0:eb99909151eb 50 QuadDisplayMy display(&spi,D6);
ankazwork 0:eb99909151eb 51 //---
ankazwork 0:eb99909151eb 52 sMotor motor(A5, A4, A3, A2); // creates new stepper motor: IN1, IN2, IN3, IN4
allesh 1:b24bac622a37 53 InterruptIn BlueBatton(USER_BUTTON);
ankazwork 0:eb99909151eb 54
ankazwork 0:eb99909151eb 55 /*****************************************************************
ankazwork 0:eb99909151eb 56 * Time
ankazwork 0:eb99909151eb 57 ******************************************************************/
allesh 1:b24bac622a37 58 Ticker polling_sensors;
ankazwork 0:eb99909151eb 59 //Ticker clk_speed;
allesh 1:b24bac622a37 60 Timeout FrameTimeoutCW;
allesh 1:b24bac622a37 61 Timeout BounceTimeoutCW;
allesh 1:b24bac622a37 62 Timeout FrameTimeoutCCW;
allesh 1:b24bac622a37 63 Timeout BounceTimeoutCCW;
allesh 1:b24bac622a37 64
ankazwork 0:eb99909151eb 65 /****************************************************************
ankazwork 0:eb99909151eb 66 * Threads
ankazwork 0:eb99909151eb 67 ****************************************************************/
allesh 1:b24bac622a37 68 Thread sensor_daemon;
ankazwork 0:eb99909151eb 69
ankazwork 0:eb99909151eb 70 /*****************************************************************
ankazwork 0:eb99909151eb 71 * Global variables
ankazwork 0:eb99909151eb 72 ******************************************************************/
ankazwork 0:eb99909151eb 73
ankazwork 0:eb99909151eb 74
ankazwork 0:eb99909151eb 75 //----------------
ankazwork 0:eb99909151eb 76 uint8_t button_event;
ankazwork 0:eb99909151eb 77 uint8_t mode=0;
ankazwork 0:eb99909151eb 78 uint8_t RotateDir;
ankazwork 0:eb99909151eb 79 uint16_t RotateSpeed;
allesh 1:b24bac622a37 80
ankazwork 0:eb99909151eb 81 //----------------
ankazwork 0:eb99909151eb 82 uint8_t SensorsEn=1;
ankazwork 0:eb99909151eb 83
ankazwork 0:eb99909151eb 84 int16_t M[3];
ankazwork 0:eb99909151eb 85 uint8_t point;
ankazwork 0:eb99909151eb 86 uint32_t rotate_cnt;
ankazwork 0:eb99909151eb 87 //---------
allesh 1:b24bac622a37 88 uint8_t DebounceCW=0;
allesh 1:b24bac622a37 89 uint8_t cntCW=0;
allesh 1:b24bac622a37 90 uint8_t NewCWMode=0;
allesh 1:b24bac622a37 91 uint8_t DebounceCCW=0;
allesh 1:b24bac622a37 92 uint8_t cntCCW=0;
allesh 1:b24bac622a37 93 uint8_t NewCCWMode=0;
ankazwork 0:eb99909151eb 94 //------------------
ankazwork 0:eb99909151eb 95
ankazwork 0:eb99909151eb 96 /******************************************************************
ankazwork 0:eb99909151eb 97 * Main
ankazwork 0:eb99909151eb 98 ******************************************************************/
ankazwork 0:eb99909151eb 99 int main()
ankazwork 0:eb99909151eb 100 {
ankazwork 0:eb99909151eb 101 // Initialise the digital pin LED1 as an output
ankazwork 0:eb99909151eb 102
ankazwork 0:eb99909151eb 103 Ini();
ankazwork 0:eb99909151eb 104
ankazwork 0:eb99909151eb 105 while (true) {
ankazwork 0:eb99909151eb 106 //led = !led;
ankazwork 0:eb99909151eb 107 HowManyClicks();
ankazwork 0:eb99909151eb 108 if (mode){
ankazwork 0:eb99909151eb 109
ankazwork 0:eb99909151eb 110 }
ankazwork 0:eb99909151eb 111 if (point){
ankazwork 0:eb99909151eb 112 motor.step(POINTS, RotateDir, RotateSpeed);
ankazwork 0:eb99909151eb 113 }else
ankazwork 0:eb99909151eb 114 wait_us(step_speed);
ankazwork 0:eb99909151eb 115
ankazwork 0:eb99909151eb 116 //thread_sleep_for(BLINKING_RATE_MS);
ankazwork 0:eb99909151eb 117 }
ankazwork 0:eb99909151eb 118 }
ankazwork 0:eb99909151eb 119
ankazwork 0:eb99909151eb 120 /**********************************************************
ankazwork 0:eb99909151eb 121 * Functions
ankazwork 0:eb99909151eb 122 ***********************************************************/
ankazwork 0:eb99909151eb 123 void Ini()
ankazwork 0:eb99909151eb 124 {
ankazwork 0:eb99909151eb 125 pc.baud(115200);
ankazwork 0:eb99909151eb 126 ButtonIni(&BlueBatton);
allesh 1:b24bac622a37 127 //button_event_ind=button_event=0;
ankazwork 0:eb99909151eb 128
ankazwork 0:eb99909151eb 129
ankazwork 0:eb99909151eb 130 //--------------
ankazwork 0:eb99909151eb 131
ankazwork 0:eb99909151eb 132 sensor_daemon.start(sensors_task);
ankazwork 0:eb99909151eb 133 SensorsEn=1;
ankazwork 0:eb99909151eb 134 polling_sensors.attach(&polling_sensors_isr, 0.4);
allesh 1:b24bac622a37 135 //clk_speed.attach(&clk_speed_isr, 0.01);
ankazwork 0:eb99909151eb 136 mode=0;
ankazwork 0:eb99909151eb 137 point=0;
ankazwork 0:eb99909151eb 138 RotateSpeed=step_speed;
ankazwork 0:eb99909151eb 139 rotate_cnt=0;
allesh 1:b24bac622a37 140 CW_switch.fall(&CW_switch_isr);
allesh 1:b24bac622a37 141 CCW_switch.fall(&CCW_switch_isr);
ankazwork 0:eb99909151eb 142 }
ankazwork 0:eb99909151eb 143
ankazwork 0:eb99909151eb 144 //------------------
ankazwork 0:eb99909151eb 145 void HowManyClicks()
ankazwork 0:eb99909151eb 146 {
allesh 1:b24bac622a37 147 WhatButtonMode(&button_event);
ankazwork 0:eb99909151eb 148 if(button_event) {
ankazwork 0:eb99909151eb 149 switch (button_event) {
ankazwork 0:eb99909151eb 150 case 1:
ankazwork 0:eb99909151eb 151 mode=0;
ankazwork 0:eb99909151eb 152 point=0;
ankazwork 0:eb99909151eb 153 break;
ankazwork 0:eb99909151eb 154 case 2:
ankazwork 0:eb99909151eb 155 mode=1;
allesh 1:b24bac622a37 156 point=1;
allesh 1:b24bac622a37 157 RotateDir=0;
allesh 1:b24bac622a37 158 RotateSpeed=step_speed;
ankazwork 0:eb99909151eb 159 break;
ankazwork 0:eb99909151eb 160 case 3:
ankazwork 0:eb99909151eb 161 mode=2;
ankazwork 0:eb99909151eb 162 point=0;
ankazwork 0:eb99909151eb 163 //RotateDir=0;
ankazwork 0:eb99909151eb 164 //RotateSpeed=step_speed;
ankazwork 0:eb99909151eb 165 break;
ankazwork 0:eb99909151eb 166 case 4:
ankazwork 0:eb99909151eb 167 mode=3;
ankazwork 0:eb99909151eb 168 point=0;
ankazwork 0:eb99909151eb 169 //RotateDir=1;
ankazwork 0:eb99909151eb 170 //RotateSpeed=step_speed;
ankazwork 0:eb99909151eb 171 break;
ankazwork 0:eb99909151eb 172 case 5:
ankazwork 0:eb99909151eb 173 mode=4;
ankazwork 0:eb99909151eb 174 point=0;
ankazwork 0:eb99909151eb 175 //RotateSpeed=step_speed*2;
ankazwork 0:eb99909151eb 176 //RotateDir=0;
ankazwork 0:eb99909151eb 177 break;
ankazwork 0:eb99909151eb 178 case 6:
ankazwork 0:eb99909151eb 179 mode=5;
ankazwork 0:eb99909151eb 180 point=1;
ankazwork 0:eb99909151eb 181 RotateSpeed=step_speed*2;
ankazwork 0:eb99909151eb 182 RotateDir=1;
ankazwork 0:eb99909151eb 183 break;
ankazwork 0:eb99909151eb 184 case 7:
ankazwork 0:eb99909151eb 185
ankazwork 0:eb99909151eb 186 break;
ankazwork 0:eb99909151eb 187
ankazwork 0:eb99909151eb 188 default:
ankazwork 0:eb99909151eb 189 break;
ankazwork 0:eb99909151eb 190 }
ankazwork 0:eb99909151eb 191 button_event=0;
ankazwork 0:eb99909151eb 192 }
ankazwork 0:eb99909151eb 193 }
ankazwork 0:eb99909151eb 194
ankazwork 0:eb99909151eb 195 //-----------------
ankazwork 0:eb99909151eb 196 void sensors_task()
ankazwork 0:eb99909151eb 197 {
ankazwork 0:eb99909151eb 198 int status;
ankazwork 0:eb99909151eb 199 char text[5];
ankazwork 0:eb99909151eb 200 int32_t dif;
ankazwork 0:eb99909151eb 201
ankazwork 0:eb99909151eb 202 while (true) {
ankazwork 0:eb99909151eb 203 ThisThread::flags_wait_any(0x1,true);
ankazwork 0:eb99909151eb 204 SensorsEn=0;
allesh 1:b24bac622a37 205
ankazwork 0:eb99909151eb 206 switch(mode){
ankazwork 0:eb99909151eb 207 case 0:
allesh 1:b24bac622a37 208 // sprintf(text,"c%3d",distance_c);
ankazwork 0:eb99909151eb 209 break;
ankazwork 0:eb99909151eb 210 case 1:
allesh 1:b24bac622a37 211 //sprintf(text,"l%3d", distance_l);
ankazwork 0:eb99909151eb 212 break;
ankazwork 0:eb99909151eb 213 case 2:
allesh 1:b24bac622a37 214 //sprintf(text,"r%3d", distance_r);
ankazwork 0:eb99909151eb 215 break;
ankazwork 0:eb99909151eb 216 case 3:
allesh 1:b24bac622a37 217
ankazwork 0:eb99909151eb 218 break;
ankazwork 0:eb99909151eb 219 case 4:
allesh 1:b24bac622a37 220 //sprintf(text,"%d",G[0]);
ankazwork 0:eb99909151eb 221 break;
ankazwork 0:eb99909151eb 222 case 5:
allesh 1:b24bac622a37 223 //sprintf(text,"%d",dur_time);
ankazwork 0:eb99909151eb 224 break;
ankazwork 0:eb99909151eb 225 default:
ankazwork 0:eb99909151eb 226 sprintf(text,"----");
ankazwork 0:eb99909151eb 227 break;
allesh 1:b24bac622a37 228 }
ankazwork 0:eb99909151eb 229 SensorsEn=1;
ankazwork 0:eb99909151eb 230 }
ankazwork 0:eb99909151eb 231 }
ankazwork 0:eb99909151eb 232
ankazwork 0:eb99909151eb 233 /**********************************************************
ankazwork 0:eb99909151eb 234 * Interrupt Service Routines
ankazwork 0:eb99909151eb 235 ***********************************************************/
allesh 1:b24bac622a37 236 void FrameTimeoutCW_isr()
ankazwork 0:eb99909151eb 237 {
allesh 1:b24bac622a37 238 NewCWMode=cnt;
allesh 1:b24bac622a37 239 cntCW=0;
allesh 1:b24bac622a37 240 }
allesh 1:b24bac622a37 241
ankazwork 0:eb99909151eb 242 //---------------------
allesh 1:b24bac622a37 243 void BounceTimeoutCW_isr()
allesh 1:b24bac622a37 244 {
allesh 1:b24bac622a37 245 DebounceCW=0;
allesh 1:b24bac622a37 246
allesh 1:b24bac622a37 247 }
ankazwork 0:eb99909151eb 248
allesh 1:b24bac622a37 249 void FrameTimeoutCCW_isr()
allesh 1:b24bac622a37 250 {
allesh 1:b24bac622a37 251 NewCCWMode=cnt;
allesh 1:b24bac622a37 252 cntCCW=0;
allesh 1:b24bac622a37 253 }
allesh 1:b24bac622a37 254
allesh 1:b24bac622a37 255 //---------------------
allesh 1:b24bac622a37 256 void BounceTimeoutCCW_isr()
allesh 1:b24bac622a37 257 {
allesh 1:b24bac622a37 258 DebounceCCW=0;
allesh 1:b24bac622a37 259
allesh 1:b24bac622a37 260 }
ankazwork 0:eb99909151eb 261 //---------------------
ankazwork 0:eb99909151eb 262 void polling_sensors_isr()
ankazwork 0:eb99909151eb 263 {
ankazwork 0:eb99909151eb 264 if (SensorsEn){
ankazwork 0:eb99909151eb 265 sensor_daemon.flags_set(0x1);
allesh 1:b24bac622a37 266 led1 = !led1;
ankazwork 0:eb99909151eb 267 }
ankazwork 0:eb99909151eb 268 }
allesh 1:b24bac622a37 269 void CW_switch_isr()
allesh 1:b24bac622a37 270 {
allesh 1:b24bac622a37 271 if(DebounceCW==0){
allesh 1:b24bac622a37 272 DebounceCW=1;
allesh 1:b24bac622a37 273 cntCW++;
allesh 1:b24bac622a37 274 FrameTimeoutCW.detach();
allesh 1:b24bac622a37 275 FrameTimeoutCW.attach(FrameTimeoutCW_isr,1.0);
allesh 1:b24bac622a37 276 BounceTimeoutCW.attach(BounceTimeoutCW_isr,0.2);
allesh 1:b24bac622a37 277 }
allesh 1:b24bac622a37 278 }
allesh 1:b24bac622a37 279 void CCW_switch_isr()
allesh 1:b24bac622a37 280 {
allesh 1:b24bac622a37 281 if(DebounceCCW==0){
allesh 1:b24bac622a37 282 DebounceCCW=1;
allesh 1:b24bac622a37 283 cntCCW++;
allesh 1:b24bac622a37 284 FrameTimeoutCCW.detach();
allesh 1:b24bac622a37 285 FrameTimeoutCCW.attach(FrameTimeoutCCW_isr,1.0);
allesh 1:b24bac622a37 286 BounceTimeoutCCW.attach(BounceTimeoutCCW_isr,0.2);
allesh 1:b24bac622a37 287 }
allesh 1:b24bac622a37 288 }
ankazwork 0:eb99909151eb 289 //---------------------------------
allesh 1:b24bac622a37 290 /*void clk_speed_isr()
ankazwork 0:eb99909151eb 291 {
ankazwork 0:eb99909151eb 292 rotate_cnt++;
ankazwork 0:eb99909151eb 293 if (rotate_cnt>10)
ankazwork 0:eb99909151eb 294 dur_time_en=1;
allesh 1:b24bac622a37 295 }*/