Bertl

Dependencies:   mbed

Fork of All-15 by Ladner-Praja

Committer:
ladner
Date:
Tue Jul 07 22:43:49 2015 +0000
Revision:
16:b952b10f2f6e
Parent:
15:dbb2ef352057
Folge der Linie(2015)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ladner 0:cce97dfa8e6b 1 #include "mbed.h"
ladner 0:cce97dfa8e6b 2
ladner 0:cce97dfa8e6b 3 I2C i2c(p28, p27);
ladner 0:cce97dfa8e6b 4 BusOut myled(LED1,LED2,LED3,LED4);
ladner 0:cce97dfa8e6b 5 BusOut myrgb(P1_23,P1_25,P1_24);
ladner 0:cce97dfa8e6b 6 DigitalOut LedBlue(P1_28);
ladner 0:cce97dfa8e6b 7 BusIn myline(p18,p16,p19,p17);
ladner 0:cce97dfa8e6b 8 DigitalIn linecenter(p20);
ladner 0:cce97dfa8e6b 9 DigitalOut online(P1_6);
ladner 9:b627760fd5d9 10 PwmOut MotorL_EN(P1_15);
ladner 0:cce97dfa8e6b 11 DigitalOut MotorL_FORWARD(P1_1);
ladner 0:cce97dfa8e6b 12 DigitalOut MotorL_REVERSE(P1_0);
ladner 9:b627760fd5d9 13 PwmOut MotorR_EN(P0_21);
ladner 0:cce97dfa8e6b 14 DigitalOut MotorR_FORWARD(P1_3);
ladner 0:cce97dfa8e6b 15 DigitalOut MotorR_REVERSE(P1_4);
ladner 0:cce97dfa8e6b 16 DigitalOut Motor_SENSOR(P1_7);
ladner 0:cce97dfa8e6b 17 DigitalOut enable(P1_2);
ladner 0:cce97dfa8e6b 18 DigitalIn SensorL(P1_12);
ladner 0:cce97dfa8e6b 19 DigitalIn SensorR(P1_13);
ladner 15:dbb2ef352057 20 float slow = 0.25;
ladner 15:dbb2ef352057 21 float fast = 0.50;
ladner 2:1317061163f8 22 int out_helper[8];
ladner 0:cce97dfa8e6b 23 int main()
ladner 0:cce97dfa8e6b 24 {
ladner 2:1317061163f8 25 out_helper[0]=0;
ladner 2:1317061163f8 26 out_helper[1]=1;
ladner 2:1317061163f8 27 out_helper[2]=3;
ladner 2:1317061163f8 28 out_helper[3]=7;
ladner 2:1317061163f8 29 out_helper[4]=15;
ladner 2:1317061163f8 30 out_helper[5]=14;
ladner 2:1317061163f8 31 out_helper[6]=12;
ladner 2:1317061163f8 32 out_helper[7]=8;
ladner 2:1317061163f8 33
ladner 0:cce97dfa8e6b 34 enable = 0;
ladner 0:cce97dfa8e6b 35 online = 0;
ladner 0:cce97dfa8e6b 36 Motor_SENSOR=0;
ladner 0:cce97dfa8e6b 37
ladner 0:cce97dfa8e6b 38 myrgb = 0x07;//7->aus
ladner 0:cce97dfa8e6b 39 LedBlue=1;
ladner 0:cce97dfa8e6b 40 myled = 0x00;
ladner 0:cce97dfa8e6b 41
ladner 0:cce97dfa8e6b 42 MotorL_EN = 0;
ladner 0:cce97dfa8e6b 43 MotorL_FORWARD = 0;
ladner 0:cce97dfa8e6b 44 MotorL_REVERSE = 0;
ladner 0:cce97dfa8e6b 45 MotorR_EN = 0;
ladner 0:cce97dfa8e6b 46 MotorR_FORWARD = 0;
ladner 0:cce97dfa8e6b 47 MotorR_REVERSE = 0;
ladner 0:cce97dfa8e6b 48
ladner 0:cce97dfa8e6b 49 i2c.start();
ladner 0:cce97dfa8e6b 50 i2c.write(0x40);
ladner 0:cce97dfa8e6b 51 i2c.write(0x06);
ladner 0:cce97dfa8e6b 52 i2c.write(0x00);
ladner 0:cce97dfa8e6b 53 i2c.stop();
ladner 0:cce97dfa8e6b 54
ladner 0:cce97dfa8e6b 55 i2c.start();
ladner 0:cce97dfa8e6b 56 i2c.write(0x40);
ladner 0:cce97dfa8e6b 57 i2c.write(0x02);
ladner 0:cce97dfa8e6b 58 i2c.write(~0x00);
ladner 0:cce97dfa8e6b 59 i2c.stop();
ladner 0:cce97dfa8e6b 60
ladner 1:28cfac75543f 61 int waiting = 0;
ladner 11:4084ae1f1be8 62 int output = 0xff;
ladner 1:28cfac75543f 63 bool active = false;
ladner 1:28cfac75543f 64
ladner 0:cce97dfa8e6b 65 while(1){
ladner 1:28cfac75543f 66 if(active)
ladner 1:28cfac75543f 67 {
ladner 1:28cfac75543f 68 enable = 1;
ladner 1:28cfac75543f 69 online = 1;
ladner 15:dbb2ef352057 70 if((myline==0&&linecenter==0)||(myline==15&&linecenter==1))
ladner 9:b627760fd5d9 71 {
ladner 9:b627760fd5d9 72 active = false;
ladner 9:b627760fd5d9 73 MotorL_EN = 0;
ladner 9:b627760fd5d9 74 MotorL_FORWARD = 0;
ladner 9:b627760fd5d9 75 MotorL_REVERSE = 0;
ladner 9:b627760fd5d9 76 MotorR_EN = 0;
ladner 9:b627760fd5d9 77 MotorR_FORWARD = 0;
ladner 9:b627760fd5d9 78 MotorR_REVERSE = 0;
ladner 9:b627760fd5d9 79 }
ladner 9:b627760fd5d9 80 else
ladner 9:b627760fd5d9 81 {
ladner 11:4084ae1f1be8 82 output = 0xff;
ladner 14:7560cbb335f1 83 if((myline&0x08)>0)
ladner 10:389c1c4c1f2b 84 {
ladner 10:389c1c4c1f2b 85 MotorR_FORWARD = 0;
ladner 10:389c1c4c1f2b 86 MotorR_EN=0;
ladner 11:4084ae1f1be8 87 output=output&(~0x80);
ladner 10:389c1c4c1f2b 88 }
ladner 9:b627760fd5d9 89 else
ladner 10:389c1c4c1f2b 90 {
ladner 10:389c1c4c1f2b 91 MotorR_FORWARD = 1;
ladner 14:7560cbb335f1 92 if((myline&0x04)>0)
ladner 11:4084ae1f1be8 93 {
ladner 15:dbb2ef352057 94 MotorR_EN=slow;
ladner 11:4084ae1f1be8 95 output=output&(~0x40);
ladner 11:4084ae1f1be8 96 }
ladner 10:389c1c4c1f2b 97 else
ladner 15:dbb2ef352057 98 MotorR_EN=fast;
ladner 10:389c1c4c1f2b 99 }
ladner 9:b627760fd5d9 100
ladner 14:7560cbb335f1 101 if((myline&0x01)>0)
ladner 10:389c1c4c1f2b 102 {
ladner 10:389c1c4c1f2b 103 MotorL_EN=0;
ladner 10:389c1c4c1f2b 104 MotorL_FORWARD = 0;
ladner 11:4084ae1f1be8 105 output=output&(~0x10);
ladner 10:389c1c4c1f2b 106 }
ladner 9:b627760fd5d9 107 else
ladner 10:389c1c4c1f2b 108 {
ladner 12:070fc8ec44b6 109 MotorL_FORWARD = 1;
ladner 14:7560cbb335f1 110 if((myline&0x02)>0)
ladner 11:4084ae1f1be8 111 {
ladner 15:dbb2ef352057 112 MotorL_EN=slow;
ladner 11:4084ae1f1be8 113 output=output&(~0x20);
ladner 11:4084ae1f1be8 114 }
ladner 10:389c1c4c1f2b 115 else
ladner 15:dbb2ef352057 116 MotorL_EN=fast;
ladner 10:389c1c4c1f2b 117 }
ladner 11:4084ae1f1be8 118 myled=myline;
ladner 11:4084ae1f1be8 119 i2c.start();
ladner 11:4084ae1f1be8 120 i2c.write(0x40);
ladner 11:4084ae1f1be8 121 i2c.write(0x02);
ladner 11:4084ae1f1be8 122 i2c.write(output);
ladner 11:4084ae1f1be8 123 i2c.stop();
ladner 9:b627760fd5d9 124 }
ladner 3:2cd73b6f5b50 125 myrgb=3;
ladner 1:28cfac75543f 126 }
ladner 1:28cfac75543f 127 else
ladner 1:28cfac75543f 128 {
ladner 16:b952b10f2f6e 129 i2c.start();
ladner 16:b952b10f2f6e 130 i2c.write(0x40);
ladner 16:b952b10f2f6e 131 i2c.write(0x02);
ladner 16:b952b10f2f6e 132 i2c.write(~0x90);
ladner 16:b952b10f2f6e 133 i2c.stop();
ladner 2:1317061163f8 134 if(waiting<7)
ladner 5:e968c184ad9f 135 {
ladner 5:e968c184ad9f 136 wait(0.5);
ladner 5:e968c184ad9f 137 if(waiting==0)
ladner 5:e968c184ad9f 138 {
ladner 5:e968c184ad9f 139 enable = 0;
ladner 5:e968c184ad9f 140 online = 0;
ladner 5:e968c184ad9f 141 myrgb=7;
ladner 5:e968c184ad9f 142 }
ladner 1:28cfac75543f 143 waiting++;
ladner 5:e968c184ad9f 144 }
ladner 1:28cfac75543f 145 else
ladner 1:28cfac75543f 146 {
ladner 2:1317061163f8 147 enable = 1;
ladner 2:1317061163f8 148 online = 1;
ladner 5:e968c184ad9f 149 wait(0.5);
ladner 15:dbb2ef352057 150 if(myline==15&&linecenter==1)
ladner 13:2100fbde6d34 151 myrgb=0;
ladner 13:2100fbde6d34 152 else
ladner 8:c82246829dd4 153 if((myline>=1)||(linecenter==1))
ladner 2:1317061163f8 154 {
ladner 7:936bef387bbd 155 active=true;
ladner 9:b627760fd5d9 156 myrgb=5;
ladner 7:936bef387bbd 157 myled=0;
ladner 7:936bef387bbd 158 wait(0.5);
ladner 2:1317061163f8 159 }
ladner 2:1317061163f8 160 else
ladner 9:b627760fd5d9 161 myrgb=6;
ladner 2:1317061163f8 162 waiting=0;
ladner 1:28cfac75543f 163 }
ladner 9:b627760fd5d9 164 if(!active)
ladner 9:b627760fd5d9 165 myled=out_helper[waiting];
ladner 1:28cfac75543f 166 }
ladner 2:1317061163f8 167 //0=>keine Linie
ladner 0:cce97dfa8e6b 168
ladner 0:cce97dfa8e6b 169 //01->forneMitte
ladner 0:cce97dfa8e6b 170 //02->hintenMitte
ladner 0:cce97dfa8e6b 171 //04->forneLinks
ladner 0:cce97dfa8e6b 172 //08->forneRects
ladner 0:cce97dfa8e6b 173 //10->hintenLinks
ladner 0:cce97dfa8e6b 174 //20->hintenRechts
ladner 0:cce97dfa8e6b 175 //40->Rechts
ladner 0:cce97dfa8e6b 176 //80->Links
ladner 0:cce97dfa8e6b 177
ladner 11:4084ae1f1be8 178 //01->LinksWeis
ladner 11:4084ae1f1be8 179 //02->VorneGelbLinks
ladner 11:4084ae1f1be8 180 //04->RechtsWeis
ladner 11:4084ae1f1be8 181 //08->VorneGelbRechts
ladner 11:4084ae1f1be8 182 //10->LinksRot
ladner 11:4084ae1f1be8 183 //20->HintenGelbLinks
ladner 11:4084ae1f1be8 184 //40->HintenGelbRechts
ladner 11:4084ae1f1be8 185 //80->RechtsRot
ladner 0:cce97dfa8e6b 186 }
ladner 0:cce97dfa8e6b 187 }