PSTL - Robot Mobile / Mbed 2 deprecated Nucleo_i2c_slave

Dependencies:   mbed

Committer:
rodrigogenes
Date:
Fri Mar 03 17:09:31 2017 +0000
Revision:
1:f77859e74071
Parent:
0:bdd449e55907
I2C It works!!!

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rodrigogenes 0:bdd449e55907 1 // Simple I2C responder
rodrigogenes 0:bdd449e55907 2 #include <mbed.h>
rodrigogenes 0:bdd449e55907 3
rodrigogenes 0:bdd449e55907 4
rodrigogenes 0:bdd449e55907 5
rodrigogenes 0:bdd449e55907 6 I2CSlave slave(D14, D15);
rodrigogenes 1:f77859e74071 7
rodrigogenes 1:f77859e74071 8 Serial pc(USBTX, USBRX); // tx, rx
rodrigogenes 1:f77859e74071 9
rodrigogenes 1:f77859e74071 10 PwmOut pwmNO(D9);
rodrigogenes 1:f77859e74071 11 DigitalOut dirNO(D7);
rodrigogenes 1:f77859e74071 12 PwmOut pwmNE(D10);
rodrigogenes 1:f77859e74071 13 DigitalOut dirNE(D8);
rodrigogenes 1:f77859e74071 14
rodrigogenes 1:f77859e74071 15 float power_NO = 0.0;
rodrigogenes 1:f77859e74071 16 float power_NE = 0.0;
rodrigogenes 1:f77859e74071 17
rodrigogenes 0:bdd449e55907 18
rodrigogenes 0:bdd449e55907 19 int main() {
rodrigogenes 0:bdd449e55907 20
rodrigogenes 0:bdd449e55907 21 DigitalOut myLED (LED2);
rodrigogenes 1:f77859e74071 22
rodrigogenes 1:f77859e74071 23 pc.printf("Hello!\n");
rodrigogenes 1:f77859e74071 24
rodrigogenes 1:f77859e74071 25 pwmNO.period_us(1000);
rodrigogenes 1:f77859e74071 26 pwmNE.period_us(1000);
rodrigogenes 1:f77859e74071 27 dirNO=0;
rodrigogenes 1:f77859e74071 28 dirNE=1;
rodrigogenes 1:f77859e74071 29
rodrigogenes 1:f77859e74071 30 pwmNO.pulsewidth_us(0);
rodrigogenes 1:f77859e74071 31 pwmNE.pulsewidth_us(0);
rodrigogenes 0:bdd449e55907 32
rodrigogenes 0:bdd449e55907 33
rodrigogenes 1:f77859e74071 34 const int addr = 0x10;
rodrigogenes 0:bdd449e55907 35
rodrigogenes 1:f77859e74071 36 slave.address(addr);
rodrigogenes 1:f77859e74071 37
rodrigogenes 1:f77859e74071 38 char buf[1];
rodrigogenes 1:f77859e74071 39
rodrigogenes 1:f77859e74071 40 while (1) {
rodrigogenes 0:bdd449e55907 41 int i = slave.receive();
rodrigogenes 1:f77859e74071 42
rodrigogenes 0:bdd449e55907 43 switch (i) {
rodrigogenes 1:f77859e74071 44 // case I2CSlave::ReadAddressed:
rodrigogenes 0:bdd449e55907 45
rodrigogenes 1:f77859e74071 46 // slave.write(5); // Includes null char
rodrigogenes 0:bdd449e55907 47
rodrigogenes 1:f77859e74071 48 // myLED=0;
rodrigogenes 1:f77859e74071 49 // break;
rodrigogenes 1:f77859e74071 50 // case I2CSlave::WriteGeneral:
rodrigogenes 0:bdd449e55907 51
rodrigogenes 0:bdd449e55907 52 //to implement
rodrigogenes 0:bdd449e55907 53 case I2CSlave::WriteAddressed:
rodrigogenes 0:bdd449e55907 54
rodrigogenes 1:f77859e74071 55 slave.read(buf, 1);
rodrigogenes 1:f77859e74071 56 char c= buf[0]+48;
rodrigogenes 1:f77859e74071 57
rodrigogenes 1:f77859e74071 58 if((c == '1') && (power_NO < 0.8)) {
rodrigogenes 1:f77859e74071 59 power_NO += 0.2;
rodrigogenes 1:f77859e74071 60 pc.printf("Gauche Up!\n");
rodrigogenes 1:f77859e74071 61 }
rodrigogenes 1:f77859e74071 62 if((c == '2') && (power_NO > -0.8)) {
rodrigogenes 1:f77859e74071 63 power_NO -= 0.2;
rodrigogenes 1:f77859e74071 64 pc.printf("Gauche Down!\n");
rodrigogenes 1:f77859e74071 65 }
rodrigogenes 1:f77859e74071 66 if((c == '3') && (power_NE < 0.8)) {
rodrigogenes 1:f77859e74071 67 power_NE += 0.2;
rodrigogenes 1:f77859e74071 68 pc.printf("Droite Up!\n");
rodrigogenes 1:f77859e74071 69 }
rodrigogenes 1:f77859e74071 70 if((c == '4') && (power_NE > -0.8)) {
rodrigogenes 1:f77859e74071 71 power_NE -= 0.2;
rodrigogenes 1:f77859e74071 72 pc.printf("Droite Down!\n");
rodrigogenes 1:f77859e74071 73 }
rodrigogenes 1:f77859e74071 74 if((c == '5') && (power_NO < 0.8) && (power_NE < 0.8)) {
rodrigogenes 1:f77859e74071 75 power_NO += 0.2;
rodrigogenes 1:f77859e74071 76 power_NE += 0.2;
rodrigogenes 1:f77859e74071 77 pc.printf("Gauche Droite Up!\n");
rodrigogenes 1:f77859e74071 78 }
rodrigogenes 1:f77859e74071 79 if((c == '6') && (power_NO > -0.8)&& (power_NE > -0.8)) {
rodrigogenes 1:f77859e74071 80 power_NO -= 0.2;
rodrigogenes 1:f77859e74071 81 power_NE -= 0.2;
rodrigogenes 1:f77859e74071 82 pc.printf("Gauche Droite Down!\n");
rodrigogenes 1:f77859e74071 83 }
rodrigogenes 1:f77859e74071 84 if((c == '7')) {
rodrigogenes 1:f77859e74071 85 power_NO = 0;
rodrigogenes 1:f77859e74071 86 power_NE = 0;
rodrigogenes 1:f77859e74071 87 pc.printf("Stop!\n");
rodrigogenes 1:f77859e74071 88 }
rodrigogenes 1:f77859e74071 89
rodrigogenes 1:f77859e74071 90
rodrigogenes 1:f77859e74071 91
rodrigogenes 1:f77859e74071 92
rodrigogenes 1:f77859e74071 93
rodrigogenes 1:f77859e74071 94 if(power_NO>0){
rodrigogenes 1:f77859e74071 95 dirNO=0;
rodrigogenes 1:f77859e74071 96 pwmNO.pulsewidth_us(1000*power_NO);
rodrigogenes 1:f77859e74071 97 } else {
rodrigogenes 1:f77859e74071 98 dirNO=1;
rodrigogenes 1:f77859e74071 99 pwmNO.pulsewidth_us(-1000*power_NO);
rodrigogenes 1:f77859e74071 100 }
rodrigogenes 1:f77859e74071 101 if(power_NE>0){
rodrigogenes 1:f77859e74071 102 dirNE=1;
rodrigogenes 1:f77859e74071 103 pwmNE.pulsewidth_us(1000*power_NE);
rodrigogenes 1:f77859e74071 104 } else {
rodrigogenes 1:f77859e74071 105 dirNE=0;
rodrigogenes 1:f77859e74071 106 pwmNE.pulsewidth_us(-1000*power_NE);
rodrigogenes 1:f77859e74071 107 }
rodrigogenes 1:f77859e74071 108
rodrigogenes 1:f77859e74071 109
rodrigogenes 1:f77859e74071 110 wait(0.1);
rodrigogenes 0:bdd449e55907 111
rodrigogenes 0:bdd449e55907 112 break;
rodrigogenes 0:bdd449e55907 113 }
rodrigogenes 1:f77859e74071 114 for(int i = 0; i < 1; i++) buf[i] = 0; // Clear buffer
rodrigogenes 0:bdd449e55907 115 }
rodrigogenes 0:bdd449e55907 116 }