Vic Van Roie / Mbed 2 deprecated STEM_Nucleo_start

Dependencies:   mbed

Committer:
VicOnCampusGeel
Date:
Thu Feb 09 08:28:08 2017 +0000
Revision:
0:d6c40db60579
start;

Who changed what in which revision?

UserRevisionLine numberNew 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 }