Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
ir.cpp@0:7a97ebb833eb, 2019-05-05 (annotated)
- Committer:
- rzalog
- Date:
- Sun May 05 00:02:11 2019 +0000
- Revision:
- 0:7a97ebb833eb
test commit;
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| rzalog | 0:7a97ebb833eb | 1 | #include "ir.h" |
| rzalog | 0:7a97ebb833eb | 2 | #include "pins.h" |
| rzalog | 0:7a97ebb833eb | 3 | #include "globals.h" |
| rzalog | 0:7a97ebb833eb | 4 | |
| rzalog | 0:7a97ebb833eb | 5 | AnalogIn rec_RF(DET_Rfront); |
| rzalog | 0:7a97ebb833eb | 6 | AnalogIn rec_LF(DET_Lfront); |
| rzalog | 0:7a97ebb833eb | 7 | //AnalogIn rec_RS(DET_Rside); |
| rzalog | 0:7a97ebb833eb | 8 | //AnalogIn rec_LS(DET_Lside); |
| rzalog | 0:7a97ebb833eb | 9 | |
| rzalog | 0:7a97ebb833eb | 10 | DigitalOut ir_RF(IR_Rfront); |
| rzalog | 0:7a97ebb833eb | 11 | DigitalOut ir_LF(IR_Lfront); |
| rzalog | 0:7a97ebb833eb | 12 | //DigitalOut ir_RS(IR_Rside); |
| rzalog | 0:7a97ebb833eb | 13 | //DigitalOut ir_LS(IR_Lside); |
| rzalog | 0:7a97ebb833eb | 14 | |
| rzalog | 0:7a97ebb833eb | 15 | |
| rzalog | 0:7a97ebb833eb | 16 | /////// |
| rzalog | 0:7a97ebb833eb | 17 | // IR class implementation |
| rzalog | 0:7a97ebb833eb | 18 | /////// |
| rzalog | 0:7a97ebb833eb | 19 | |
| rzalog | 0:7a97ebb833eb | 20 | IR::IR() { |
| rzalog | 0:7a97ebb833eb | 21 | m_rf = 0; |
| rzalog | 0:7a97ebb833eb | 22 | m_lf = 0; |
| rzalog | 0:7a97ebb833eb | 23 | m_rs = 0; |
| rzalog | 0:7a97ebb833eb | 24 | m_ls = 0; |
| rzalog | 0:7a97ebb833eb | 25 | } |
| rzalog | 0:7a97ebb833eb | 26 | |
| rzalog | 0:7a97ebb833eb | 27 | /*** |
| rzalog | 0:7a97ebb833eb | 28 | * Assignment 4 START |
| rzalog | 0:7a97ebb833eb | 29 | ***/ |
| rzalog | 0:7a97ebb833eb | 30 | |
| rzalog | 0:7a97ebb833eb | 31 | /*** |
| rzalog | 0:7a97ebb833eb | 32 | * Properly turn the IR's on, warm up receiver for WARM_UP_US, |
| rzalog | 0:7a97ebb833eb | 33 | * read the value, cool down receivers for COOL_DOWN_US, |
| rzalog | 0:7a97ebb833eb | 34 | * then turn off. |
| rzalog | 0:7a97ebb833eb | 35 | ***/ |
| rzalog | 0:7a97ebb833eb | 36 | float IR::flash_ir(DigitalOut ir, AnalogIn rec) volatile { |
| rzalog | 0:7a97ebb833eb | 37 | ir = 1; |
| rzalog | 0:7a97ebb833eb | 38 | wait_us(WARM_UP_US); |
| rzalog | 0:7a97ebb833eb | 39 | float ret = read_ir(rec); |
| rzalog | 0:7a97ebb833eb | 40 | ir = 0; |
| rzalog | 0:7a97ebb833eb | 41 | wait_us(COOL_DOWN_US); |
| rzalog | 0:7a97ebb833eb | 42 | |
| rzalog | 0:7a97ebb833eb | 43 | return ret; |
| rzalog | 0:7a97ebb833eb | 44 | } |
| rzalog | 0:7a97ebb833eb | 45 | |
| rzalog | 0:7a97ebb833eb | 46 | float IR::RS_error() volatile { |
| rzalog | 0:7a97ebb833eb | 47 | // TODO |
| rzalog | 0:7a97ebb833eb | 48 | |
| rzalog | 0:7a97ebb833eb | 49 | if (RS() > MIDR) { |
| rzalog | 0:7a97ebb833eb | 50 | //return RS_base() - RS(); |
| rzalog | 0:7a97ebb833eb | 51 | return 0; |
| rzalog | 0:7a97ebb833eb | 52 | } |
| rzalog | 0:7a97ebb833eb | 53 | else return 0; |
| rzalog | 0:7a97ebb833eb | 54 | } |
| rzalog | 0:7a97ebb833eb | 55 | |
| rzalog | 0:7a97ebb833eb | 56 | float IR::LS_error() volatile { |
| rzalog | 0:7a97ebb833eb | 57 | // TODO |
| rzalog | 0:7a97ebb833eb | 58 | |
| rzalog | 0:7a97ebb833eb | 59 | if (LS() > MIDL) { |
| rzalog | 0:7a97ebb833eb | 60 | //return LS() - LS_base(); |
| rzalog | 0:7a97ebb833eb | 61 | return 0; |
| rzalog | 0:7a97ebb833eb | 62 | } |
| rzalog | 0:7a97ebb833eb | 63 | else return 0; |
| rzalog | 0:7a97ebb833eb | 64 | } |
| rzalog | 0:7a97ebb833eb | 65 | |
| rzalog | 0:7a97ebb833eb | 66 | float IR::read_ir(AnalogIn rec) volatile { |
| rzalog | 0:7a97ebb833eb | 67 | // Read an IR, averaging over 10 reads. |
| rzalog | 0:7a97ebb833eb | 68 | int n = 10; |
| rzalog | 0:7a97ebb833eb | 69 | float total = 0; |
| rzalog | 0:7a97ebb833eb | 70 | |
| rzalog | 0:7a97ebb833eb | 71 | for (int i = 0; i < n; i++) { |
| rzalog | 0:7a97ebb833eb | 72 | total += rec.read(); |
| rzalog | 0:7a97ebb833eb | 73 | } |
| rzalog | 0:7a97ebb833eb | 74 | |
| rzalog | 0:7a97ebb833eb | 75 | return total / n; |
| rzalog | 0:7a97ebb833eb | 76 | } |
| rzalog | 0:7a97ebb833eb | 77 | |
| rzalog | 0:7a97ebb833eb | 78 | void IR::update() volatile { |
| rzalog | 0:7a97ebb833eb | 79 | // Update all your IR readings. |
| rzalog | 0:7a97ebb833eb | 80 | |
| rzalog | 0:7a97ebb833eb | 81 | // Don't do any init because for some reason that doesn't work... |
| rzalog | 0:7a97ebb833eb | 82 | m_rf = flash_ir(ir_RF, rec_RF); //- init_rf; |
| rzalog | 0:7a97ebb833eb | 83 | m_lf = flash_ir(ir_LF, rec_LF); //- init_lf; |
| rzalog | 0:7a97ebb833eb | 84 | |
| rzalog | 0:7a97ebb833eb | 85 | //m_rs = flash_ir(ir_RS, rec_RS); //- init_rs; |
| rzalog | 0:7a97ebb833eb | 86 | //m_ls = flash_ir(ir_LS, rec_LS); //- init_ls; |
| rzalog | 0:7a97ebb833eb | 87 | } |
| rzalog | 0:7a97ebb833eb | 88 | |
| rzalog | 0:7a97ebb833eb | 89 | |
| rzalog | 0:7a97ebb833eb | 90 | void IR::printValues() volatile { |
| rzalog | 0:7a97ebb833eb | 91 | // Utility: Use for diagnostics |
| rzalog | 0:7a97ebb833eb | 92 | |
| rzalog | 0:7a97ebb833eb | 93 | pc.printf("RF: %.3f\tLF: %.3f\tRS: %.3f\tLS: %.3f\n", |
| rzalog | 0:7a97ebb833eb | 94 | m_rf, m_lf, m_rs, m_ls); |
| rzalog | 0:7a97ebb833eb | 95 | } |