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.
main.cpp@0:d6c40db60579, 2017-02-09 (annotated)
- Committer:
- VicOnCampusGeel
- Date:
- Thu Feb 09 08:28:08 2017 +0000
- Revision:
- 0:d6c40db60579
start;
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| VicOnCampusGeel | 0:d6c40db60579 | 1 | /*------------------------------------------------------------------------------ |
| VicOnCampusGeel | 0:d6c40db60579 | 2 | Hardware : NUCLEO-F091RC board + IR-RX IR-Tx board + Soundcardscoop |
| VicOnCampusGeel | 0:d6c40db60579 | 3 | STEM project, KU Leuven Campus Geel |
| VicOnCampusGeel | 0:d6c40db60579 | 4 | ------------------------------------------------------------------- |
| VicOnCampusGeel | 0:d6c40db60579 | 5 | Pin PB_3 : D3: IR-Tx Receiver CN9 pin3 --> wordt een TX disable niveau bij 1 |
| VicOnCampusGeel | 0:d6c40db60579 | 6 | --> wordt een TX enable niveau bij 0 |
| VicOnCampusGeel | 0:d6c40db60579 | 7 | |
| VicOnCampusGeel | 0:d6c40db60579 | 8 | Pin PB_4 : D5: IR-Rx Receiver CN9 pin5 --> pin3 van de IR Receiver |
| VicOnCampusGeel | 0:d6c40db60579 | 9 | Pin PC_7 : D9: PWM aansturing voor 38kHz op basis van de transistor BC547B |
| VicOnCampusGeel | 0:d6c40db60579 | 10 | de emittor van de transistor wordt naar massa aangesloten |
| VicOnCampusGeel | 0:d6c40db60579 | 11 | Collector is verbonden met 3,3V, IR-LED + serieweerstand van 18 Ohm |
| VicOnCampusGeel | 0:d6c40db60579 | 12 | zodat de stroom door de IR LED voldoende groot (>50mA )kan zijn |
| VicOnCampusGeel | 0:d6c40db60579 | 13 | om een grote afstand te kunnen overbruggen ( >5m) |
| VicOnCampusGeel | 0:d6c40db60579 | 14 | ---------------------------------------- |
| VicOnCampusGeel | 0:d6c40db60579 | 15 | ---- Programmacode update 7-2-2017 ----- |
| VicOnCampusGeel | 0:d6c40db60579 | 16 | ---------------------------------------- |
| VicOnCampusGeel | 0:d6c40db60579 | 17 | Volledig functioneel. |
| VicOnCampusGeel | 0:d6c40db60579 | 18 | Via een terminal programma,( bv. TerraTerm, Putty,Hyperterminal,.....) |
| VicOnCampusGeel | 0:d6c40db60579 | 19 | zijn alle stappen die het programma doorloopt te volgen |
| VicOnCampusGeel | 0:d6c40db60579 | 20 | Via de 'line in' van de soundcard, en het software programma |
| VicOnCampusGeel | 0:d6c40db60579 | 21 | Cooledit ( geluid bewerkingsprogramma) of via Soundcard_Scope |
| VicOnCampusGeel | 0:d6c40db60579 | 22 | zijn de ontvangen IR codes te analyseren op de PC. |
| VicOnCampusGeel | 0:d6c40db60579 | 23 | |
| VicOnCampusGeel | 0:d6c40db60579 | 24 | 1. Na reset zendt de IR-Tx LED de default GHost_Code uit |
| VicOnCampusGeel | 0:d6c40db60579 | 25 | 2. Lees via IR_Rx een NEC IR ontvangen code in en decodeer naar de fabrikantcode |
| VicOnCampusGeel | 0:d6c40db60579 | 26 | 3. Stuur de overeenkomstige GHost_Code uit via IR_Tx met de user_Button |
| VicOnCampusGeel | 0:d6c40db60579 | 27 | 4. stuur de laatst gestuurde code nogmaals via de user_button |
| VicOnCampusGeel | 0:d6c40db60579 | 28 | 5. test op correcte NEC_Codes om fouten van reflecties weg te filteren |
| VicOnCampusGeel | 0:d6c40db60579 | 29 | */ |
| VicOnCampusGeel | 0:d6c40db60579 | 30 | //------------------------------------------------------------------------------ |
| VicOnCampusGeel | 0:d6c40db60579 | 31 | #ifndef TARGET_NUCLEO |
| VicOnCampusGeel | 0:d6c40db60579 | 32 | #define TARGET_NUCLEO |
| VicOnCampusGeel | 0:d6c40db60579 | 33 | #endif |
| VicOnCampusGeel | 0:d6c40db60579 | 34 | |
| VicOnCampusGeel | 0:d6c40db60579 | 35 | #include "mbed.h" |
| VicOnCampusGeel | 0:d6c40db60579 | 36 | Timer program_timer; // timing van de activiteit van het hoofdprogramma |
| VicOnCampusGeel | 0:d6c40db60579 | 37 | |
| VicOnCampusGeel | 0:d6c40db60579 | 38 | |
| VicOnCampusGeel | 0:d6c40db60579 | 39 | #ifdef TARGET_NUCLEO |
| VicOnCampusGeel | 0:d6c40db60579 | 40 | // Pinbenamingen zijn enkel geldig voor het NUCLEO-F091RC bordje |
| VicOnCampusGeel | 0:d6c40db60579 | 41 | // Voor andere bordjes, moet je de pinbenamingen aanpassen aan |
| VicOnCampusGeel | 0:d6c40db60579 | 42 | // de functionalitijd van de beschikbare pinnen. |
| VicOnCampusGeel | 0:d6c40db60579 | 43 | |
| VicOnCampusGeel | 0:d6c40db60579 | 44 | PwmOut IRLED(D9); // IRLED freq. 38KHz via PWM CN9 Pin D9 (startpinnr at pin D0) |
| VicOnCampusGeel | 0:d6c40db60579 | 45 | DigitalOut IR_disable(D3); // =0 om de emitter op massa te leggen met beperkt zendvermogen |
| VicOnCampusGeel | 0:d6c40db60579 | 46 | //= 1 verhinder zenden |
| VicOnCampusGeel | 0:d6c40db60579 | 47 | DigitalIn PTin( D5 ); // Pulstrein_input: lees het niveau van de pulstrein=IR Receiver CN9 pin D5 |
| VicOnCampusGeel | 0:d6c40db60579 | 48 | DigitalIn UserBlauw(USER_BUTTON); // PC_13 blauwe drukknop op het bordje |
| VicOnCampusGeel | 0:d6c40db60579 | 49 | |
| VicOnCampusGeel | 0:d6c40db60579 | 50 | DigitalOut led1( D8 ); // Rode Led |
| VicOnCampusGeel | 0:d6c40db60579 | 51 | DigitalOut led2( D7 ); // Oranje LED |
| VicOnCampusGeel | 0:d6c40db60579 | 52 | DigitalOut led3( D6 ); // Groene LED |
| VicOnCampusGeel | 0:d6c40db60579 | 53 | DigitalOut led4( D13); // PA_5 : LED op het BORDJE |
| VicOnCampusGeel | 0:d6c40db60579 | 54 | #endif |
| VicOnCampusGeel | 0:d6c40db60579 | 55 | |
| VicOnCampusGeel | 0:d6c40db60579 | 56 | //---------- Typecast alle variabelen ------------------------------------------ |
| VicOnCampusGeel | 0:d6c40db60579 | 57 | |
| VicOnCampusGeel | 0:d6c40db60579 | 58 | int dt_High[100]; // max 100 te registreren pulsen laag niveau |
| VicOnCampusGeel | 0:d6c40db60579 | 59 | int dt_Low[100]; // max 100 te registreren pulsen hoog niveau |
| VicOnCampusGeel | 0:d6c40db60579 | 60 | int eHL_cnt=-1, eLH_cnt=-1,min_idle=1; |
| VicOnCampusGeel | 0:d6c40db60579 | 61 | int max_cnt=0; |
| VicOnCampusGeel | 0:d6c40db60579 | 62 | char Toets[30]="Geen toets"; |
| VicOnCampusGeel | 0:d6c40db60579 | 63 | |
| VicOnCampusGeel | 0:d6c40db60579 | 64 | bool PInow=0; // Huidig ingangsniveau van de detector |
| VicOnCampusGeel | 0:d6c40db60579 | 65 | bool PI=0; // Vorig ingangsniveau van de detector |
| VicOnCampusGeel | 0:d6c40db60579 | 66 | bool IsHoog=0, IsLaag=0,Timed_Out=0; |
| VicOnCampusGeel | 0:d6c40db60579 | 67 | bool debug=0; // debuging flag, voor extra info naar terminal |
| VicOnCampusGeel | 0:d6c40db60579 | 68 | |
| VicOnCampusGeel | 0:d6c40db60579 | 69 | // -----------NEC Pulscode Timing voor TX -------------------------------------- |
| VicOnCampusGeel | 0:d6c40db60579 | 70 | #include "TX_IR_NEC.h" |
| VicOnCampusGeel | 0:d6c40db60579 | 71 | |
| VicOnCampusGeel | 0:d6c40db60579 | 72 | //------------------------------------------------------------------------------ |
| VicOnCampusGeel | 0:d6c40db60579 | 73 | // Analyseer de ontvangen pulstrein |
| VicOnCampusGeel | 0:d6c40db60579 | 74 | // Hieruit kun je informatie halen om andere pulscodetreinen te decoderen. |
| VicOnCampusGeel | 0:d6c40db60579 | 75 | // Hiervoor moet je dan de converteer routine pulstrein_to_NECcode.h |
| VicOnCampusGeel | 0:d6c40db60579 | 76 | // herschrijven. |
| VicOnCampusGeel | 0:d6c40db60579 | 77 | #include "analyseer_pulstrein.h" |
| VicOnCampusGeel | 0:d6c40db60579 | 78 | |
| VicOnCampusGeel | 0:d6c40db60579 | 79 | //------------------------------------------------------------------------------ |
| VicOnCampusGeel | 0:d6c40db60579 | 80 | // Flankdetectie en pulsduurregistratie in de arrays |
| VicOnCampusGeel | 0:d6c40db60579 | 81 | // Hierna volgt de analyse van de pulstrein |
| VicOnCampusGeel | 0:d6c40db60579 | 82 | #include "FlankDetectie.h" |
| VicOnCampusGeel | 0:d6c40db60579 | 83 | #include "RX_Pulstrein.h" |
| VicOnCampusGeel | 0:d6c40db60579 | 84 | |
| VicOnCampusGeel | 0:d6c40db60579 | 85 | //------------------------------------------------------------------------------ |
| VicOnCampusGeel | 0:d6c40db60579 | 86 | // converteer de pulstrein naar een NEC code |
| VicOnCampusGeel | 0:d6c40db60579 | 87 | // vervang deze code eventueel door uw eigen decodeerprogramma |
| VicOnCampusGeel | 0:d6c40db60579 | 88 | #include "pulstrein_to_NEC_code.h" |
| VicOnCampusGeel | 0:d6c40db60579 | 89 | |
| VicOnCampusGeel | 0:d6c40db60579 | 90 | //------------------------------------------------------------------------------ |
| VicOnCampusGeel | 0:d6c40db60579 | 91 | // Reset alle variabelen van het programma |
| VicOnCampusGeel | 0:d6c40db60579 | 92 | void reset_vars() |
| VicOnCampusGeel | 0:d6c40db60579 | 93 | { |
| VicOnCampusGeel | 0:d6c40db60579 | 94 | eLH_cnt=-1; // telt het aantalsen hoog |
| VicOnCampusGeel | 0:d6c40db60579 | 95 | eHL_cnt=-1; // telt het aantalsen laag |
| VicOnCampusGeel | 0:d6c40db60579 | 96 | dt_Low[0]=0; // duurtijd van de puls laag = stijgende flank getetecteer |
| VicOnCampusGeel | 0:d6c40db60579 | 97 | dt_High[0]=0; // duurtijd van de puls hoog = dalende flank getetecteer |
| VicOnCampusGeel | 0:d6c40db60579 | 98 | |
| VicOnCampusGeel | 0:d6c40db60579 | 99 | led1 = 0; // reset toestand |
| VicOnCampusGeel | 0:d6c40db60579 | 100 | led2 = PTin; // Blijft hoog als er GEEN IR wordt ontvangen |
| VicOnCampusGeel | 0:d6c40db60579 | 101 | led3 = 0; //andere LEDs gedoofd |
| VicOnCampusGeel | 0:d6c40db60579 | 102 | led4 = 0; // Groene LEDje LD2 op het NUCLEO bordje |
| VicOnCampusGeel | 0:d6c40db60579 | 103 | IsHoog =PInow; // actief hoge variabele |
| VicOnCampusGeel | 0:d6c40db60579 | 104 | IsLaag =!PInow; // actief hoge variabele |
| VicOnCampusGeel | 0:d6c40db60579 | 105 | } |
| VicOnCampusGeel | 0:d6c40db60579 | 106 | //------------------------------------------------------------------------------ |
| VicOnCampusGeel | 0:d6c40db60579 | 107 | // Vertaal de ontvangen NEC_codes in een GhostCode indien |
| VicOnCampusGeel | 0:d6c40db60579 | 108 | // aanwezig in de vertaaltabel. |
| VicOnCampusGeel | 0:d6c40db60579 | 109 | // Anders stuur de code ongewijzigd door. |
| VicOnCampusGeel | 0:d6c40db60579 | 110 | #include "Ghost_Codes.h" |
| VicOnCampusGeel | 0:d6c40db60579 | 111 | |
| VicOnCampusGeel | 0:d6c40db60579 | 112 | int main() |
| VicOnCampusGeel | 0:d6c40db60579 | 113 | { |
| VicOnCampusGeel | 0:d6c40db60579 | 114 | unsigned long Ghost_Code=0x7788CD32; // Optima projector menu Code |
| VicOnCampusGeel | 0:d6c40db60579 | 115 | unsigned long NEC_Code=Ghost_Code; // NEC_Code = default na reset |
| VicOnCampusGeel | 0:d6c40db60579 | 116 | unsigned long New_Code=Ghost_Code; // NEC_Code = default na reset |
| VicOnCampusGeel | 0:d6c40db60579 | 117 | int pr_cnt=0; // sec program counter |
| VicOnCampusGeel | 0:d6c40db60579 | 118 | int flag=0; |
| VicOnCampusGeel | 0:d6c40db60579 | 119 | program_timer.start(); // start timer |
| VicOnCampusGeel | 0:d6c40db60579 | 120 | program_timer.reset(); // zet timer =0 |
| VicOnCampusGeel | 0:d6c40db60579 | 121 | PInow = PTin; // lees het niveau vd RX pin pulstrein in rust |
| VicOnCampusGeel | 0:d6c40db60579 | 122 | //--- Print Hello bericht naar terminal ---------------------------------------- |
| VicOnCampusGeel | 0:d6c40db60579 | 123 | #include"hello_msg.h" |
| VicOnCampusGeel | 0:d6c40db60579 | 124 | |
| VicOnCampusGeel | 0:d6c40db60579 | 125 | //------------------------------------------------------------------------------ |
| VicOnCampusGeel | 0:d6c40db60579 | 126 | |
| VicOnCampusGeel | 0:d6c40db60579 | 127 | while(1) { // hoofdloop stopt nooit |
| VicOnCampusGeel | 0:d6c40db60579 | 128 | flag=program_timer.read_ms(); |
| VicOnCampusGeel | 0:d6c40db60579 | 129 | if ( flag > pr_cnt*1000 ) { |
| VicOnCampusGeel | 0:d6c40db60579 | 130 | reset_vars(); // Reset alle variabelen elke seconde |
| VicOnCampusGeel | 0:d6c40db60579 | 131 | Timed_Out=0; |
| VicOnCampusGeel | 0:d6c40db60579 | 132 | pr_cnt++; |
| VicOnCampusGeel | 0:d6c40db60579 | 133 | if (pr_cnt==1) { // stuur na 1 seconde de default ghost code uit |
| VicOnCampusGeel | 0:d6c40db60579 | 134 | // na een reset. |
| VicOnCampusGeel | 0:d6c40db60579 | 135 | stuur_Code(Ghost_Code); |
| VicOnCampusGeel | 0:d6c40db60579 | 136 | printf("\n\rDefault Ghost code send : %x\n\r\n\r",Ghost_Code); |
| VicOnCampusGeel | 0:d6c40db60579 | 137 | } |
| VicOnCampusGeel | 0:d6c40db60579 | 138 | printf ("%d sec : Klaar om een nieuwe code te ontvangen:\r",pr_cnt); |
| VicOnCampusGeel | 0:d6c40db60579 | 139 | printf ("%d \r",pr_cnt); |
| VicOnCampusGeel | 0:d6c40db60579 | 140 | } |
| VicOnCampusGeel | 0:d6c40db60579 | 141 | |
| VicOnCampusGeel | 0:d6c40db60579 | 142 | if (!UserBlauw) { // userknop wordt ingedrukt |
| VicOnCampusGeel | 0:d6c40db60579 | 143 | while(!UserBlauw) {} // wacht tot de toets wordt losgelaten |
| VicOnCampusGeel | 0:d6c40db60579 | 144 | led3 =1; // Groene LED aan |
| VicOnCampusGeel | 0:d6c40db60579 | 145 | // verstuur de laatste ontvangen code nogeens uit. |
| VicOnCampusGeel | 0:d6c40db60579 | 146 | // of de default menucode voor de dataprojector na reset |
| VicOnCampusGeel | 0:d6c40db60579 | 147 | // Ghostcode voorlopig enkel geldig voor de dataprojector Optima |
| VicOnCampusGeel | 0:d6c40db60579 | 148 | // andere vertalingen moet je nog programmeren. |
| VicOnCampusGeel | 0:d6c40db60579 | 149 | |
| VicOnCampusGeel | 0:d6c40db60579 | 150 | Ghost_Code= Get_Ghost_Code(NEC_Code); |
| VicOnCampusGeel | 0:d6c40db60579 | 151 | printf("\r\nNEC code : %x vertaalt voor toets %s\r\n",NEC_Code,Toets); |
| VicOnCampusGeel | 0:d6c40db60579 | 152 | stuur_Code(Ghost_Code); |
| VicOnCampusGeel | 0:d6c40db60579 | 153 | printf("Ghost code send : %x\n\r\n\r",Ghost_Code); |
| VicOnCampusGeel | 0:d6c40db60579 | 154 | wait(0.5); |
| VicOnCampusGeel | 0:d6c40db60579 | 155 | reset_vars(); // Reset alle variabelen elke seconde |
| VicOnCampusGeel | 0:d6c40db60579 | 156 | |
| VicOnCampusGeel | 0:d6c40db60579 | 157 | } |
| VicOnCampusGeel | 0:d6c40db60579 | 158 | if (!PTin) { // IR ontvanger is hoog doe niets, wacht op dalende flank |
| VicOnCampusGeel | 0:d6c40db60579 | 159 | // Dalende flank gedetecteerd, start dan de pulstreindetectie. |
| VicOnCampusGeel | 0:d6c40db60579 | 160 | reset_vars(); // Reset alle variabelen elke seconde |
| VicOnCampusGeel | 0:d6c40db60579 | 161 | Timed_Out=0; |
| VicOnCampusGeel | 0:d6c40db60579 | 162 | led3 =1; // Groen LED aan |
| VicOnCampusGeel | 0:d6c40db60579 | 163 | RX_pulstrein(); |
| VicOnCampusGeel | 0:d6c40db60579 | 164 | New_Code=pulstrein_to_NEC_Code(); // decodeer de pulstrein en genereer NEC_Code |
| VicOnCampusGeel | 0:d6c40db60579 | 165 | if(New_Code!=0) { |
| VicOnCampusGeel | 0:d6c40db60579 | 166 | if (NEC_Code != New_Code) { // codes ontvangen door reflecties wegfilteren |
| VicOnCampusGeel | 0:d6c40db60579 | 167 | NEC_Code=New_Code; // nieuwe codes mogen door user_button verzonden worden |
| VicOnCampusGeel | 0:d6c40db60579 | 168 | wait(0.1); |
| VicOnCampusGeel | 0:d6c40db60579 | 169 | Ghost_Code= Get_Ghost_Code(NEC_Code); // zoek bijhorende toetsnaam en GhostCode |
| VicOnCampusGeel | 0:d6c40db60579 | 170 | stuur_Code(Ghost_Code); // stuur de ontvangen NEC_code terug uit. |
| VicOnCampusGeel | 0:d6c40db60579 | 171 | // Stuur de ghostcode nog niet uit |
| VicOnCampusGeel | 0:d6c40db60579 | 172 | // Druk de blauwe user knop om de ghostcode uit te sturen |
| VicOnCampusGeel | 0:d6c40db60579 | 173 | printf("Ghost code : %x vertaald voor toets %s\r\n\r\n",Ghost_Code,Toets); |
| VicOnCampusGeel | 0:d6c40db60579 | 174 | } |
| VicOnCampusGeel | 0:d6c40db60579 | 175 | } |
| VicOnCampusGeel | 0:d6c40db60579 | 176 | } else { |
| VicOnCampusGeel | 0:d6c40db60579 | 177 | // geen IR ontvangen, programma blijft zichtbaar actief via de LEDs |
| VicOnCampusGeel | 0:d6c40db60579 | 178 | flag=program_timer.read(); // lees seconden teller |
| VicOnCampusGeel | 0:d6c40db60579 | 179 | led1 = (flag & 1); // flash LED1 in wacht mode elke 2 seconden |
| VicOnCampusGeel | 0:d6c40db60579 | 180 | led2 =PTin; // Led2 brandt in rust |
| VicOnCampusGeel | 0:d6c40db60579 | 181 | led3 =!PTin; // Led3 gedooft in rust |
| VicOnCampusGeel | 0:d6c40db60579 | 182 | led4 =(flag &2); // flash LED4 in wacht mode elke 4 seconden |
| VicOnCampusGeel | 0:d6c40db60579 | 183 | } |
| VicOnCampusGeel | 0:d6c40db60579 | 184 | } |
| VicOnCampusGeel | 0:d6c40db60579 | 185 | } |