Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@1:08315c315df0, 2019-02-23 (annotated)
- Committer:
- Stevie
- Date:
- Sat Feb 23 16:45:39 2019 +0000
- Revision:
- 1:08315c315df0
- Parent:
- 0:d665d69947ab
- Child:
- 2:00535b62c344
Added ADC functionality for A0-A5
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Stevie | 0:d665d69947ab | 1 | #include "mbed.h" |
Stevie | 0:d665d69947ab | 2 | |
Stevie | 1:08315c315df0 | 3 | //Analog inputs A0-A5 addressable as such. A6 to A9 do not work. |
Stevie | 1:08315c315df0 | 4 | AnalogIn ANALOG0(A0); |
Stevie | 1:08315c315df0 | 5 | AnalogIn ANALOG1(A1); |
Stevie | 1:08315c315df0 | 6 | AnalogIn ANALOG2(A2); |
Stevie | 1:08315c315df0 | 7 | AnalogIn ANALOG3(A3); |
Stevie | 1:08315c315df0 | 8 | AnalogIn ANALOG4(A4); |
Stevie | 1:08315c315df0 | 9 | AnalogIn ANALOG5(A5); |
Stevie | 0:d665d69947ab | 10 | SPISlave rpi(PB_5, PB_4, PB_3, PA_15); //setup SPI pins to talk to the raspberry pi |
Stevie | 0:d665d69947ab | 11 | //PA_9 - MLB //PA_8 - MLF //PA_10 - MRF //PA_11 - MRB |
Stevie | 0:d665d69947ab | 12 | PwmOut MRB(PA_11); //back right motor |
Stevie | 0:d665d69947ab | 13 | PwmOut MRF(PA_10); //front right motor |
Stevie | 0:d665d69947ab | 14 | PwmOut MLB(PA_9); //back left motor |
Stevie | 0:d665d69947ab | 15 | PwmOut MLF(PA_8); //front left motor |
Stevie | 0:d665d69947ab | 16 | DigitalOut RAIN1(PC_6); //PC_9 - Left //PC_6 - Right |
Stevie | 0:d665d69947ab | 17 | DigitalOut RAIN2(PB_9); // PC_8 - Left //PB_9 - Right |
Stevie | 0:d665d69947ab | 18 | DigitalOut RSTANDBY(PC_5); //PB_8 - Left //PC_5 - Right |
Stevie | 0:d665d69947ab | 19 | DigitalOut LAIN1(PC_9); |
Stevie | 0:d665d69947ab | 20 | DigitalOut LAIN2(PC_8); |
Stevie | 0:d665d69947ab | 21 | DigitalOut LSTANDBY(PB_8); |
Stevie | 0:d665d69947ab | 22 | //InterruptIn ENCODER1(PC_7); //PC_12 - MLB //PC_11 - MLF //PB_7 - MRF //PB_6 - MRB |
Stevie | 0:d665d69947ab | 23 | //DigitalIn ENCODER2(PB_6); //PD_2 - MLB //PC_10 - MLF //PA_13 - MRF //PC_7 - MRB |
Stevie | 0:d665d69947ab | 24 | int m_speed_ref [4] = {0,0,0,0}; //setup array for 4 motor speeds |
Stevie | 0:d665d69947ab | 25 | float m_duty [4] = {0.0, 0.0, 0.0, 0.0}; //setup array for motor pwm duty |
Stevie | 0:d665d69947ab | 26 | int m_distance_ref [4] = {0,0,0,0}; //setup array for 4 motor distances |
Stevie | 0:d665d69947ab | 27 | int max_accel = 0; //for storing the maximum acceleration |
Stevie | 1:08315c315df0 | 28 | int adc_values[6] = {0,0,0,0,0,0}; //setup array for ADC values |
Stevie | 0:d665d69947ab | 29 | |
Stevie | 0:d665d69947ab | 30 | |
Stevie | 0:d665d69947ab | 31 | int main() |
Stevie | 0:d665d69947ab | 32 | { |
Stevie | 0:d665d69947ab | 33 | int i = 0; //temp counter variable |
Stevie | 0:d665d69947ab | 34 | int v = 0; //temp SPI variable |
Stevie | 1:08315c315df0 | 35 | |
Stevie | 0:d665d69947ab | 36 | |
Stevie | 0:d665d69947ab | 37 | //setup driver pins |
Stevie | 0:d665d69947ab | 38 | LAIN1 = 1; |
Stevie | 0:d665d69947ab | 39 | LAIN2 = 0; |
Stevie | 0:d665d69947ab | 40 | LSTANDBY = 1; |
Stevie | 0:d665d69947ab | 41 | RAIN1 = 1; |
Stevie | 0:d665d69947ab | 42 | RAIN2 = 0; |
Stevie | 0:d665d69947ab | 43 | RSTANDBY = 1; |
Stevie | 0:d665d69947ab | 44 | // Set PWM |
Stevie | 0:d665d69947ab | 45 | MRB.period_us(100); |
Stevie | 0:d665d69947ab | 46 | MRB.write(0.0); |
Stevie | 0:d665d69947ab | 47 | MRF.period_us(100); |
Stevie | 0:d665d69947ab | 48 | MRF.write(0.0); |
Stevie | 0:d665d69947ab | 49 | MLB.period_us(100); |
Stevie | 0:d665d69947ab | 50 | MLB.write(0.0); |
Stevie | 0:d665d69947ab | 51 | MLF.period_us(100); |
Stevie | 0:d665d69947ab | 52 | MLF.write(0.0); |
Stevie | 0:d665d69947ab | 53 | |
Stevie | 0:d665d69947ab | 54 | //setup Spi |
Stevie | 0:d665d69947ab | 55 | // rpi.reply(0x00); //set default reply |
Stevie | 0:d665d69947ab | 56 | |
Stevie | 0:d665d69947ab | 57 | while (1) { |
Stevie | 0:d665d69947ab | 58 | |
Stevie | 0:d665d69947ab | 59 | //write motor speed |
Stevie | 0:d665d69947ab | 60 | for (i=0;i<=3;i++){ |
Stevie | 0:d665d69947ab | 61 | m_duty[i] = float(m_speed_ref[i])/100.0; |
Stevie | 0:d665d69947ab | 62 | } |
Stevie | 0:d665d69947ab | 63 | MRB.write(m_duty[0]); |
Stevie | 0:d665d69947ab | 64 | MRF.write(m_duty[1]); |
Stevie | 0:d665d69947ab | 65 | MLB.write(m_duty[2]); |
Stevie | 0:d665d69947ab | 66 | MLF.write(m_duty[3]); |
Stevie | 0:d665d69947ab | 67 | |
Stevie | 1:08315c315df0 | 68 | //read all the ADC values when not doing something else |
Stevie | 1:08315c315df0 | 69 | adc_values[0] = int(ANALOG0.read()*255); |
Stevie | 1:08315c315df0 | 70 | adc_values[1] = int(ANALOG1.read()*255); |
Stevie | 1:08315c315df0 | 71 | adc_values[2] = int(ANALOG2.read()*255); |
Stevie | 1:08315c315df0 | 72 | adc_values[3] = int(ANALOG3.read()*255); |
Stevie | 1:08315c315df0 | 73 | adc_values[4] = int(ANALOG4.read()*255); |
Stevie | 1:08315c315df0 | 74 | adc_values[5] = int(ANALOG5.read()*255); |
Stevie | 1:08315c315df0 | 75 | |
Stevie | 1:08315c315df0 | 76 | |
Stevie | 0:d665d69947ab | 77 | //do SPI communication stuff |
Stevie | 0:d665d69947ab | 78 | if(rpi.receive()) { |
Stevie | 0:d665d69947ab | 79 | v = rpi.read(); // Read byte from master |
Stevie | 0:d665d69947ab | 80 | if(v == char('S')){ |
Stevie | 0:d665d69947ab | 81 | rpi.reply(0x01); |
Stevie | 0:d665d69947ab | 82 | for (i=0;i<=3;i++){ |
Stevie | 0:d665d69947ab | 83 | m_speed_ref[i] = rpi.read() - 128; |
Stevie | 0:d665d69947ab | 84 | rpi.reply(m_speed_ref[i]); |
Stevie | 0:d665d69947ab | 85 | } |
Stevie | 0:d665d69947ab | 86 | v = rpi.read(); //last bit setup a blank reply |
Stevie | 0:d665d69947ab | 87 | rpi.reply(0x00); |
Stevie | 0:d665d69947ab | 88 | } |
Stevie | 0:d665d69947ab | 89 | else if(v == char('D')){ |
Stevie | 0:d665d69947ab | 90 | rpi.reply(0x02); |
Stevie | 0:d665d69947ab | 91 | for (i=0;i<=3;i++){ |
Stevie | 0:d665d69947ab | 92 | m_speed_ref[i] = rpi.read() - 128; |
Stevie | 0:d665d69947ab | 93 | rpi.reply(m_speed_ref[i]); |
Stevie | 0:d665d69947ab | 94 | } |
Stevie | 0:d665d69947ab | 95 | for (i=0;i<=3;i++){ |
Stevie | 0:d665d69947ab | 96 | m_distance_ref[i] = rpi.read() - 128; |
Stevie | 0:d665d69947ab | 97 | rpi.reply(m_distance_ref[i]); |
Stevie | 0:d665d69947ab | 98 | } |
Stevie | 0:d665d69947ab | 99 | v = rpi.read(); //last bit setup a blank reply |
Stevie | 0:d665d69947ab | 100 | rpi.reply(0x00); |
Stevie | 0:d665d69947ab | 101 | } |
Stevie | 0:d665d69947ab | 102 | else if(v == char('A')){ |
Stevie | 0:d665d69947ab | 103 | rpi.reply(0x03); |
Stevie | 0:d665d69947ab | 104 | max_accel = rpi.read(); |
Stevie | 0:d665d69947ab | 105 | rpi.reply(max_accel); |
Stevie | 0:d665d69947ab | 106 | v = rpi.read(); //last bit setup a blank reply |
Stevie | 0:d665d69947ab | 107 | rpi.reply(0x00); |
Stevie | 0:d665d69947ab | 108 | } |
Stevie | 0:d665d69947ab | 109 | else if(v == char('V')){ |
Stevie | 0:d665d69947ab | 110 | rpi.reply(0x04); |
Stevie | 0:d665d69947ab | 111 | v = rpi.read(); |
Stevie | 1:08315c315df0 | 112 | if(v <= 6){ //check the ADC to be addressed exists |
Stevie | 0:d665d69947ab | 113 | rpi.reply(adc_values[v]); |
Stevie | 0:d665d69947ab | 114 | } |
Stevie | 0:d665d69947ab | 115 | v = rpi.read(); //last bit setup a blank reply |
Stevie | 0:d665d69947ab | 116 | rpi.reply(0x00); |
Stevie | 0:d665d69947ab | 117 | } |
Stevie | 0:d665d69947ab | 118 | } |
Stevie | 0:d665d69947ab | 119 | } |
Stevie | 0:d665d69947ab | 120 | } |