Taster+Leds

Dependencies:   mbed

Committer:
floza
Date:
Mon Jan 18 10:57:09 2016 +0000
Revision:
0:e9090884eb32
Taster+Leds I2C

Who changed what in which revision?

UserRevisionLine numberNew contents of line
floza 0:e9090884eb32 1 #include "mbed.h"
floza 0:e9090884eb32 2
floza 0:e9090884eb32 3 I2C i2c(p28, p27);
floza 0:e9090884eb32 4
floza 0:e9090884eb32 5 PwmOut MotorL_EN(p34);
floza 0:e9090884eb32 6 DigitalOut MotorL_REVERSE(P1_0);
floza 0:e9090884eb32 7 DigitalOut MotorL_FORWARD(P1_1);
floza 0:e9090884eb32 8
floza 0:e9090884eb32 9 PwmOut MotorR_EN(p36);
floza 0:e9090884eb32 10 DigitalOut MotorR_FORWARD(P1_3);
floza 0:e9090884eb32 11 DigitalOut MotorR_REVERSE(P1_4);
floza 0:e9090884eb32 12
floza 0:e9090884eb32 13 BusIn linesensor(P0_14, P0_12, P0_16, P0_13);
floza 0:e9090884eb32 14
floza 0:e9090884eb32 15 const int addr = 0x40; // I2C-Adresse des PCA9555
floza 0:e9090884eb32 16 char cmd[3];
floza 0:e9090884eb32 17
floza 0:e9090884eb32 18
floza 0:e9090884eb32 19 char WertLesen();
floza 0:e9090884eb32 20 void TasterVorneRechts();
floza 0:e9090884eb32 21 void TasterVorneMitte();
floza 0:e9090884eb32 22 void TasterVorneLinks();
floza 0:e9090884eb32 23 void TasterHinten();
floza 0:e9090884eb32 24
floza 0:e9090884eb32 25 int main() {
floza 0:e9090884eb32 26
floza 0:e9090884eb32 27 char btn = 0;
floza 0:e9090884eb32 28
floza 0:e9090884eb32 29
floza 0:e9090884eb32 30 /*** I2C Konfigurationen ***/
floza 0:e9090884eb32 31 i2c.frequency(40000);
floza 0:e9090884eb32 32 cmd[0] = 0x06;
floza 0:e9090884eb32 33 cmd[1] = 0x00;
floza 0:e9090884eb32 34 i2c.write(addr, cmd, 2);
floza 0:e9090884eb32 35 cmd[0] = 0x02;
floza 0:e9090884eb32 36
floza 0:e9090884eb32 37
floza 0:e9090884eb32 38 while(1)
floza 0:e9090884eb32 39 {
floza 0:e9090884eb32 40 MotorR_FORWARD = MotorL_FORWARD = 1;
floza 0:e9090884eb32 41 MotorR_EN = MotorL_EN = 1;
floza 0:e9090884eb32 42 cmd[1] = 0xFA;
floza 0:e9090884eb32 43 i2c.write(addr, cmd, 2);
floza 0:e9090884eb32 44
floza 0:e9090884eb32 45 btn = WertLesen();
floza 0:e9090884eb32 46
floza 0:e9090884eb32 47 if(btn == 128)
floza 0:e9090884eb32 48 TasterVorneRechts();
floza 0:e9090884eb32 49
floza 0:e9090884eb32 50 if(btn == 4 || btn == 1 || btn == 8)
floza 0:e9090884eb32 51 TasterVorneMitte();
floza 0:e9090884eb32 52
floza 0:e9090884eb32 53 if(btn == 64)
floza 0:e9090884eb32 54 TasterVorneLinks();
floza 0:e9090884eb32 55
floza 0:e9090884eb32 56 if(btn == 16 || btn == 2 || btn == 32)
floza 0:e9090884eb32 57 TasterHinten();
floza 0:e9090884eb32 58
floza 0:e9090884eb32 59 wait(0.1);
floza 0:e9090884eb32 60 MotorR_EN = MotorL_EN = 0;
floza 0:e9090884eb32 61 MotorR_FORWARD = MotorL_FORWARD = 0;
floza 0:e9090884eb32 62 }
floza 0:e9090884eb32 63 }
floza 0:e9090884eb32 64
floza 0:e9090884eb32 65
floza 0:e9090884eb32 66
floza 0:e9090884eb32 67 char WertLesen() {
floza 0:e9090884eb32 68 char btn;
floza 0:e9090884eb32 69 i2c.start();
floza 0:e9090884eb32 70 i2c.write(0x40);
floza 0:e9090884eb32 71 i2c.write(0x01);
floza 0:e9090884eb32 72 i2c.start();
floza 0:e9090884eb32 73 i2c.write(0x41);
floza 0:e9090884eb32 74 btn = i2c.read(0);
floza 0:e9090884eb32 75 i2c.stop();
floza 0:e9090884eb32 76 return btn;
floza 0:e9090884eb32 77 }
floza 0:e9090884eb32 78
floza 0:e9090884eb32 79
floza 0:e9090884eb32 80 void TasterHinten() {
floza 0:e9090884eb32 81
floza 0:e9090884eb32 82 MotorR_FORWARD = MotorL_FORWARD = MotorL_REVERSE = MotorR_REVERSE = 0;
floza 0:e9090884eb32 83 MotorR_FORWARD = MotorL_FORWARD = 1;
floza 0:e9090884eb32 84 MotorR_EN = MotorL_EN = 0.5f;
floza 0:e9090884eb32 85 wait(1);
floza 0:e9090884eb32 86 MotorR_FORWARD = MotorL_FORWARD = 0;
floza 0:e9090884eb32 87 }
floza 0:e9090884eb32 88
floza 0:e9090884eb32 89
floza 0:e9090884eb32 90 void TasterVorneRechts() {
floza 0:e9090884eb32 91 int i = 0;
floza 0:e9090884eb32 92
floza 0:e9090884eb32 93 MotorR_FORWARD = MotorL_FORWARD = 0;
floza 0:e9090884eb32 94 MotorL_REVERSE = 1;
floza 0:e9090884eb32 95 MotorL_EN = 0.5f;
floza 0:e9090884eb32 96 do{
floza 0:e9090884eb32 97 cmd[1] = 0x77;
floza 0:e9090884eb32 98 i2c.write(addr, cmd, 2);
floza 0:e9090884eb32 99 wait(0.07);
floza 0:e9090884eb32 100 cmd[1] = 0xFF;
floza 0:e9090884eb32 101 i2c.write(addr, cmd, 2);
floza 0:e9090884eb32 102 wait(0.07);
floza 0:e9090884eb32 103 i++;
floza 0:e9090884eb32 104 }while(i < 7);
floza 0:e9090884eb32 105
floza 0:e9090884eb32 106 MotorL_REVERSE = 0;
floza 0:e9090884eb32 107 MotorL_EN = 0;
floza 0:e9090884eb32 108 }
floza 0:e9090884eb32 109
floza 0:e9090884eb32 110
floza 0:e9090884eb32 111 void TasterVorneMitte() {
floza 0:e9090884eb32 112 int i =0;
floza 0:e9090884eb32 113
floza 0:e9090884eb32 114 MotorR_FORWARD = MotorL_FORWARD = 0;
floza 0:e9090884eb32 115 MotorL_REVERSE = MotorR_REVERSE = 1;
floza 0:e9090884eb32 116 MotorL_EN = MotorR_EN = 0.5f;
floza 0:e9090884eb32 117 cmd[1] = 0xAF;
floza 0:e9090884eb32 118 i2c.write(addr, cmd, 2);
floza 0:e9090884eb32 119 wait(1);
floza 0:e9090884eb32 120 MotorL_REVERSE = MotorR_REVERSE = 0;
floza 0:e9090884eb32 121 MotorL_REVERSE = MotorR_FORWARD = 1;
floza 0:e9090884eb32 122 do {
floza 0:e9090884eb32 123 cmd[1] = 0x00;
floza 0:e9090884eb32 124 i2c.write(addr, cmd, 2);
floza 0:e9090884eb32 125 wait(0.07);
floza 0:e9090884eb32 126
floza 0:e9090884eb32 127 cmd[1] = 0xFF;
floza 0:e9090884eb32 128 i2c.write(addr, cmd, 2);
floza 0:e9090884eb32 129 wait(0.07);
floza 0:e9090884eb32 130
floza 0:e9090884eb32 131 i++;
floza 0:e9090884eb32 132 }while(i < 4);
floza 0:e9090884eb32 133 MotorL_REVERSE = MotorR_FORWARD = 0;
floza 0:e9090884eb32 134 MotorL_EN = MotorR_EN = 0;
floza 0:e9090884eb32 135 }
floza 0:e9090884eb32 136
floza 0:e9090884eb32 137
floza 0:e9090884eb32 138 void TasterVorneLinks() {
floza 0:e9090884eb32 139 int i =0;
floza 0:e9090884eb32 140
floza 0:e9090884eb32 141 MotorR_FORWARD = MotorL_FORWARD = 0;
floza 0:e9090884eb32 142 MotorR_REVERSE = 1;
floza 0:e9090884eb32 143 MotorR_EN = 0.5f;
floza 0:e9090884eb32 144 do {
floza 0:e9090884eb32 145 cmd[1] = 0xDD;
floza 0:e9090884eb32 146 i2c.write(addr, cmd, 2);
floza 0:e9090884eb32 147 wait(0.07);
floza 0:e9090884eb32 148
floza 0:e9090884eb32 149 cmd[1] = 0xFF;
floza 0:e9090884eb32 150 i2c.write(addr, cmd, 2);
floza 0:e9090884eb32 151 wait(0.07);
floza 0:e9090884eb32 152
floza 0:e9090884eb32 153 i++;
floza 0:e9090884eb32 154 }while(i < 7);
floza 0:e9090884eb32 155 MotorR_REVERSE = 0;
floza 0:e9090884eb32 156 MotorR_EN = 0;
floza 0:e9090884eb32 157 }