df

Dependencies:   mbed

Fork of APP1 by Team APP

Committer:
dupm2216
Date:
Wed Jan 18 02:38:05 2017 +0000
Revision:
21:a111be2582be
Parent:
18:a21199781d20
Add code header

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dupm2216 21:a111be2582be 1 /////////////////////////////////////////////////////////////
dupm2216 21:a111be2582be 2 // APP 1: Systèmes à microprocesseurs //
dupm2216 21:a111be2582be 3 // //
dupm2216 21:a111be2582be 4 // Université de Sherbrooke //
dupm2216 21:a111be2582be 5 // Génie informatique //
dupm2216 21:a111be2582be 6 // Session 5, Hiver 2017 //
dupm2216 21:a111be2582be 7 // //
dupm2216 21:a111be2582be 8 // Date: 17 janvier 2017 //
dupm2216 21:a111be2582be 9 // //
dupm2216 21:a111be2582be 10 // Auteurs: Maxime Dupuis, dupm2216 //
dupm2216 21:a111be2582be 11 // Bruno Allaire-Lemay, allb2701 //
dupm2216 21:a111be2582be 12 /////////////////////////////////////////////////////////////
dupm2216 21:a111be2582be 13
dupm2216 6:3facf0329142 14 #include "Utility.hpp"
dupm2216 15:b38d9d210e32 15 #include "mbed.h"
dupm2216 18:a21199781d20 16 #include <stdlib.h>
dupm2216 18:a21199781d20 17 #include <list>
dupm2216 6:3facf0329142 18 #include <cmath>
dupm2216 6:3facf0329142 19
dupm2216 6:3facf0329142 20 namespace utility
dupm2216 6:3facf0329142 21 {
dupm2216 6:3facf0329142 22 bool is_almost_equal(double a, double b, double tolerance)
dupm2216 6:3facf0329142 23 {
dupm2216 6:3facf0329142 24 double difference = std::abs(a-b);
dupm2216 6:3facf0329142 25 return (difference <= tolerance);
dupm2216 6:3facf0329142 26 }
dupm2216 6:3facf0329142 27
dupm2216 6:3facf0329142 28 //Return angle between 0 and 360 degree
dupm2216 6:3facf0329142 29 double wrap_angle(double angle)
dupm2216 6:3facf0329142 30 {
dupm2216 6:3facf0329142 31 return angle - 360 * std::floor( angle / 360 );
dupm2216 6:3facf0329142 32 }
dupm2216 6:3facf0329142 33
dupm2216 6:3facf0329142 34 double degree_from_radian(const double angle_radian)
dupm2216 6:3facf0329142 35 {
dupm2216 6:3facf0329142 36 const double angle_degree = angle_radian * 180.0 / PI;
dupm2216 6:3facf0329142 37 return wrap_angle(angle_degree);
dupm2216 6:3facf0329142 38 }
GaiSensei 12:1c341b119b23 39
GaiSensei 13:bb9669053eb3 40 unsigned int update_bit(const unsigned int previous_4_bytes, const int position, const bool new_bit_value)
GaiSensei 13:bb9669053eb3 41 {
dupm2216 15:b38d9d210e32 42 return update_bits(previous_4_bytes, position, position, 0xFFFFFFFF, new_bit_value);
GaiSensei 13:bb9669053eb3 43 }
GaiSensei 13:bb9669053eb3 44
dupm2216 15:b38d9d210e32 45 unsigned int update_bits(const unsigned int previous_4_bytes, const int start_bit, const int stop_bit, const unsigned int reserved_bits_mask, const unsigned int new_bits)
GaiSensei 12:1c341b119b23 46 {
dupm2216 15:b38d9d210e32 47 const unsigned int all_ones_but_n_zeros_right_shifted = (0xFFFFFFFF << (stop_bit - start_bit + 1));
dupm2216 15:b38d9d210e32 48 const unsigned int all_zeros_but_n_ones_right_shifted = ~all_ones_but_n_zeros_right_shifted;
dupm2216 15:b38d9d210e32 49
dupm2216 15:b38d9d210e32 50 const unsigned int all_zeros_but_ones_at_position = all_zeros_but_n_ones_right_shifted << start_bit;
dupm2216 15:b38d9d210e32 51 const unsigned int all_ones_but_zeros_at_position = ~all_zeros_but_ones_at_position;
dupm2216 15:b38d9d210e32 52
dupm2216 15:b38d9d210e32 53 const unsigned int all_zeros_but_new_bits_at_position = new_bits << start_bit;
dupm2216 15:b38d9d210e32 54 const unsigned int all_unchanged_but_zeros_at_position = previous_4_bytes & all_ones_but_zeros_at_position;
dupm2216 15:b38d9d210e32 55 const unsigned int all_unchanged_but_new_bit_value_at_position = all_unchanged_but_zeros_at_position | all_zeros_but_new_bits_at_position;
dupm2216 15:b38d9d210e32 56
dupm2216 15:b38d9d210e32 57 const unsigned int updated_bits_with_reserved_bits_at_zero = all_unchanged_but_new_bit_value_at_position & reserved_bits_mask;
GaiSensei 13:bb9669053eb3 58
dupm2216 15:b38d9d210e32 59 return updated_bits_with_reserved_bits_at_zero;
dupm2216 15:b38d9d210e32 60 }
dupm2216 15:b38d9d210e32 61
dupm2216 15:b38d9d210e32 62 void blink()
dupm2216 15:b38d9d210e32 63 {
dupm2216 15:b38d9d210e32 64 DigitalOut led(LED1);
dupm2216 15:b38d9d210e32 65 while(1)
dupm2216 15:b38d9d210e32 66 {
dupm2216 15:b38d9d210e32 67 led = 1;
dupm2216 15:b38d9d210e32 68 wait(0.2);
dupm2216 15:b38d9d210e32 69 led = 0;
dupm2216 15:b38d9d210e32 70 wait(0.2);
dupm2216 15:b38d9d210e32 71 }
GaiSensei 12:1c341b119b23 72 }
dupm2216 18:a21199781d20 73
dupm2216 18:a21199781d20 74 MovingAverageFilter::MovingAverageFilter(const int subSize):
dupm2216 18:a21199781d20 75 subsetSize(subSize)
dupm2216 18:a21199781d20 76 {
dupm2216 18:a21199781d20 77 for(int i=0; i<subSize; i++)
dupm2216 18:a21199781d20 78 {
dupm2216 18:a21199781d20 79 subset.push_front(0);
dupm2216 18:a21199781d20 80 }
dupm2216 18:a21199781d20 81 }
dupm2216 18:a21199781d20 82
dupm2216 18:a21199781d20 83 int MovingAverageFilter::calculate(int newValue)
dupm2216 18:a21199781d20 84 {
dupm2216 18:a21199781d20 85 subset.push_front(newValue);
dupm2216 18:a21199781d20 86 subset.pop_back();
dupm2216 18:a21199781d20 87 int result = 0;
dupm2216 18:a21199781d20 88
dupm2216 18:a21199781d20 89 for (std::list<int>::iterator it=subset.begin(); it != subset.end(); ++it)
dupm2216 18:a21199781d20 90 {
dupm2216 18:a21199781d20 91 result += *it;
dupm2216 18:a21199781d20 92 }
dupm2216 18:a21199781d20 93 result = result / subsetSize;
dupm2216 18:a21199781d20 94
dupm2216 18:a21199781d20 95 return result;
dupm2216 18:a21199781d20 96 }
dupm2216 9:12519f9dd3cd 97 }