final

Dependencies:   Servo TSI mbed-rtos mbed

Committer:
backman
Date:
Fri Dec 02 13:06:19 2016 +0000
Revision:
0:ab66364231c8
final

Who changed what in which revision?

UserRevisionLine numberNew contents of line
backman 0:ab66364231c8 1 #include "mbed.h"
backman 0:ab66364231c8 2 #include "Servo.h"
backman 0:ab66364231c8 3 #include "TSISensor.h"
backman 0:ab66364231c8 4 #include "rtos.h"
backman 0:ab66364231c8 5 DigitalOut ledR(LED1);
backman 0:ab66364231c8 6 DigitalOut ledG(LED2);
backman 0:ab66364231c8 7 DigitalOut ledB(LED3);
backman 0:ab66364231c8 8
backman 0:ab66364231c8 9 I2CSlave slave(PTE0,PTE1);
backman 0:ab66364231c8 10 Servo s(PTB0);
backman 0:ab66364231c8 11
backman 0:ab66364231c8 12
backman 0:ab66364231c8 13
backman 0:ab66364231c8 14 TSISensor tsi;
backman 0:ab66364231c8 15
backman 0:ab66364231c8 16
backman 0:ab66364231c8 17 bool strCmp(char*a, char*b){
backman 0:ab66364231c8 18
backman 0:ab66364231c8 19
backman 0:ab66364231c8 20
backman 0:ab66364231c8 21 int ptr=0;
backman 0:ab66364231c8 22 bool flag=true;
backman 0:ab66364231c8 23 for(;a[ptr]!='\0'||b[ptr]!='\0';ptr++){
backman 0:ab66364231c8 24 if(a[ptr]!=b[ptr]){
backman 0:ab66364231c8 25 flag=false;
backman 0:ab66364231c8 26 break;
backman 0:ab66364231c8 27 }
backman 0:ab66364231c8 28 }
backman 0:ab66364231c8 29
backman 0:ab66364231c8 30
backman 0:ab66364231c8 31 return flag;
backman 0:ab66364231c8 32
backman 0:ab66364231c8 33 }
backman 0:ab66364231c8 34
backman 0:ab66364231c8 35
backman 0:ab66364231c8 36 void ledCtl(char* str){
backman 0:ab66364231c8 37
backman 0:ab66364231c8 38 if(strCmp(str,"R")){
backman 0:ab66364231c8 39 ledR=0;
backman 0:ab66364231c8 40
backman 0:ab66364231c8 41 }
backman 0:ab66364231c8 42 else if(strCmp(str,"G"))
backman 0:ab66364231c8 43 ledG=0;
backman 0:ab66364231c8 44 else if(strCmp(str,"B"))
backman 0:ab66364231c8 45 ledB=0;
backman 0:ab66364231c8 46 else if(strCmp(str,"T"))
backman 0:ab66364231c8 47 ledR=1;
backman 0:ab66364231c8 48 else if(strCmp(str,"H"))
backman 0:ab66364231c8 49 ledG=1;
backman 0:ab66364231c8 50 else if(strCmp(str,"N"))
backman 0:ab66364231c8 51 ledB=1;
backman 0:ab66364231c8 52 else{
backman 0:ab66364231c8 53 ledR=ledG=ledB=1;
backman 0:ab66364231c8 54
backman 0:ab66364231c8 55 }
backman 0:ab66364231c8 56
backman 0:ab66364231c8 57 }
backman 0:ab66364231c8 58
backman 0:ab66364231c8 59
backman 0:ab66364231c8 60 void servoCtl(char* str){
backman 0:ab66364231c8 61 float ang= (float) str[0];
backman 0:ab66364231c8 62 s.angle(ang);
backman 0:ab66364231c8 63
backman 0:ab66364231c8 64
backman 0:ab66364231c8 65 }
backman 0:ab66364231c8 66
backman 0:ab66364231c8 67
backman 0:ab66364231c8 68
backman 0:ab66364231c8 69 void ble_i2c(void const *args) {
backman 0:ab66364231c8 70
backman 0:ab66364231c8 71 char buf[20];
backman 0:ab66364231c8 72 char msg[] = "Backman!";
backman 0:ab66364231c8 73 slave.address(0xBA);
backman 0:ab66364231c8 74
backman 0:ab66364231c8 75
backman 0:ab66364231c8 76 while (true) {
backman 0:ab66364231c8 77
backman 0:ab66364231c8 78 int i = slave.receive();
backman 0:ab66364231c8 79 switch (i) {
backman 0:ab66364231c8 80 case I2CSlave::ReadAddressed:
backman 0:ab66364231c8 81 slave.write(msg, strlen(msg) + 1); // Includes null char
backman 0:ab66364231c8 82 break;
backman 0:ab66364231c8 83 case I2CSlave::WriteGeneral:
backman 0:ab66364231c8 84 slave.read(buf, 20);
backman 0:ab66364231c8 85 printf("Read G: %s\n", buf);
backman 0:ab66364231c8 86 break;
backman 0:ab66364231c8 87 case I2CSlave::WriteAddressed:
backman 0:ab66364231c8 88
backman 0:ab66364231c8 89 slave.read(buf, 20);
backman 0:ab66364231c8 90 //ledCtl(buf);
backman 0:ab66364231c8 91 servoCtl(buf);
backman 0:ab66364231c8 92 printf("Read A: %s\r\n", buf);
backman 0:ab66364231c8 93 break;
backman 0:ab66364231c8 94 }
backman 0:ab66364231c8 95 for(int i = 0; i < 20; i++) buf[i] = 0; // Clear buffer
backman 0:ab66364231c8 96
backman 0:ab66364231c8 97 Thread::wait(50);
backman 0:ab66364231c8 98 }
backman 0:ab66364231c8 99
backman 0:ab66364231c8 100
backman 0:ab66364231c8 101
backman 0:ab66364231c8 102 }
backman 0:ab66364231c8 103
backman 0:ab66364231c8 104
backman 0:ab66364231c8 105
backman 0:ab66364231c8 106
backman 0:ab66364231c8 107
backman 0:ab66364231c8 108
backman 0:ab66364231c8 109
backman 0:ab66364231c8 110 int main() {
backman 0:ab66364231c8 111
backman 0:ab66364231c8 112
backman 0:ab66364231c8 113 ledR=ledG=ledB=1;
backman 0:ab66364231c8 114 // Thread thread(ble_i2c);
backman 0:ab66364231c8 115
backman 0:ab66364231c8 116 s.angle(0);
backman 0:ab66364231c8 117
backman 0:ab66364231c8 118 char buf[20];
backman 0:ab66364231c8 119 char msg[] = "Backman!";
backman 0:ab66364231c8 120 slave.address(0xBA);
backman 0:ab66364231c8 121
backman 0:ab66364231c8 122
backman 0:ab66364231c8 123 while (true) {
backman 0:ab66364231c8 124
backman 0:ab66364231c8 125 int i = slave.receive();
backman 0:ab66364231c8 126 switch (i) {
backman 0:ab66364231c8 127 case I2CSlave::ReadAddressed:
backman 0:ab66364231c8 128 slave.write(msg, strlen(msg) + 1); // Includes null char
backman 0:ab66364231c8 129 break;
backman 0:ab66364231c8 130 case I2CSlave::WriteGeneral:
backman 0:ab66364231c8 131 slave.read(buf, 20);
backman 0:ab66364231c8 132 printf("Read G: %s\n", buf);
backman 0:ab66364231c8 133 break;
backman 0:ab66364231c8 134 case I2CSlave::WriteAddressed:
backman 0:ab66364231c8 135
backman 0:ab66364231c8 136 slave.read(buf, 20);
backman 0:ab66364231c8 137 //ledCtl(buf);
backman 0:ab66364231c8 138 servoCtl(buf);
backman 0:ab66364231c8 139 printf("Read A: %s\r\n", buf);
backman 0:ab66364231c8 140 break;
backman 0:ab66364231c8 141 }
backman 0:ab66364231c8 142 for(int i = 0; i < 20; i++) buf[i] = 0; // Clear buffer
backman 0:ab66364231c8 143
backman 0:ab66364231c8 144
backman 0:ab66364231c8 145 }
backman 0:ab66364231c8 146
backman 0:ab66364231c8 147
backman 0:ab66364231c8 148
backman 0:ab66364231c8 149
backman 0:ab66364231c8 150 return 0;
backman 0:ab66364231c8 151
backman 0:ab66364231c8 152
backman 0:ab66364231c8 153 }