Stevie Wray / Mbed 2 deprecated SkyFawkes

Dependencies:   mbed

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?

UserRevisionLine numberNew 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 }