Update to work with Grove
Dependencies: DigitDisplay RangeFinder Pulse Grove_temperature FXOS8700Q
main.cpp
- Committer:
- fitzpatrick
- Date:
- 2021-02-10
- Revision:
- 1:dddc62cabd99
- Parent:
- 0:21d86aae6b2a
File content as of revision 1:dddc62cabd99:
#include "mbed.h" #include "Grove_temperature.h" #include "LED_Bar.h" #include "DigitDisplay.h" #include "RangeFinder.h" #include "FXOS8700Q.h" #define V_SERVO_CENTER 1400 #define V_SERVO_MAX 2200 #define V_SERVO_MIN 800 Serial pc(USBTX, USBRX); // Serial Port 115200 I2C i2c( PTE25, PTE24 ); FXOS8700QAccelerometer acc( i2c, FXOS8700CQ_SLAVE_ADDR1 ); // Accelerometer Grove_temperature temp(A3); // Temperature GPIO DigitalOut myled(LED2); //Red LED DigitDisplay display(D7, D8); // Digital Display GPIO AnalogIn xAxis(A0); // Joystick x GPIO AnalogIn yAxis(A1); // Joystick y GPIO // Servo PwmOut v_servo(D3); // D3 output LED_Bar bar(D6, D5); // LED_Bar GPIO int x,y,button; // global variables to hold values // Seeed ultrasound range finder RangeFinder rf(A2, 10, 5800.0, 100000); DigitalOut led(LED1); Ticker joystick; // recurring interrupt to get joystick data Ticker tick; // Digital display clock // Digital Display variables uint8_t hour = 20; uint8_t minute = 14; uint8_t second = 0; // Digital Display Algorythm Function void beat() { static uint8_t colon = 0; display.setColon(colon); if (colon) { second++; if (second >= 60) { second = 0; minute++; if (minute >= 60) { minute = 0; hour++; if (hour >= 24) { hour = 0; } display.write(0, hour / 10); display.write(1, hour % 10); } display.write(2, minute / 10); display.write(3, minute % 10); } } colon = 1 - colon; } // Joystick Algorythm Function void joystick_Int_Handler() { x = xAxis.read() * 1000; // float (0->1) to int (0-1000) y = yAxis.read() * 1000; if ( (x > 900) || (y > 900) ) button = 1; else button = 0; } // main() runs in its own thread in the OS int main() { int i; pc.baud(115200); // Serial Port 115200 led = 1; //Rangefinder float d; //Rangefinder float acc_x, acc_y, acc_z; //Accelerometer // Servo int v_pulse = V_SERVO_CENTER; v_servo.period_us(20000); // servo requires a 20ms period v_servo.pulsewidth_us(v_pulse); // servo position determined by a pulsewidth between 1-2ms wait(1); // Joystick interrupt, call every .2s joystick.attach(joystick_Int_Handler,0.2); display.write(0, hour / 10); display.write(1, hour % 10); display.write(2, minute / 10); display.write(3, minute % 10); display.setColon(true); // Dig Display interrupt, call every .5s tick.attach(&beat, 0.5); // Enable Accelerometer acc.enable(); while (true) { printf("\r\nTemperature Measurement\r\n"); pc.printf("\rtemperature = %2.2f\n", temp.getTemperature()); printf("\r\nJoystick Status, Meters\r\n"); pc.printf("\rX=%3d, Y=%3d, Button=%d\n",x,y,button); //for (i=0; i<=10; i++) { //bar.setLevel(i); //wait(0.1); //} bar.setLevel((x-250)/50); //Servo v_pulse = v_pulse - 20; if (v_pulse <= V_SERVO_MIN) v_pulse = V_SERVO_MIN; if (v_pulse >= V_SERVO_MAX) v_pulse = V_SERVO_MAX; v_servo.pulsewidth_us(v_pulse); // servo position determined by a pulsewidth between 1-2ms //wait(3); printf("\n\rPulse = %d\n\r",v_pulse); //Range sensor d = rf.read_m(); if (d == -1.0) { printf("\rTimeout Error.\n"); } else if (d > 5.0) { // Seeed's sensor has a maximum range of 4m, it returns // something like 7m if the ultrasound pulse isn't reflected. printf("\rNo object within detection range.\n"); } else { printf("\r\nUltra Sonic Rangefinder, Meters\r\n"); printf("\rDistance = %f m.\n", d); } // get Accelerometer values acc.getX( acc_x ); acc.getY( acc_y ); acc.getZ( acc_z ); printf("\r\nAccelerometer Values\r\n"); 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 ); myled = 1; wait(0.5); myled = 0; wait(0.5); led = !led; } }