Communicate with danBed via UART

Dependencies:   mbed

Committer:
DaniusKalv
Date:
Tue Mar 10 15:26:54 2015 +0000
Revision:
2:4e81ddaec100
Parent:
1:1d18a2a3e9a0
Communicate with danBed via UART and control its pins

Who changed what in which revision?

UserRevisionLine numberNew contents of line
DaniusKalv 0:fc1ff02f51e1 1 #include "mbed.h"
DaniusKalv 0:fc1ff02f51e1 2 #include <string>
DaniusKalv 0:fc1ff02f51e1 3
DaniusKalv 1:1d18a2a3e9a0 4 DigitalOut P5(p5);
DaniusKalv 1:1d18a2a3e9a0 5 DigitalOut P6(p6);
DaniusKalv 1:1d18a2a3e9a0 6 DigitalOut P7(p7);
DaniusKalv 1:1d18a2a3e9a0 7 DigitalOut P8(p8);
DaniusKalv 1:1d18a2a3e9a0 8 DigitalOut P9(p9);
DaniusKalv 1:1d18a2a3e9a0 9 DigitalOut P10(p10);
DaniusKalv 1:1d18a2a3e9a0 10 DigitalOut P11(p11);
DaniusKalv 1:1d18a2a3e9a0 11 DigitalOut P12(p12);
DaniusKalv 1:1d18a2a3e9a0 12 DigitalOut P13(p13);
DaniusKalv 1:1d18a2a3e9a0 13 DigitalOut P14(p14);
DaniusKalv 1:1d18a2a3e9a0 14
DaniusKalv 1:1d18a2a3e9a0 15 AnalogIn P15(p15);
DaniusKalv 1:1d18a2a3e9a0 16 AnalogIn P16(p16);
DaniusKalv 1:1d18a2a3e9a0 17 AnalogIn P17(p17);
DaniusKalv 1:1d18a2a3e9a0 18 AnalogIn P18(p18);
DaniusKalv 1:1d18a2a3e9a0 19 AnalogIn P19(p19);
DaniusKalv 1:1d18a2a3e9a0 20 AnalogIn P20(p20);
DaniusKalv 1:1d18a2a3e9a0 21
DaniusKalv 1:1d18a2a3e9a0 22 PwmOut P21(p21);
DaniusKalv 1:1d18a2a3e9a0 23 PwmOut P22(p22);
DaniusKalv 1:1d18a2a3e9a0 24 PwmOut P23(p23);
DaniusKalv 1:1d18a2a3e9a0 25 PwmOut P24(p24);
DaniusKalv 1:1d18a2a3e9a0 26 PwmOut P25(p25);
DaniusKalv 1:1d18a2a3e9a0 27 PwmOut P26(p26);
DaniusKalv 1:1d18a2a3e9a0 28
DaniusKalv 1:1d18a2a3e9a0 29 DigitalOut P27(p27);
DaniusKalv 1:1d18a2a3e9a0 30 DigitalOut P28(p28);
DaniusKalv 1:1d18a2a3e9a0 31 DigitalOut P29(p29);
DaniusKalv 1:1d18a2a3e9a0 32 DigitalOut P30(p30);
DaniusKalv 1:1d18a2a3e9a0 33
DaniusKalv 0:fc1ff02f51e1 34 PwmOut RED(LED1);
DaniusKalv 0:fc1ff02f51e1 35 PwmOut BLUE(LED2);
DaniusKalv 0:fc1ff02f51e1 36 PwmOut GREEN(LED3);
DaniusKalv 0:fc1ff02f51e1 37 DigitalOut RGB(LED4);
DaniusKalv 0:fc1ff02f51e1 38
DaniusKalv 2:4e81ddaec100 39 Serial pc(p28, p27);
DaniusKalv 2:4e81ddaec100 40 //Serial pc(USBTX, USBRX);
DaniusKalv 0:fc1ff02f51e1 41
DaniusKalv 0:fc1ff02f51e1 42 void receive();
DaniusKalv 1:1d18a2a3e9a0 43 void extractCommand(char *buffer, int &value);
DaniusKalv 1:1d18a2a3e9a0 44 int power(int pow);
DaniusKalv 0:fc1ff02f51e1 45 char temp[100];
DaniusKalv 0:fc1ff02f51e1 46
DaniusKalv 0:fc1ff02f51e1 47 int main() {
DaniusKalv 0:fc1ff02f51e1 48
DaniusKalv 0:fc1ff02f51e1 49 RED = 1;
DaniusKalv 0:fc1ff02f51e1 50 GREEN = 1;
DaniusKalv 0:fc1ff02f51e1 51 BLUE = 1;
DaniusKalv 0:fc1ff02f51e1 52 RGB = 0;
DaniusKalv 0:fc1ff02f51e1 53
DaniusKalv 0:fc1ff02f51e1 54 pc.baud(115200);
DaniusKalv 0:fc1ff02f51e1 55
DaniusKalv 1:1d18a2a3e9a0 56 pc.printf("\r\nWelcome to danBed communication v1.1!");
DaniusKalv 0:fc1ff02f51e1 57 pc.printf("\r\nWrite 'Labas' to continue...\r\n");
DaniusKalv 0:fc1ff02f51e1 58
DaniusKalv 0:fc1ff02f51e1 59 GET:
DaniusKalv 0:fc1ff02f51e1 60 receive();
DaniusKalv 0:fc1ff02f51e1 61 string labas = "Labas";
DaniusKalv 0:fc1ff02f51e1 62
DaniusKalv 0:fc1ff02f51e1 63 if (temp == labas) pc.printf("\r\nLabas!!!\r\n");
DaniusKalv 0:fc1ff02f51e1 64 else{
DaniusKalv 0:fc1ff02f51e1 65 pc.printf("\r\nTry again! Type 'Labas'...\r\n");
DaniusKalv 0:fc1ff02f51e1 66 goto GET;
DaniusKalv 0:fc1ff02f51e1 67 }
DaniusKalv 0:fc1ff02f51e1 68
DaniusKalv 0:fc1ff02f51e1 69 delete &labas;
DaniusKalv 0:fc1ff02f51e1 70
DaniusKalv 0:fc1ff02f51e1 71 while(1) {
DaniusKalv 0:fc1ff02f51e1 72
DaniusKalv 0:fc1ff02f51e1 73 receive();
DaniusKalv 1:1d18a2a3e9a0 74 char buffer[10];
DaniusKalv 1:1d18a2a3e9a0 75 int value = 0;
DaniusKalv 0:fc1ff02f51e1 76
DaniusKalv 1:1d18a2a3e9a0 77 memset(buffer, 0, sizeof(buffer));
DaniusKalv 1:1d18a2a3e9a0 78 extractCommand(buffer, value);
DaniusKalv 0:fc1ff02f51e1 79
DaniusKalv 1:1d18a2a3e9a0 80
DaniusKalv 1:1d18a2a3e9a0 81 if(strcmp(buffer, "RGB") == 0){
DaniusKalv 0:fc1ff02f51e1 82 RGB = value;
DaniusKalv 0:fc1ff02f51e1 83 if(value == 1) pc.printf("\r\nRGB turned ON\r\n");
DaniusKalv 0:fc1ff02f51e1 84 else pc.printf("\r\nRGB turned OFF\r\n");
DaniusKalv 0:fc1ff02f51e1 85 }
DaniusKalv 1:1d18a2a3e9a0 86 else if(strcmp(buffer, "RED") == 0){
DaniusKalv 2:4e81ddaec100 87 float tmp = ((float) (255 - value)) / 255;
DaniusKalv 1:1d18a2a3e9a0 88 RED = tmp;
DaniusKalv 1:1d18a2a3e9a0 89 pc.printf("\r\nRED value %i\r\n", value);
DaniusKalv 1:1d18a2a3e9a0 90 }
DaniusKalv 1:1d18a2a3e9a0 91 else if(strcmp(buffer, "GREEN") == 0){
DaniusKalv 2:4e81ddaec100 92 float tmp = ((float) (255 - value)) / 255;
DaniusKalv 1:1d18a2a3e9a0 93 GREEN = tmp;
DaniusKalv 1:1d18a2a3e9a0 94 pc.printf("\r\nGREEN value %i\r\n", value);
DaniusKalv 1:1d18a2a3e9a0 95 }
DaniusKalv 1:1d18a2a3e9a0 96 else if(strcmp(buffer, "BLUE") == 0){
DaniusKalv 2:4e81ddaec100 97 float tmp = ((float) (255 - value)) / 255;
DaniusKalv 1:1d18a2a3e9a0 98 BLUE = tmp;
DaniusKalv 1:1d18a2a3e9a0 99 pc.printf("\r\nBLUE value %i\r\n", value);
DaniusKalv 1:1d18a2a3e9a0 100 }
DaniusKalv 1:1d18a2a3e9a0 101 else if(strcmp(buffer, "P5") == 0){
DaniusKalv 2:4e81ddaec100 102 P5 = value;
DaniusKalv 1:1d18a2a3e9a0 103 pc.printf("\r\nP5 value %i\r\n", value);
DaniusKalv 1:1d18a2a3e9a0 104 }
DaniusKalv 1:1d18a2a3e9a0 105 else if(strcmp(buffer, "P6") == 0){
DaniusKalv 2:4e81ddaec100 106 P6 = value;
DaniusKalv 1:1d18a2a3e9a0 107 pc.printf("\r\nP6 value %i\r\n", value);
DaniusKalv 1:1d18a2a3e9a0 108 }
DaniusKalv 1:1d18a2a3e9a0 109 else if(strcmp(buffer, "P7") == 0){
DaniusKalv 2:4e81ddaec100 110 P7 = value;
DaniusKalv 1:1d18a2a3e9a0 111 pc.printf("\r\nP7 value %i\r\n", value);
DaniusKalv 1:1d18a2a3e9a0 112 }
DaniusKalv 1:1d18a2a3e9a0 113 else if(strcmp(buffer, "P8") == 0){
DaniusKalv 2:4e81ddaec100 114 P8 = value;
DaniusKalv 1:1d18a2a3e9a0 115 pc.printf("\r\nP8 value %i\r\n", value);
DaniusKalv 1:1d18a2a3e9a0 116 }
DaniusKalv 1:1d18a2a3e9a0 117 else if(strcmp(buffer, "P9") == 0){
DaniusKalv 2:4e81ddaec100 118 P9 = value;
DaniusKalv 1:1d18a2a3e9a0 119 pc.printf("\r\nP9 value %i\r\n", value);
DaniusKalv 1:1d18a2a3e9a0 120 }
DaniusKalv 1:1d18a2a3e9a0 121 else if(strcmp(buffer, "P10") == 0){
DaniusKalv 2:4e81ddaec100 122 P10 = value;
DaniusKalv 1:1d18a2a3e9a0 123 pc.printf("\r\nP10 value %i\r\n", value);
DaniusKalv 1:1d18a2a3e9a0 124 }
DaniusKalv 1:1d18a2a3e9a0 125 else if(strcmp(buffer, "P11") == 0){
DaniusKalv 2:4e81ddaec100 126 P11 = value;
DaniusKalv 1:1d18a2a3e9a0 127 pc.printf("\r\nP11 value %i\r\n", value);
DaniusKalv 1:1d18a2a3e9a0 128 }
DaniusKalv 1:1d18a2a3e9a0 129 else if(strcmp(buffer, "P12") == 0){
DaniusKalv 2:4e81ddaec100 130 P12 = value;
DaniusKalv 1:1d18a2a3e9a0 131 pc.printf("\r\nP12 value %i\r\n", value);
DaniusKalv 1:1d18a2a3e9a0 132 }
DaniusKalv 1:1d18a2a3e9a0 133 else if(strcmp(buffer, "P13") == 0){
DaniusKalv 2:4e81ddaec100 134 P13 = value;
DaniusKalv 1:1d18a2a3e9a0 135 pc.printf("\r\nP13 value %i\r\n", value);
DaniusKalv 1:1d18a2a3e9a0 136 }
DaniusKalv 1:1d18a2a3e9a0 137 else if(strcmp(buffer, "P14") == 0){
DaniusKalv 2:4e81ddaec100 138 P14 = value;
DaniusKalv 1:1d18a2a3e9a0 139 pc.printf("\r\nP14 value %i\r\n", value);
DaniusKalv 0:fc1ff02f51e1 140 }
DaniusKalv 1:1d18a2a3e9a0 141 else if(strcmp(buffer, "P15") == 0){
DaniusKalv 1:1d18a2a3e9a0 142 pc.printf("\r\nRead analog P15 value = %fV\r\n", (P15 * 3.3));
DaniusKalv 1:1d18a2a3e9a0 143 }
DaniusKalv 1:1d18a2a3e9a0 144 else if(strcmp(buffer, "P16") == 0){
DaniusKalv 1:1d18a2a3e9a0 145 pc.printf("\r\nRead analog P16 value = %fV\r\n", (P16 * 3.3));
DaniusKalv 1:1d18a2a3e9a0 146 }
DaniusKalv 1:1d18a2a3e9a0 147 else if(strcmp(buffer, "P17") == 0){
DaniusKalv 1:1d18a2a3e9a0 148 pc.printf("\r\nRead analog P17 value = %fV\r\n", (P17 * 3.3));
DaniusKalv 1:1d18a2a3e9a0 149 }
DaniusKalv 1:1d18a2a3e9a0 150 else if(strcmp(buffer, "P18") == 0){
DaniusKalv 1:1d18a2a3e9a0 151 pc.printf("\r\nRead analog P18 value = %fV\r\n", (P18 * 3.3));
DaniusKalv 1:1d18a2a3e9a0 152 }
DaniusKalv 1:1d18a2a3e9a0 153 else if(strcmp(buffer, "P19") == 0){
DaniusKalv 1:1d18a2a3e9a0 154 pc.printf("\r\nRead analog P19 value = %fV\r\n", (P19 * 3.3));
DaniusKalv 1:1d18a2a3e9a0 155 }
DaniusKalv 1:1d18a2a3e9a0 156 else if(strcmp(buffer, "P20") == 0){
DaniusKalv 1:1d18a2a3e9a0 157 pc.printf("\r\nRead analog P20 value = %fV\r\n", (P20 * 3.3));
DaniusKalv 1:1d18a2a3e9a0 158 }
DaniusKalv 1:1d18a2a3e9a0 159 else if(strcmp(buffer, "P21") == 0){
DaniusKalv 1:1d18a2a3e9a0 160 float tmp = ((float) value) / 255;
DaniusKalv 1:1d18a2a3e9a0 161 P21 = tmp;
DaniusKalv 1:1d18a2a3e9a0 162 pc.printf("\r\nP21 value %i\r\n", value);
DaniusKalv 1:1d18a2a3e9a0 163 }
DaniusKalv 1:1d18a2a3e9a0 164 else if(strcmp(buffer, "P22") == 0){
DaniusKalv 1:1d18a2a3e9a0 165 float tmp = ((float) value) / 255;
DaniusKalv 1:1d18a2a3e9a0 166 P22 = tmp;
DaniusKalv 1:1d18a2a3e9a0 167 pc.printf("\r\nP22 value %i\r\n", value);
DaniusKalv 1:1d18a2a3e9a0 168 }
DaniusKalv 1:1d18a2a3e9a0 169 else if(strcmp(buffer, "P23") == 0){
DaniusKalv 1:1d18a2a3e9a0 170 float tmp = ((float) value) / 255;
DaniusKalv 1:1d18a2a3e9a0 171 P23 = tmp;
DaniusKalv 1:1d18a2a3e9a0 172 pc.printf("\r\nP23 value %i\r\n", value);
DaniusKalv 0:fc1ff02f51e1 173 }
DaniusKalv 1:1d18a2a3e9a0 174 else if(strcmp(buffer, "P24") == 0){
DaniusKalv 1:1d18a2a3e9a0 175 float tmp = ((float) value) / 255;
DaniusKalv 1:1d18a2a3e9a0 176 P24 = tmp;
DaniusKalv 1:1d18a2a3e9a0 177 pc.printf("\r\nP24 value %i\r\n", value);
DaniusKalv 1:1d18a2a3e9a0 178 }
DaniusKalv 1:1d18a2a3e9a0 179 else if(strcmp(buffer, "P25") == 0){
DaniusKalv 1:1d18a2a3e9a0 180 float tmp = ((float) value) / 255;
DaniusKalv 1:1d18a2a3e9a0 181 P25 = tmp;
DaniusKalv 1:1d18a2a3e9a0 182 pc.printf("\r\nP25 value %i\r\n", value);
DaniusKalv 1:1d18a2a3e9a0 183 }
DaniusKalv 1:1d18a2a3e9a0 184 else if(strcmp(buffer, "P26") == 0){
DaniusKalv 1:1d18a2a3e9a0 185 float tmp = ((float) value) / 255;
DaniusKalv 1:1d18a2a3e9a0 186 P26 = tmp;
DaniusKalv 1:1d18a2a3e9a0 187 pc.printf("\r\nP26 value %i\r\n", value);
DaniusKalv 1:1d18a2a3e9a0 188 }
DaniusKalv 1:1d18a2a3e9a0 189 else if(strcmp(buffer, "P27") == 0){
DaniusKalv 2:4e81ddaec100 190 P27 = value;
DaniusKalv 1:1d18a2a3e9a0 191 pc.printf("\r\nP27 value %i\r\n", value);
DaniusKalv 1:1d18a2a3e9a0 192 }
DaniusKalv 1:1d18a2a3e9a0 193 else if(strcmp(buffer, "P28") == 0){
DaniusKalv 2:4e81ddaec100 194 P28 = value;
DaniusKalv 1:1d18a2a3e9a0 195 pc.printf("\r\nP28 value %i\r\n", value);
DaniusKalv 1:1d18a2a3e9a0 196 }
DaniusKalv 1:1d18a2a3e9a0 197 else if(strcmp(buffer, "P29") == 0){
DaniusKalv 2:4e81ddaec100 198 P29 = value;
DaniusKalv 1:1d18a2a3e9a0 199 pc.printf("\r\nP29 value %i\r\n", value);
DaniusKalv 1:1d18a2a3e9a0 200 }
DaniusKalv 1:1d18a2a3e9a0 201 else if(strcmp(buffer, "P30") == 0){
DaniusKalv 2:4e81ddaec100 202 P30 = value;
DaniusKalv 1:1d18a2a3e9a0 203 pc.printf("\r\nP30 value %i\r\n", value);
DaniusKalv 0:fc1ff02f51e1 204 }
DaniusKalv 0:fc1ff02f51e1 205 else pc.printf("\r\nCommand not recognised!\r\n");
DaniusKalv 0:fc1ff02f51e1 206 //else if(receiver == "RED"){
DaniusKalv 0:fc1ff02f51e1 207 //pc.gets(
DaniusKalv 0:fc1ff02f51e1 208 }
DaniusKalv 0:fc1ff02f51e1 209 }
DaniusKalv 0:fc1ff02f51e1 210
DaniusKalv 0:fc1ff02f51e1 211 void receive(){
DaniusKalv 0:fc1ff02f51e1 212 memset(temp, 255, sizeof(temp));
DaniusKalv 0:fc1ff02f51e1 213 char c;
DaniusKalv 0:fc1ff02f51e1 214 int i = 0;
DaniusKalv 0:fc1ff02f51e1 215
DaniusKalv 0:fc1ff02f51e1 216 while(true){
DaniusKalv 0:fc1ff02f51e1 217 if(pc.readable()){
DaniusKalv 0:fc1ff02f51e1 218 c = pc.getc();
DaniusKalv 0:fc1ff02f51e1 219 if (c == 13){
DaniusKalv 0:fc1ff02f51e1 220 temp[i] = 0;
DaniusKalv 0:fc1ff02f51e1 221 break;
DaniusKalv 0:fc1ff02f51e1 222 }
DaniusKalv 0:fc1ff02f51e1 223 else temp[i] = c;
DaniusKalv 0:fc1ff02f51e1 224 pc.putc(c);
DaniusKalv 0:fc1ff02f51e1 225 i++;
DaniusKalv 0:fc1ff02f51e1 226 }
DaniusKalv 0:fc1ff02f51e1 227 }
DaniusKalv 0:fc1ff02f51e1 228 }
DaniusKalv 1:1d18a2a3e9a0 229
DaniusKalv 1:1d18a2a3e9a0 230 void extractCommand(char *buffer, int &value){
DaniusKalv 1:1d18a2a3e9a0 231 bool inNumber = false;
DaniusKalv 1:1d18a2a3e9a0 232 int difference = 0;
DaniusKalv 1:1d18a2a3e9a0 233 int number[10];
DaniusKalv 1:1d18a2a3e9a0 234 for(int i = 0; i < 100; i++){
DaniusKalv 1:1d18a2a3e9a0 235
DaniusKalv 1:1d18a2a3e9a0 236 if(temp[i] == 0){
DaniusKalv 1:1d18a2a3e9a0 237 value = 0;
DaniusKalv 1:1d18a2a3e9a0 238 return;
DaniusKalv 1:1d18a2a3e9a0 239 }
DaniusKalv 1:1d18a2a3e9a0 240 if(inNumber){
DaniusKalv 1:1d18a2a3e9a0 241 if(temp[i] != 62){
DaniusKalv 1:1d18a2a3e9a0 242 number[i - difference] = temp[i] - 48;
DaniusKalv 1:1d18a2a3e9a0 243 }
DaniusKalv 1:1d18a2a3e9a0 244 else{
DaniusKalv 1:1d18a2a3e9a0 245 value = 0;
DaniusKalv 1:1d18a2a3e9a0 246 int decimals = i - difference;
DaniusKalv 1:1d18a2a3e9a0 247 //pc.printf("\r\nNumber of decimals = %i", decimals);
DaniusKalv 1:1d18a2a3e9a0 248 for(int i = 0; i < decimals; i++){
DaniusKalv 1:1d18a2a3e9a0 249 int temp = decimals - i - 1;
DaniusKalv 1:1d18a2a3e9a0 250 //pc.printf("\r\nTemp = %i Number = %i Power = %i", temp, number[i], power(temp));
DaniusKalv 1:1d18a2a3e9a0 251 value = value + (number[i] * power(temp));
DaniusKalv 1:1d18a2a3e9a0 252 //pc.printf("\r\nValue = %i", value);
DaniusKalv 1:1d18a2a3e9a0 253 }
DaniusKalv 1:1d18a2a3e9a0 254 //pc.printf("\r\nFinal value = %i", value);
DaniusKalv 1:1d18a2a3e9a0 255 return;
DaniusKalv 1:1d18a2a3e9a0 256 }
DaniusKalv 1:1d18a2a3e9a0 257 }
DaniusKalv 1:1d18a2a3e9a0 258
DaniusKalv 1:1d18a2a3e9a0 259 if((temp[i] != 60) && !(inNumber)){
DaniusKalv 1:1d18a2a3e9a0 260 buffer[i] = temp[i];
DaniusKalv 1:1d18a2a3e9a0 261 }
DaniusKalv 1:1d18a2a3e9a0 262 else if(!(inNumber)){
DaniusKalv 1:1d18a2a3e9a0 263 inNumber = true;
DaniusKalv 1:1d18a2a3e9a0 264 difference = i + 1;
DaniusKalv 1:1d18a2a3e9a0 265 //pc.printf("\r\nIn number, difference = %i", difference);
DaniusKalv 1:1d18a2a3e9a0 266 }
DaniusKalv 1:1d18a2a3e9a0 267 }
DaniusKalv 1:1d18a2a3e9a0 268 }
DaniusKalv 1:1d18a2a3e9a0 269
DaniusKalv 1:1d18a2a3e9a0 270 int power(int pow){
DaniusKalv 1:1d18a2a3e9a0 271
DaniusKalv 1:1d18a2a3e9a0 272 if(pow == 0) return 1;
DaniusKalv 1:1d18a2a3e9a0 273
DaniusKalv 1:1d18a2a3e9a0 274 int rezult = 1;
DaniusKalv 1:1d18a2a3e9a0 275
DaniusKalv 1:1d18a2a3e9a0 276 for(int i = 1; i <= pow; i++){
DaniusKalv 1:1d18a2a3e9a0 277 rezult *= 10;
DaniusKalv 1:1d18a2a3e9a0 278 }
DaniusKalv 1:1d18a2a3e9a0 279 return rezult;
DaniusKalv 1:1d18a2a3e9a0 280 }