Code used in the SICE E210/P442 lab practical

Dependencies:   ADXL362 TSL2561 mbed

Committer:
bhimebau
Date:
Wed Apr 25 21:46:22 2018 +0000
Revision:
1:f5c993193adc
Parent:
0:69b431195dc4
Finished code;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bhimebau 0:69b431195dc4 1 // Code used for the SP18 E210/P442 Lab Practical
bhimebau 0:69b431195dc4 2 #include "mbed.h"
bhimebau 0:69b431195dc4 3 #include "ADXL362.h"
bhimebau 0:69b431195dc4 4 #include "TSL2561.h"
bhimebau 0:69b431195dc4 5
bhimebau 0:69b431195dc4 6 AnalogOut my_output(PA_4);
bhimebau 0:69b431195dc4 7
bhimebau 0:69b431195dc4 8 // Interface pulled from ADXL362.cpp
bhimebau 0:69b431195dc4 9 // ADXL362::ADXL362(PinName CS, PinName MOSI, PinName MISO, PinName SCK) :
bhimebau 0:69b431195dc4 10 ADXL362 adxl362(PA_0,PA_7,PA_6,PA_1);
bhimebau 0:69b431195dc4 11 TSL2561 lightsensor(PB_7,PB_6);
bhimebau 0:69b431195dc4 12
bhimebau 0:69b431195dc4 13
bhimebau 0:69b431195dc4 14 #define PI (3.141592653589793238462)
bhimebau 0:69b431195dc4 15 #define AMPLITUDE (1.0) // x * 3.3V
bhimebau 0:69b431195dc4 16 #define PHASE (PI * 1) // 2*pi is one period
bhimebau 0:69b431195dc4 17 #define RANGE (0x7FFF)
bhimebau 0:69b431195dc4 18 #define OFFSET (0x7FFF)
bhimebau 0:69b431195dc4 19
bhimebau 1:f5c993193adc 20 #define SPI_CYCLES 100
bhimebau 0:69b431195dc4 21 // Configuration for sinewave output
bhimebau 0:69b431195dc4 22 #define BUFFER_SIZE (360)
bhimebau 0:69b431195dc4 23 uint16_t buffer[BUFFER_SIZE];
bhimebau 0:69b431195dc4 24
bhimebau 0:69b431195dc4 25 void calculate_sinewave(void);
bhimebau 0:69b431195dc4 26
bhimebau 0:69b431195dc4 27 int main() {
bhimebau 0:69b431195dc4 28 printf("Sinewave example\n");
bhimebau 0:69b431195dc4 29 calculate_sinewave();
bhimebau 0:69b431195dc4 30 adxl362.reset();
bhimebau 1:f5c993193adc 31 wait_ms(1000); // we need to wait at least 500ms after ADXL362 reset
bhimebau 0:69b431195dc4 32 adxl362.set_mode(ADXL362::MEASUREMENT);
bhimebau 1:f5c993193adc 33 wait_ms(1000); // we need to wait at least 500ms after ADXL362 reset
bhimebau 1:f5c993193adc 34 volatile int8_t x,y,z;
bhimebau 1:f5c993193adc 35 volatile uint16_t whoami;
bhimebau 0:69b431195dc4 36 volatile float light;
bhimebau 1:f5c993193adc 37 int spi_trigger_target = 0;
bhimebau 1:f5c993193adc 38
bhimebau 0:69b431195dc4 39 while(1) {
bhimebau 0:69b431195dc4 40 for (int i = 0; i < BUFFER_SIZE; i++) {
bhimebau 0:69b431195dc4 41 my_output.write_u16(buffer[i]);
bhimebau 0:69b431195dc4 42 wait_us(10);
bhimebau 0:69b431195dc4 43 }
bhimebau 0:69b431195dc4 44 x=adxl362.scanx_u8();
bhimebau 0:69b431195dc4 45 y=adxl362.scany_u8();
bhimebau 0:69b431195dc4 46 z=adxl362.scanz_u8();
bhimebau 1:f5c993193adc 47 if (spi_trigger_target++ == SPI_CYCLES){
bhimebau 1:f5c993193adc 48 spi_trigger_target = 0;
bhimebau 1:f5c993193adc 49 whoami = adxl362.read_reg(ADXL362::DEVID_AD);
bhimebau 1:f5c993193adc 50 }
bhimebau 1:f5c993193adc 51 light = lightsensor.lux();
bhimebau 1:f5c993193adc 52 // printf("Accelerometer x = %d y = %d z = %d\r\n",x,y,z);
bhimebau 0:69b431195dc4 53 // printf("Light sensor %f\n\r",lightsensor.lux());
bhimebau 0:69b431195dc4 54 // wait_ms(100);
bhimebau 1:f5c993193adc 55
bhimebau 0:69b431195dc4 56 }
bhimebau 0:69b431195dc4 57 }
bhimebau 0:69b431195dc4 58
bhimebau 0:69b431195dc4 59 // Create the sinewave buffer
bhimebau 0:69b431195dc4 60 void calculate_sinewave(void){
bhimebau 0:69b431195dc4 61 for (int i = 0; i < BUFFER_SIZE; i++) {
bhimebau 0:69b431195dc4 62 double rads = (PI * i)/180.0; // Convert degree in radian
bhimebau 0:69b431195dc4 63 buffer[i] = (uint16_t)(AMPLITUDE * (RANGE * (cos(rads + PHASE))) + OFFSET);
bhimebau 0:69b431195dc4 64 }
bhimebau 0:69b431195dc4 65 }