BME SmartLab
/
_Smart_vacuum_0v2
Remote controlled robot with LEDs and Wemos motor shield
wemos_mc.cpp@0:51c02b15eb70, 2017-09-27 (annotated)
- Committer:
- Makodan
- Date:
- Wed Sep 27 16:03:48 2017 +0000
- Revision:
- 0:51c02b15eb70
Remote controlled robot with LEDs and Wemos motor shield
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Makodan | 0:51c02b15eb70 | 1 | #include "wemos_mc.h" |
Makodan | 0:51c02b15eb70 | 2 | |
Makodan | 0:51c02b15eb70 | 3 | |
Makodan | 0:51c02b15eb70 | 4 | /* setfreq() -- set PWM's frequency |
Makodan | 0:51c02b15eb70 | 5 | freq: |
Makodan | 0:51c02b15eb70 | 6 | PWM's frequency |
Makodan | 0:51c02b15eb70 | 7 | */ |
Makodan | 0:51c02b15eb70 | 8 | void setfreq(I2C& i2c, uint32_t freq){ |
Makodan | 0:51c02b15eb70 | 9 | |
Makodan | 0:51c02b15eb70 | 10 | char data[4]; |
Makodan | 0:51c02b15eb70 | 11 | |
Makodan | 0:51c02b15eb70 | 12 | data[0]=(((char)(freq >> 16)) & (char)0x0f); |
Makodan | 0:51c02b15eb70 | 13 | data[1]=((char)(freq >> 16)); |
Makodan | 0:51c02b15eb70 | 14 | data[2]=((char)(freq >> 8)); |
Makodan | 0:51c02b15eb70 | 15 | data[3]=((char)freq); |
Makodan | 0:51c02b15eb70 | 16 | |
Makodan | 0:51c02b15eb70 | 17 | //__disable_irq(); |
Makodan | 0:51c02b15eb70 | 18 | i2c.write( _ADDRESS, data, 4 ); |
Makodan | 0:51c02b15eb70 | 19 | //__enable_irq(); |
Makodan | 0:51c02b15eb70 | 20 | wait_ms(5); |
Makodan | 0:51c02b15eb70 | 21 | |
Makodan | 0:51c02b15eb70 | 22 | } |
Makodan | 0:51c02b15eb70 | 23 | |
Makodan | 0:51c02b15eb70 | 24 | /* setmotor() -- set motor |
Makodan | 0:51c02b15eb70 | 25 | motor: |
Makodan | 0:51c02b15eb70 | 26 | _MOTOR_A 0 Motor A |
Makodan | 0:51c02b15eb70 | 27 | _MOTOR_B 1 Motor B |
Makodan | 0:51c02b15eb70 | 28 | dir: |
Makodan | 0:51c02b15eb70 | 29 | _SHORT_BRAKE 0 |
Makodan | 0:51c02b15eb70 | 30 | _CW 1 |
Makodan | 0:51c02b15eb70 | 31 | _CCW 2 |
Makodan | 0:51c02b15eb70 | 32 | _STOP 3 |
Makodan | 0:51c02b15eb70 | 33 | _STANDBY 4 |
Makodan | 0:51c02b15eb70 | 34 | pwm_val: |
Makodan | 0:51c02b15eb70 | 35 | 0.00 - 100.00 (%) |
Makodan | 0:51c02b15eb70 | 36 | */ |
Makodan | 0:51c02b15eb70 | 37 | void setmotor(I2C& i2c,uint8_t motor, uint8_t dir, float pwm_val){ |
Makodan | 0:51c02b15eb70 | 38 | |
Makodan | 0:51c02b15eb70 | 39 | uint16_t _pwm_val = (uint16_t)pwm_val * 100; |
Makodan | 0:51c02b15eb70 | 40 | |
Makodan | 0:51c02b15eb70 | 41 | if(_pwm_val>10000) |
Makodan | 0:51c02b15eb70 | 42 | _pwm_val=10000; |
Makodan | 0:51c02b15eb70 | 43 | |
Makodan | 0:51c02b15eb70 | 44 | char data[4]; |
Makodan | 0:51c02b15eb70 | 45 | |
Makodan | 0:51c02b15eb70 | 46 | data[0] = ( motor | (char)0x10); |
Makodan | 0:51c02b15eb70 | 47 | data[1] = ( dir ); |
Makodan | 0:51c02b15eb70 | 48 | data[2] = ((char)(_pwm_val >> 8)); |
Makodan | 0:51c02b15eb70 | 49 | data[3] = ((char)_pwm_val); |
Makodan | 0:51c02b15eb70 | 50 | |
Makodan | 0:51c02b15eb70 | 51 | //__disable_irq(); |
Makodan | 0:51c02b15eb70 | 52 | i2c.write( _ADDRESS, data, 4 ); |
Makodan | 0:51c02b15eb70 | 53 | //__enable_irq(); |
Makodan | 0:51c02b15eb70 | 54 | wait_ms(5); |
Makodan | 0:51c02b15eb70 | 55 | |
Makodan | 0:51c02b15eb70 | 56 | } |
Makodan | 0:51c02b15eb70 | 57 | |
Makodan | 0:51c02b15eb70 | 58 | void setmotor(I2C& i2c, uint8_t motor, uint8_t dir){ |
Makodan | 0:51c02b15eb70 | 59 | |
Makodan | 0:51c02b15eb70 | 60 | setmotor(i2c,motor,dir,100); |
Makodan | 0:51c02b15eb70 | 61 | } |