![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
df
Fork of APP1 by
Utility.cpp@21:a111be2582be, 2017-01-18 (annotated)
- 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?
User | Revision | Line number | New 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 | } |