Update to work with Grove

Dependencies:   DigitDisplay RangeFinder Pulse Grove_temperature FXOS8700Q

Committer:
fitzpatrick
Date:
Wed Feb 10 22:58:39 2021 +0000
Revision:
1:dddc62cabd99
Parent:
0:21d86aae6b2a
Update to work with Grove

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MACRUM 0:21d86aae6b2a 1 #include "mbed.h"
MACRUM 0:21d86aae6b2a 2 #include "Grove_temperature.h"
fitzpatrick 1:dddc62cabd99 3 #include "LED_Bar.h"
fitzpatrick 1:dddc62cabd99 4 #include "DigitDisplay.h"
fitzpatrick 1:dddc62cabd99 5 #include "RangeFinder.h"
fitzpatrick 1:dddc62cabd99 6 #include "FXOS8700Q.h"
MACRUM 0:21d86aae6b2a 7
fitzpatrick 1:dddc62cabd99 8 #define V_SERVO_CENTER 1400
fitzpatrick 1:dddc62cabd99 9 #define V_SERVO_MAX 2200
fitzpatrick 1:dddc62cabd99 10 #define V_SERVO_MIN 800
fitzpatrick 1:dddc62cabd99 11
fitzpatrick 1:dddc62cabd99 12 Serial pc(USBTX, USBRX); // Serial Port 115200
fitzpatrick 1:dddc62cabd99 13
fitzpatrick 1:dddc62cabd99 14 I2C i2c( PTE25, PTE24 );
fitzpatrick 1:dddc62cabd99 15 FXOS8700QAccelerometer acc( i2c, FXOS8700CQ_SLAVE_ADDR1 ); // Accelerometer
fitzpatrick 1:dddc62cabd99 16
fitzpatrick 1:dddc62cabd99 17 Grove_temperature temp(A3); // Temperature GPIO
fitzpatrick 1:dddc62cabd99 18 DigitalOut myled(LED2); //Red LED
fitzpatrick 1:dddc62cabd99 19 DigitDisplay display(D7, D8); // Digital Display GPIO
fitzpatrick 1:dddc62cabd99 20
fitzpatrick 1:dddc62cabd99 21 AnalogIn xAxis(A0); // Joystick x GPIO
fitzpatrick 1:dddc62cabd99 22 AnalogIn yAxis(A1); // Joystick y GPIO
fitzpatrick 1:dddc62cabd99 23
fitzpatrick 1:dddc62cabd99 24 // Servo
fitzpatrick 1:dddc62cabd99 25 PwmOut v_servo(D3); // D3 output
fitzpatrick 1:dddc62cabd99 26
fitzpatrick 1:dddc62cabd99 27 LED_Bar bar(D6, D5); // LED_Bar GPIO
fitzpatrick 1:dddc62cabd99 28
fitzpatrick 1:dddc62cabd99 29 int x,y,button; // global variables to hold values
fitzpatrick 1:dddc62cabd99 30
fitzpatrick 1:dddc62cabd99 31 // Seeed ultrasound range finder
fitzpatrick 1:dddc62cabd99 32 RangeFinder rf(A2, 10, 5800.0, 100000);
fitzpatrick 1:dddc62cabd99 33 DigitalOut led(LED1);
fitzpatrick 1:dddc62cabd99 34
fitzpatrick 1:dddc62cabd99 35
fitzpatrick 1:dddc62cabd99 36 Ticker joystick; // recurring interrupt to get joystick data
fitzpatrick 1:dddc62cabd99 37 Ticker tick; // Digital display clock
fitzpatrick 1:dddc62cabd99 38
fitzpatrick 1:dddc62cabd99 39 // Digital Display variables
fitzpatrick 1:dddc62cabd99 40 uint8_t hour = 20;
fitzpatrick 1:dddc62cabd99 41 uint8_t minute = 14;
fitzpatrick 1:dddc62cabd99 42 uint8_t second = 0;
fitzpatrick 1:dddc62cabd99 43
fitzpatrick 1:dddc62cabd99 44 // Digital Display Algorythm Function
fitzpatrick 1:dddc62cabd99 45 void beat()
fitzpatrick 1:dddc62cabd99 46 {
fitzpatrick 1:dddc62cabd99 47 static uint8_t colon = 0;
fitzpatrick 1:dddc62cabd99 48
fitzpatrick 1:dddc62cabd99 49 display.setColon(colon);
fitzpatrick 1:dddc62cabd99 50 if (colon) {
fitzpatrick 1:dddc62cabd99 51 second++;
fitzpatrick 1:dddc62cabd99 52 if (second >= 60) {
fitzpatrick 1:dddc62cabd99 53 second = 0;
fitzpatrick 1:dddc62cabd99 54 minute++;
fitzpatrick 1:dddc62cabd99 55 if (minute >= 60) {
fitzpatrick 1:dddc62cabd99 56 minute = 0;
fitzpatrick 1:dddc62cabd99 57
fitzpatrick 1:dddc62cabd99 58 hour++;
fitzpatrick 1:dddc62cabd99 59 if (hour >= 24) {
fitzpatrick 1:dddc62cabd99 60 hour = 0;
fitzpatrick 1:dddc62cabd99 61 }
fitzpatrick 1:dddc62cabd99 62 display.write(0, hour / 10);
fitzpatrick 1:dddc62cabd99 63 display.write(1, hour % 10);
fitzpatrick 1:dddc62cabd99 64 }
fitzpatrick 1:dddc62cabd99 65 display.write(2, minute / 10);
fitzpatrick 1:dddc62cabd99 66 display.write(3, minute % 10);
fitzpatrick 1:dddc62cabd99 67 }
fitzpatrick 1:dddc62cabd99 68 }
fitzpatrick 1:dddc62cabd99 69 colon = 1 - colon;
fitzpatrick 1:dddc62cabd99 70 }
fitzpatrick 1:dddc62cabd99 71
fitzpatrick 1:dddc62cabd99 72 // Joystick Algorythm Function
fitzpatrick 1:dddc62cabd99 73 void joystick_Int_Handler()
fitzpatrick 1:dddc62cabd99 74 {
fitzpatrick 1:dddc62cabd99 75 x = xAxis.read() * 1000; // float (0->1) to int (0-1000)
fitzpatrick 1:dddc62cabd99 76 y = yAxis.read() * 1000;
fitzpatrick 1:dddc62cabd99 77 if ( (x > 900) || (y > 900) )
fitzpatrick 1:dddc62cabd99 78 button = 1;
fitzpatrick 1:dddc62cabd99 79 else
fitzpatrick 1:dddc62cabd99 80 button = 0;
fitzpatrick 1:dddc62cabd99 81 }
MACRUM 0:21d86aae6b2a 82
MACRUM 0:21d86aae6b2a 83 // main() runs in its own thread in the OS
MACRUM 0:21d86aae6b2a 84 int main() {
fitzpatrick 1:dddc62cabd99 85 int i;
fitzpatrick 1:dddc62cabd99 86 pc.baud(115200); // Serial Port 115200
fitzpatrick 1:dddc62cabd99 87
fitzpatrick 1:dddc62cabd99 88 led = 1; //Rangefinder
fitzpatrick 1:dddc62cabd99 89 float d; //Rangefinder
fitzpatrick 1:dddc62cabd99 90
fitzpatrick 1:dddc62cabd99 91 float acc_x, acc_y, acc_z; //Accelerometer
fitzpatrick 1:dddc62cabd99 92
fitzpatrick 1:dddc62cabd99 93 // Servo
fitzpatrick 1:dddc62cabd99 94 int v_pulse = V_SERVO_CENTER;
fitzpatrick 1:dddc62cabd99 95 v_servo.period_us(20000); // servo requires a 20ms period
fitzpatrick 1:dddc62cabd99 96 v_servo.pulsewidth_us(v_pulse); // servo position determined by a pulsewidth between 1-2ms
fitzpatrick 1:dddc62cabd99 97 wait(1);
fitzpatrick 1:dddc62cabd99 98
fitzpatrick 1:dddc62cabd99 99 // Joystick interrupt, call every .2s
fitzpatrick 1:dddc62cabd99 100 joystick.attach(joystick_Int_Handler,0.2);
fitzpatrick 1:dddc62cabd99 101 display.write(0, hour / 10);
fitzpatrick 1:dddc62cabd99 102 display.write(1, hour % 10);
fitzpatrick 1:dddc62cabd99 103 display.write(2, minute / 10);
fitzpatrick 1:dddc62cabd99 104 display.write(3, minute % 10);
fitzpatrick 1:dddc62cabd99 105 display.setColon(true);
fitzpatrick 1:dddc62cabd99 106
fitzpatrick 1:dddc62cabd99 107 // Dig Display interrupt, call every .5s
fitzpatrick 1:dddc62cabd99 108 tick.attach(&beat, 0.5);
fitzpatrick 1:dddc62cabd99 109
fitzpatrick 1:dddc62cabd99 110 // Enable Accelerometer
fitzpatrick 1:dddc62cabd99 111 acc.enable();
fitzpatrick 1:dddc62cabd99 112
MACRUM 0:21d86aae6b2a 113 while (true) {
fitzpatrick 1:dddc62cabd99 114 printf("\r\nTemperature Measurement\r\n");
fitzpatrick 1:dddc62cabd99 115 pc.printf("\rtemperature = %2.2f\n", temp.getTemperature());
fitzpatrick 1:dddc62cabd99 116
fitzpatrick 1:dddc62cabd99 117 printf("\r\nJoystick Status, Meters\r\n");
fitzpatrick 1:dddc62cabd99 118 pc.printf("\rX=%3d, Y=%3d, Button=%d\n",x,y,button);
fitzpatrick 1:dddc62cabd99 119
fitzpatrick 1:dddc62cabd99 120 //for (i=0; i<=10; i++) {
fitzpatrick 1:dddc62cabd99 121 //bar.setLevel(i);
fitzpatrick 1:dddc62cabd99 122 //wait(0.1);
fitzpatrick 1:dddc62cabd99 123 //}
fitzpatrick 1:dddc62cabd99 124 bar.setLevel((x-250)/50);
fitzpatrick 1:dddc62cabd99 125
fitzpatrick 1:dddc62cabd99 126
fitzpatrick 1:dddc62cabd99 127 //Servo
fitzpatrick 1:dddc62cabd99 128 v_pulse = v_pulse - 20;
fitzpatrick 1:dddc62cabd99 129 if (v_pulse <= V_SERVO_MIN) v_pulse = V_SERVO_MIN;
fitzpatrick 1:dddc62cabd99 130 if (v_pulse >= V_SERVO_MAX) v_pulse = V_SERVO_MAX;
fitzpatrick 1:dddc62cabd99 131 v_servo.pulsewidth_us(v_pulse); // servo position determined by a pulsewidth between 1-2ms
fitzpatrick 1:dddc62cabd99 132 //wait(3);
fitzpatrick 1:dddc62cabd99 133 printf("\n\rPulse = %d\n\r",v_pulse);
fitzpatrick 1:dddc62cabd99 134
fitzpatrick 1:dddc62cabd99 135
fitzpatrick 1:dddc62cabd99 136 //Range sensor
fitzpatrick 1:dddc62cabd99 137 d = rf.read_m();
fitzpatrick 1:dddc62cabd99 138 if (d == -1.0) {
fitzpatrick 1:dddc62cabd99 139 printf("\rTimeout Error.\n");
fitzpatrick 1:dddc62cabd99 140 } else if (d > 5.0) {
fitzpatrick 1:dddc62cabd99 141 // Seeed's sensor has a maximum range of 4m, it returns
fitzpatrick 1:dddc62cabd99 142 // something like 7m if the ultrasound pulse isn't reflected.
fitzpatrick 1:dddc62cabd99 143 printf("\rNo object within detection range.\n");
fitzpatrick 1:dddc62cabd99 144 } else {
fitzpatrick 1:dddc62cabd99 145 printf("\r\nUltra Sonic Rangefinder, Meters\r\n");
fitzpatrick 1:dddc62cabd99 146 printf("\rDistance = %f m.\n", d);
fitzpatrick 1:dddc62cabd99 147 }
fitzpatrick 1:dddc62cabd99 148
fitzpatrick 1:dddc62cabd99 149 // get Accelerometer values
fitzpatrick 1:dddc62cabd99 150 acc.getX( acc_x );
fitzpatrick 1:dddc62cabd99 151 acc.getY( acc_y );
fitzpatrick 1:dddc62cabd99 152 acc.getZ( acc_z );
fitzpatrick 1:dddc62cabd99 153
fitzpatrick 1:dddc62cabd99 154 printf("\r\nAccelerometer Values\r\n");
fitzpatrick 1:dddc62cabd99 155 printf("X:%6.1f, Y:%6.1f, Z:%6.1f\r\n\r\n", acc_x * 90.0, acc_y * 90.0, acc_z * 90.0 );
fitzpatrick 1:dddc62cabd99 156
fitzpatrick 1:dddc62cabd99 157 myled = 1;
fitzpatrick 1:dddc62cabd99 158 wait(0.5);
fitzpatrick 1:dddc62cabd99 159 myled = 0;
fitzpatrick 1:dddc62cabd99 160 wait(0.5);
fitzpatrick 1:dddc62cabd99 161
fitzpatrick 1:dddc62cabd99 162 led = !led;
MACRUM 0:21d86aae6b2a 163 }
MACRUM 0:21d86aae6b2a 164 }
MACRUM 0:21d86aae6b2a 165
fitzpatrick 1:dddc62cabd99 166