Projet S5 Info / Mbed 2 deprecated Projet_S5

Dependencies:   mbed PowerControl

Fork of Projet_S5 by Jonathan Tousignant

Committer:
joGenie
Date:
Tue Apr 08 13:46:22 2014 +0000
Revision:
11:9c0786fc06b4
Parent:
7:89be89aeed5a
Child:
12:16390cea4420
new version;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
joGenie 0:d80295a0bcc2 1 #include "accelerometer.h"
joGenie 3:17a4ceb30535 2 #include "analyzer.h"
joGenie 0:d80295a0bcc2 3 #include "interrupt.h"
joGenie 0:d80295a0bcc2 4
joGenie 0:d80295a0bcc2 5 Serial pc(USBTX, USBRX);
joGenie 1:feae56685ab1 6 DigitalOut led1(LED1);
joGenie 4:f72c51a2108c 7 DigitalOut led2(LED2);
joGenie 4:f72c51a2108c 8 DigitalOut led4(LED4);
joGenie 4:f72c51a2108c 9 DigitalIn button(p30);
joGenie 1:feae56685ab1 10
joGenie 0:d80295a0bcc2 11 void *accelerometer = Accelerometer_C_new();
joGenie 4:f72c51a2108c 12 void *analyzer = Analyzer_C_new();
joGenie 4:f72c51a2108c 13 bool rebound = true;
joGenie 4:f72c51a2108c 14 bool appuyer = false;
joGenie 0:d80295a0bcc2 15
joGenie 1:feae56685ab1 16 extern "C" void interruptCapture(void)
joGenie 0:d80295a0bcc2 17 {
joGenie 4:f72c51a2108c 18 if(rebound && !appuyer)
joGenie 1:feae56685ab1 19 {
joGenie 4:f72c51a2108c 20 LPC_TIM2->TC = 0; // clear timer counter
joGenie 4:f72c51a2108c 21 LPC_TIM2->PC = 0; // clear prescale counter
joGenie 4:f72c51a2108c 22 LPC_TIM2->PR = 0; // clear prescale register
joGenie 4:f72c51a2108c 23 LPC_TIM2->MCR |= 0x03; // interrupt and reset control
joGenie 4:f72c51a2108c 24 LPC_TIM2->CCR = 0; //no capture interupt
joGenie 4:f72c51a2108c 25 rebound = false;
joGenie 4:f72c51a2108c 26 }
joGenie 4:f72c51a2108c 27 else if(!rebound && !appuyer)
joGenie 0:d80295a0bcc2 28 {
joGenie 4:f72c51a2108c 29 led1 = 1;
joGenie 4:f72c51a2108c 30 LPC_TIM2->MCR = 0;
joGenie 4:f72c51a2108c 31 LPC_TIM2->CCR = (0x06 << 0); //falling edge
joGenie 4:f72c51a2108c 32
joGenie 4:f72c51a2108c 33 LPC_TIM3->TC = 0; // clear timer counter
joGenie 4:f72c51a2108c 34 LPC_TIM3->PC = 0; // clear prescale counter
joGenie 4:f72c51a2108c 35 LPC_TIM3->PR = 0; // clear prescale register
joGenie 4:f72c51a2108c 36 LPC_TIM3->IR |= 0xFF;
joGenie 4:f72c51a2108c 37 LPC_TIM3->TCR = 0x01; //enable timer 3
joGenie 4:f72c51a2108c 38
joGenie 4:f72c51a2108c 39 appuyer = true;
joGenie 4:f72c51a2108c 40 NVIC_EnableIRQ(TIMER3_IRQn); // Enable timer3 interrupt
joGenie 7:89be89aeed5a 41
joGenie 7:89be89aeed5a 42 signed char* values = Accelerometer_C_getAccelValue(accelerometer);
joGenie 7:89be89aeed5a 43
joGenie 7:89be89aeed5a 44 // Analyze data
joGenie 7:89be89aeed5a 45 Analyzer_C_setInitial(values, analyzer);
joGenie 0:d80295a0bcc2 46 }
joGenie 4:f72c51a2108c 47 else
joGenie 4:f72c51a2108c 48 {
joGenie 4:f72c51a2108c 49 led1 = 0;
joGenie 7:89be89aeed5a 50 LPC_TIM2->CCR = (5 << 0); //rising edge
joGenie 4:f72c51a2108c 51
joGenie 4:f72c51a2108c 52 LPC_TIM3->TC = 0; // clear timer counter
joGenie 4:f72c51a2108c 53 LPC_TIM3->PC = 0; // clear prescale counter
joGenie 4:f72c51a2108c 54 LPC_TIM3->PR = 0; // clear prescale register
joGenie 4:f72c51a2108c 55 LPC_TIM3->IR |= 0xFF;
joGenie 4:f72c51a2108c 56 LPC_TIM3->TCR = 0; //disable timer 3
joGenie 4:f72c51a2108c 57
joGenie 4:f72c51a2108c 58 appuyer = false;
joGenie 4:f72c51a2108c 59 rebound = true;
joGenie 4:f72c51a2108c 60 NVIC_DisableIRQ(TIMER3_IRQn); // Disable timer3 interrupt
joGenie 7:89be89aeed5a 61
joGenie 7:89be89aeed5a 62 Analyzer_C_checkMouvement(analyzer);
joGenie 4:f72c51a2108c 63 }
joGenie 4:f72c51a2108c 64
joGenie 1:feae56685ab1 65
joGenie 1:feae56685ab1 66 LPC_TIM2->IR |= 0xFF;
joGenie 0:d80295a0bcc2 67 }
joGenie 0:d80295a0bcc2 68
joGenie 1:feae56685ab1 69 extern "C" void interruptMatch(void)
joGenie 0:d80295a0bcc2 70 {
joGenie 4:f72c51a2108c 71 if(button)
joGenie 4:f72c51a2108c 72 {
joGenie 4:f72c51a2108c 73 led4 = !led4;
joGenie 6:ef8bfca9e69b 74 signed char* values;
joGenie 0:d80295a0bcc2 75
joGenie 4:f72c51a2108c 76 values = Accelerometer_C_getAccelValue(accelerometer);
joGenie 0:d80295a0bcc2 77
joGenie 6:ef8bfca9e69b 78 pc.printf("\n\r x: %i, y: %i, z: %i; ", values[0],values[1],values[2]);
joGenie 4:f72c51a2108c 79
joGenie 4:f72c51a2108c 80 // Analyze data
joGenie 4:f72c51a2108c 81 Analyzer_C_setMinMax(values, analyzer);
joGenie 2:d7784cc39c81 82
joGenie 4:f72c51a2108c 83 delete values;
joGenie 4:f72c51a2108c 84 }
joGenie 4:f72c51a2108c 85
joGenie 4:f72c51a2108c 86 LPC_TIM3->IR |= 0xFF; // Reset timer
joGenie 0:d80295a0bcc2 87 }
joGenie 0:d80295a0bcc2 88
joGenie 0:d80295a0bcc2 89 void initialize()
joGenie 0:d80295a0bcc2 90 {
joGenie 11:9c0786fc06b4 91 //Initialize the analyzer
joGenie 11:9c0786fc06b4 92 Analyzer_C_Initialize(analyzer);
joGenie 4:f72c51a2108c 93
joGenie 4:f72c51a2108c 94 // CAPTURE
joGenie 4:f72c51a2108c 95 // Enable the pins on the device to use TIMER CAP2.0 on pin 30
joGenie 5:6313ddd0dfdd 96 LPC_PINCON->PINSEL0 |= 3 << 8; //set pin 30 capture 2.0
joGenie 5:6313ddd0dfdd 97 LPC_SC->PCONP |= (1 << 22); // Timer2 power on
joGenie 0:d80295a0bcc2 98
joGenie 5:6313ddd0dfdd 99 //LPC_TIM2->MCR |= 3; //interrupt and reset control
joGenie 4:f72c51a2108c 100 LPC_TIM2->TC = 0; // clear timer counter
joGenie 4:f72c51a2108c 101 LPC_TIM2->PC = 0; // clear prescale counter
joGenie 4:f72c51a2108c 102 LPC_TIM2->PR = 0; // clear prescale register
joGenie 4:f72c51a2108c 103 LPC_TIM2->MR0 = SystemCoreClock / 100; //match pour rebound
joGenie 4:f72c51a2108c 104
joGenie 5:6313ddd0dfdd 105 LPC_TIM2->IR |= 0xFF; // Clear CR0 interrupt flag
joGenie 5:6313ddd0dfdd 106 LPC_TIM2->CCR = (5 << 0); // enable cap2.0 rising-edge capture; interrupt on cap2.0 p.496
joGenie 5:6313ddd0dfdd 107 LPC_TIM2->TCR = (1 << 1); // reset timer
joGenie 5:6313ddd0dfdd 108 LPC_TIM2->TCR = 1; // enable timer
joGenie 0:d80295a0bcc2 109
joGenie 5:6313ddd0dfdd 110 NVIC_EnableIRQ(TIMER2_IRQn); // Enable timer2 interrupt
joGenie 4:f72c51a2108c 111 NVIC_SetVector(TIMER2_IRQn, uint32_t(interruptCapture));
joGenie 0:d80295a0bcc2 112
joGenie 4:f72c51a2108c 113 // TIMER 3
joGenie 5:6313ddd0dfdd 114 LPC_SC->PCONP |= 1 << 23; // Timer3 power on
joGenie 4:f72c51a2108c 115
joGenie 11:9c0786fc06b4 116 LPC_TIM3->MCR = 3; // Interrupt and reset control
joGenie 5:6313ddd0dfdd 117 LPC_TIM3->TC = 0; // clear timer counter
joGenie 5:6313ddd0dfdd 118 LPC_TIM3->PC = 0; // clear prescale counter
joGenie 5:6313ddd0dfdd 119 LPC_TIM3->PR = 0; // clear prescale register
joGenie 5:6313ddd0dfdd 120 LPC_TIM3->MR0 = SystemCoreClock / 20;
joGenie 4:f72c51a2108c 121
joGenie 5:6313ddd0dfdd 122 LPC_TIM3->IR |= 0xFF; // Clear MR0 interrupt flag
joGenie 5:6313ddd0dfdd 123 LPC_TIM3->TCR = (1 << 1); // Reset Timer3
joGenie 5:6313ddd0dfdd 124 LPC_TIM3->TCR = 0; // Disable timer
joGenie 0:d80295a0bcc2 125
joGenie 5:6313ddd0dfdd 126 //NVIC_EnableIRQ(TIMER3_IRQn); // Enable timer3 interrupt
joGenie 1:feae56685ab1 127 NVIC_SetVector(TIMER3_IRQn, uint32_t(interruptMatch));
joGenie 0:d80295a0bcc2 128 }
joGenie 0:d80295a0bcc2 129
joGenie 0:d80295a0bcc2 130 int main()
joGenie 0:d80295a0bcc2 131 {
joGenie 1:feae56685ab1 132 initialize();
joGenie 1:feae56685ab1 133
joGenie 11:9c0786fc06b4 134 pc.printf("\n\rReady");
joGenie 11:9c0786fc06b4 135
joGenie 1:feae56685ab1 136 while(true)
joGenie 1:feae56685ab1 137 {
joGenie 0:d80295a0bcc2 138 }
joGenie 0:d80295a0bcc2 139 }