Demo fro training
Dependencies: X_NUCLEO_IKS01A1 d7a_1x mbed-rtos mbed wizzi-utils
simul.cpp@0:429446fe396d, 2016-11-21 (annotated)
- Committer:
- mikl_andre
- Date:
- Mon Nov 21 07:24:34 2016 +0000
- Revision:
- 0:429446fe396d
Initial Revision
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mikl_andre | 0:429446fe396d | 1 | #include "mbed.h" |
mikl_andre | 0:429446fe396d | 2 | #include "simul.h" |
mikl_andre | 0:429446fe396d | 3 | #include "dbg.h" |
mikl_andre | 0:429446fe396d | 4 | |
mikl_andre | 0:429446fe396d | 5 | |
mikl_andre | 0:429446fe396d | 6 | unsigned int m_z=12434,m_w=33254; |
mikl_andre | 0:429446fe396d | 7 | |
mikl_andre | 0:429446fe396d | 8 | unsigned int rnd() { |
mikl_andre | 0:429446fe396d | 9 | m_z = 36969 * (m_z & 65535) + (m_z >>16); |
mikl_andre | 0:429446fe396d | 10 | m_w = 18000 * (m_w & 65535) + (m_w >>16); |
mikl_andre | 0:429446fe396d | 11 | return ((m_z <<16) + m_w); |
mikl_andre | 0:429446fe396d | 12 | } |
mikl_andre | 0:429446fe396d | 13 | |
mikl_andre | 0:429446fe396d | 14 | uint32_t g_simul_divider = 500; |
mikl_andre | 0:429446fe396d | 15 | |
mikl_andre | 0:429446fe396d | 16 | void update_simul_param(uint32_t value) |
mikl_andre | 0:429446fe396d | 17 | { |
mikl_andre | 0:429446fe396d | 18 | g_simul_divider = value; |
mikl_andre | 0:429446fe396d | 19 | } |
mikl_andre | 0:429446fe396d | 20 | |
mikl_andre | 0:429446fe396d | 21 | bool simul_sensor_value(int32_t* buf, uint32_t nb_values, int32_t min, int32_t max) |
mikl_andre | 0:429446fe396d | 22 | { |
mikl_andre | 0:429446fe396d | 23 | for (uint8_t i = 0; i < nb_values; i++) |
mikl_andre | 0:429446fe396d | 24 | { |
mikl_andre | 0:429446fe396d | 25 | int32_t new_value; |
mikl_andre | 0:429446fe396d | 26 | |
mikl_andre | 0:429446fe396d | 27 | uint32_t r = rnd()%g_simul_divider; |
mikl_andre | 0:429446fe396d | 28 | |
mikl_andre | 0:429446fe396d | 29 | if (r) |
mikl_andre | 0:429446fe396d | 30 | { |
mikl_andre | 0:429446fe396d | 31 | if (r%2) |
mikl_andre | 0:429446fe396d | 32 | { |
mikl_andre | 0:429446fe396d | 33 | new_value = buf[i] + 1; |
mikl_andre | 0:429446fe396d | 34 | } |
mikl_andre | 0:429446fe396d | 35 | else |
mikl_andre | 0:429446fe396d | 36 | { |
mikl_andre | 0:429446fe396d | 37 | new_value = buf[i] - 1; |
mikl_andre | 0:429446fe396d | 38 | } |
mikl_andre | 0:429446fe396d | 39 | |
mikl_andre | 0:429446fe396d | 40 | if (new_value > max) |
mikl_andre | 0:429446fe396d | 41 | { |
mikl_andre | 0:429446fe396d | 42 | new_value = max; |
mikl_andre | 0:429446fe396d | 43 | } |
mikl_andre | 0:429446fe396d | 44 | |
mikl_andre | 0:429446fe396d | 45 | if (new_value < min) |
mikl_andre | 0:429446fe396d | 46 | { |
mikl_andre | 0:429446fe396d | 47 | new_value = min; |
mikl_andre | 0:429446fe396d | 48 | } |
mikl_andre | 0:429446fe396d | 49 | } |
mikl_andre | 0:429446fe396d | 50 | else |
mikl_andre | 0:429446fe396d | 51 | { |
mikl_andre | 0:429446fe396d | 52 | new_value = (rnd()%(max - min)) + min; |
mikl_andre | 0:429446fe396d | 53 | } |
mikl_andre | 0:429446fe396d | 54 | |
mikl_andre | 0:429446fe396d | 55 | buf[i] = new_value; |
mikl_andre | 0:429446fe396d | 56 | } |
mikl_andre | 0:429446fe396d | 57 | |
mikl_andre | 0:429446fe396d | 58 | return false; |
mikl_andre | 0:429446fe396d | 59 | } |
mikl_andre | 0:429446fe396d | 60 |