Remote controlled robot with LEDs and Wemos motor shield

Dependencies:   RF24 mbed

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?

UserRevisionLine numberNew contents of line
Makodan 0:51c02b15eb70 1 #include "mbed.h"
Makodan 0:51c02b15eb70 2 #include "config.h"
Makodan 0:51c02b15eb70 3 #include "main.h"
Makodan 0:51c02b15eb70 4 #include "RF24.h"
Makodan 0:51c02b15eb70 5 #include "wemos_mc.h"
Makodan 0:51c02b15eb70 6
Makodan 0:51c02b15eb70 7 /*
Makodan 0:51c02b15eb70 8 * Constructors and pin settings
Makodan 0:51c02b15eb70 9 */
Makodan 0:51c02b15eb70 10 DigitalOut myled(ledpin);
Makodan 0:51c02b15eb70 11 RF24 radio(spi_MOSI, spi_MISO, spi_SCK, nrf_CE, nrf_CSN );
Makodan 0:51c02b15eb70 12
Makodan 0:51c02b15eb70 13 I2C ms(i2c_sda, i2c_scl);
Makodan 0:51c02b15eb70 14
Makodan 0:51c02b15eb70 15 InterruptIn receive(nrf_irq);
Makodan 0:51c02b15eb70 16 InterruptIn bumper(bump);
Makodan 0:51c02b15eb70 17 //InterruptIn odomet(odom);
Makodan 0:51c02b15eb70 18
Makodan 0:51c02b15eb70 19 DigitalOut strip_red(red);
Makodan 0:51c02b15eb70 20 DigitalOut strip_blue(green);
Makodan 0:51c02b15eb70 21 DigitalOut strip_green(blue);
Makodan 0:51c02b15eb70 22
Makodan 0:51c02b15eb70 23 /*
Makodan 0:51c02b15eb70 24 * Global variables
Makodan 0:51c02b15eb70 25 */
Makodan 0:51c02b15eb70 26 volatile char rec;
Makodan 0:51c02b15eb70 27 volatile float _pwm = 0;
Makodan 0:51c02b15eb70 28 volatile bool newmsg_flag=0;
Makodan 0:51c02b15eb70 29 volatile bool stop_flag=0;
Makodan 0:51c02b15eb70 30 volatile dataIN input;
Makodan 0:51c02b15eb70 31 volatile uint32_t roll_counter = 0;
Makodan 0:51c02b15eb70 32
Makodan 0:51c02b15eb70 33 /*
Makodan 0:51c02b15eb70 34 * Private function prototypes
Makodan 0:51c02b15eb70 35 */
Makodan 0:51c02b15eb70 36 void RadioSetup();
Makodan 0:51c02b15eb70 37 void change_strip(uint16_t col);
Makodan 0:51c02b15eb70 38 void startAnimation();
Makodan 0:51c02b15eb70 39
Makodan 0:51c02b15eb70 40 /*
Makodan 0:51c02b15eb70 41 * Interrupt callbacks
Makodan 0:51c02b15eb70 42 */
Makodan 0:51c02b15eb70 43 void read_radio(){
Makodan 0:51c02b15eb70 44 dataIN tmp;
Makodan 0:51c02b15eb70 45 myled = !myled;
Makodan 0:51c02b15eb70 46 radio.read(&tmp,sizeof(tmp));
Makodan 0:51c02b15eb70 47 if(tmp.ID == OWN_ID){
Makodan 0:51c02b15eb70 48 input.dir_L = tmp.dir_L;
Makodan 0:51c02b15eb70 49 input.pwm_L = tmp.pwm_L;
Makodan 0:51c02b15eb70 50 input.dir_R = tmp.dir_R;
Makodan 0:51c02b15eb70 51 input.pwm_R = tmp.pwm_R;
Makodan 0:51c02b15eb70 52 input.led = tmp.led;
Makodan 0:51c02b15eb70 53 newmsg_flag=1;
Makodan 0:51c02b15eb70 54 }
Makodan 0:51c02b15eb70 55 }
Makodan 0:51c02b15eb70 56
Makodan 0:51c02b15eb70 57 void front_hit(){
Makodan 0:51c02b15eb70 58 //blinking_flag = 1;
Makodan 0:51c02b15eb70 59 //blinking_phase = 0;
Makodan 0:51c02b15eb70 60
Makodan 0:51c02b15eb70 61 stop_flag=1;
Makodan 0:51c02b15eb70 62 }
Makodan 0:51c02b15eb70 63
Makodan 0:51c02b15eb70 64 void roll(){
Makodan 0:51c02b15eb70 65 roll_counter++;
Makodan 0:51c02b15eb70 66
Makodan 0:51c02b15eb70 67 if(roll_counter % 2) change_strip(GREEN);
Makodan 0:51c02b15eb70 68 if(roll_counter % 3) change_strip(OFF);
Makodan 0:51c02b15eb70 69
Makodan 0:51c02b15eb70 70 }
Makodan 0:51c02b15eb70 71
Makodan 0:51c02b15eb70 72 int main(){
Makodan 0:51c02b15eb70 73 ms.frequency(100000);
Makodan 0:51c02b15eb70 74 setfreq(ms, 1000);
Makodan 0:51c02b15eb70 75
Makodan 0:51c02b15eb70 76 setmotor(ms, _MOTOR_L, _STOP, 0);
Makodan 0:51c02b15eb70 77 setmotor(ms, _MOTOR_R, _STOP, 0);
Makodan 0:51c02b15eb70 78 change_strip(OFF);
Makodan 0:51c02b15eb70 79
Makodan 0:51c02b15eb70 80 RadioSetup();
Makodan 0:51c02b15eb70 81 radio.startListening();
Makodan 0:51c02b15eb70 82
Makodan 0:51c02b15eb70 83 startAnimation();
Makodan 0:51c02b15eb70 84
Makodan 0:51c02b15eb70 85 receive.fall(&read_radio);
Makodan 0:51c02b15eb70 86 bumper.rise(&front_hit);
Makodan 0:51c02b15eb70 87 // odomet.rise(&roll);
Makodan 0:51c02b15eb70 88
Makodan 0:51c02b15eb70 89
Makodan 0:51c02b15eb70 90
Makodan 0:51c02b15eb70 91
Makodan 0:51c02b15eb70 92 while(1){
Makodan 0:51c02b15eb70 93
Makodan 0:51c02b15eb70 94 if(newmsg_flag == 1){
Makodan 0:51c02b15eb70 95 setmotor(ms, _MOTOR_L, (uint8_t)input.dir_L, input.pwm_L);
Makodan 0:51c02b15eb70 96 wait_ms(10);
Makodan 0:51c02b15eb70 97 setmotor(ms, _MOTOR_R, (uint8_t)input.dir_R, input.pwm_R);
Makodan 0:51c02b15eb70 98 change_strip(input.led);
Makodan 0:51c02b15eb70 99 newmsg_flag = 0;
Makodan 0:51c02b15eb70 100 }
Makodan 0:51c02b15eb70 101
Makodan 0:51c02b15eb70 102 if(stop_flag == 1){
Makodan 0:51c02b15eb70 103 setmotor(ms, _MOTOR_L, _STOP, 0);
Makodan 0:51c02b15eb70 104 setmotor(ms, _MOTOR_R, _STOP, 0);
Makodan 0:51c02b15eb70 105 change_strip(RED);
Makodan 0:51c02b15eb70 106 wait(2);
Makodan 0:51c02b15eb70 107 change_strip(OFF);
Makodan 0:51c02b15eb70 108 stop_flag = 0;
Makodan 0:51c02b15eb70 109 }
Makodan 0:51c02b15eb70 110
Makodan 0:51c02b15eb70 111 /*
Makodan 0:51c02b15eb70 112 if(blinking_phase<5 && blinking_flag == 1){
Makodan 0:51c02b15eb70 113 change_strip(current_col);
Makodan 0:51c02b15eb70 114 wait_ms(250);
Makodan 0:51c02b15eb70 115 change_strip(OFF);
Makodan 0:51c02b15eb70 116 wait_ms(250);
Makodan 0:51c02b15eb70 117 blinking_phase++;
Makodan 0:51c02b15eb70 118 }
Makodan 0:51c02b15eb70 119 */
Makodan 0:51c02b15eb70 120
Makodan 0:51c02b15eb70 121 }
Makodan 0:51c02b15eb70 122
Makodan 0:51c02b15eb70 123
Makodan 0:51c02b15eb70 124 }
Makodan 0:51c02b15eb70 125
Makodan 0:51c02b15eb70 126 void RadioSetup(){
Makodan 0:51c02b15eb70 127
Makodan 0:51c02b15eb70 128 radio.begin();
Makodan 0:51c02b15eb70 129 radio.setPALevel(RF24_PA_HIGH);
Makodan 0:51c02b15eb70 130 radio.setChannel(RadioChannel);
Makodan 0:51c02b15eb70 131 radio.setRetries(0,2);
Makodan 0:51c02b15eb70 132 radio.enableDynamicAck();
Makodan 0:51c02b15eb70 133 radio.enableDynamicPayloads();
Makodan 0:51c02b15eb70 134 radio.openReadingPipe(1,DataAddress);
Makodan 0:51c02b15eb70 135 radio.maskIRQ(1,1,0);
Makodan 0:51c02b15eb70 136 }
Makodan 0:51c02b15eb70 137
Makodan 0:51c02b15eb70 138 void change_strip(uint16_t col){
Makodan 0:51c02b15eb70 139
Makodan 0:51c02b15eb70 140 switch(col){
Makodan 0:51c02b15eb70 141 case RED:
Makodan 0:51c02b15eb70 142 strip_red = 1;
Makodan 0:51c02b15eb70 143 strip_blue = 0;
Makodan 0:51c02b15eb70 144 strip_green=0;
Makodan 0:51c02b15eb70 145 break;
Makodan 0:51c02b15eb70 146 case GREEN:
Makodan 0:51c02b15eb70 147 strip_red = 0;
Makodan 0:51c02b15eb70 148 strip_blue = 0;
Makodan 0:51c02b15eb70 149 strip_green = 1;
Makodan 0:51c02b15eb70 150 break;
Makodan 0:51c02b15eb70 151 case BLUE:
Makodan 0:51c02b15eb70 152 strip_red = 0;
Makodan 0:51c02b15eb70 153 strip_blue = 1;
Makodan 0:51c02b15eb70 154 strip_green = 0;
Makodan 0:51c02b15eb70 155 break;
Makodan 0:51c02b15eb70 156 case YELLOW:
Makodan 0:51c02b15eb70 157 strip_red = 1;
Makodan 0:51c02b15eb70 158 strip_blue = 0;
Makodan 0:51c02b15eb70 159 strip_green = 1;
Makodan 0:51c02b15eb70 160 break;
Makodan 0:51c02b15eb70 161 case MAGENTA:
Makodan 0:51c02b15eb70 162 strip_red = 1;
Makodan 0:51c02b15eb70 163 strip_blue = 1;
Makodan 0:51c02b15eb70 164 strip_green = 0;
Makodan 0:51c02b15eb70 165 break;
Makodan 0:51c02b15eb70 166 case CYAN:
Makodan 0:51c02b15eb70 167 strip_red = 0;
Makodan 0:51c02b15eb70 168 strip_blue = 1;
Makodan 0:51c02b15eb70 169 strip_green = 1;
Makodan 0:51c02b15eb70 170 break;
Makodan 0:51c02b15eb70 171 case WHITE:
Makodan 0:51c02b15eb70 172 strip_red = 1;
Makodan 0:51c02b15eb70 173 strip_blue = 1;
Makodan 0:51c02b15eb70 174 strip_green = 1;
Makodan 0:51c02b15eb70 175 break;
Makodan 0:51c02b15eb70 176 case OFF:
Makodan 0:51c02b15eb70 177 strip_red = 0;
Makodan 0:51c02b15eb70 178 strip_blue = 0;
Makodan 0:51c02b15eb70 179 strip_green = 0;
Makodan 0:51c02b15eb70 180 break;
Makodan 0:51c02b15eb70 181 }
Makodan 0:51c02b15eb70 182
Makodan 0:51c02b15eb70 183 }
Makodan 0:51c02b15eb70 184
Makodan 0:51c02b15eb70 185 void startAnimation(){
Makodan 0:51c02b15eb70 186
Makodan 0:51c02b15eb70 187 change_strip(RED);
Makodan 0:51c02b15eb70 188 wait_ms(500);
Makodan 0:51c02b15eb70 189 change_strip(GREEN);
Makodan 0:51c02b15eb70 190 wait_ms(500);
Makodan 0:51c02b15eb70 191 change_strip(BLUE);
Makodan 0:51c02b15eb70 192 wait_ms(500);
Makodan 0:51c02b15eb70 193 change_strip(OFF);
Makodan 0:51c02b15eb70 194
Makodan 0:51c02b15eb70 195 }