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.
pulstrein_to_NEC_code.h@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 | /* converteer de pulstrein naar een NEC code van 32-bit |
| VicOnCampusGeel | 0:d6c40db60579 | 3 | |
| VicOnCampusGeel | 0:d6c40db60579 | 4 | element 0 van de array bevat de startsequentie |
| VicOnCampusGeel | 0:d6c40db60579 | 5 | laag - hoog en wordt dus niet vertaald in bits |
| VicOnCampusGeel | 0:d6c40db60579 | 6 | 1 Pulstijd laag + 1 Pulstijd hoog = 0 Bit |
| VicOnCampusGeel | 0:d6c40db60579 | 7 | 1 Pulstijd laag + 3 Pulstijd hoog = 1 Bit |
| VicOnCampusGeel | 0:d6c40db60579 | 8 | |
| VicOnCampusGeel | 0:d6c40db60579 | 9 | als de pulstijd HOOG minstens dubbel zo lang duurt als de pulstijd LAAG |
| VicOnCampusGeel | 0:d6c40db60579 | 10 | wordt er de bit 1 gemaakt voor de code. |
| VicOnCampusGeel | 0:d6c40db60579 | 11 | Alle andere voorwaarden geven een bit 0 voor de decodering, |
| VicOnCampusGeel | 0:d6c40db60579 | 12 | zodat de actief lage pulsen worden omgezet in een actief hoge code. |
| VicOnCampusGeel | 0:d6c40db60579 | 13 | |
| VicOnCampusGeel | 0:d6c40db60579 | 14 | Immers : een 1 in deze code, betekent IR-licht uitzenden op de Transmitter |
| VicOnCampusGeel | 0:d6c40db60579 | 15 | een 0 betekent geen IR-licht uitzenden |
| VicOnCampusGeel | 0:d6c40db60579 | 16 | |
| VicOnCampusGeel | 0:d6c40db60579 | 17 | Terwijl: voor onze ontvanger geldt: |
| VicOnCampusGeel | 0:d6c40db60579 | 18 | een 1 lezen, betekent GEEN licht ontvangen |
| VicOnCampusGeel | 0:d6c40db60579 | 19 | een 0 lezen, betekent IR-licht ontvangen |
| VicOnCampusGeel | 0:d6c40db60579 | 20 | */ |
| VicOnCampusGeel | 0:d6c40db60579 | 21 | //------------------------------------------------------------------------------ |
| VicOnCampusGeel | 0:d6c40db60579 | 22 | unsigned long pulstrein_to_NEC_Code() |
| VicOnCampusGeel | 0:d6c40db60579 | 23 | { |
| VicOnCampusGeel | 0:d6c40db60579 | 24 | // long kan 64 bit integer code aan |
| VicOnCampusGeel | 0:d6c40db60579 | 25 | const int BLen= 32 ; // Bit lengte van deze NEC_CODE |
| VicOnCampusGeel | 0:d6c40db60579 | 26 | unsigned long NEC_Code=0 ;// tot max 64 bit code |
| VicOnCampusGeel | 0:d6c40db60579 | 27 | unsigned long flag=1; |
| VicOnCampusGeel | 0:d6c40db60579 | 28 | char byte[4]= {0,0,0,0}; |
| VicOnCampusGeel | 0:d6c40db60579 | 29 | max_cnt=0; |
| VicOnCampusGeel | 0:d6c40db60579 | 30 | if (eLH_cnt>eHL_cnt) { |
| VicOnCampusGeel | 0:d6c40db60579 | 31 | max_cnt =eLH_cnt; |
| VicOnCampusGeel | 0:d6c40db60579 | 32 | } else { |
| VicOnCampusGeel | 0:d6c40db60579 | 33 | max_cnt =eHL_cnt; |
| VicOnCampusGeel | 0:d6c40db60579 | 34 | } |
| VicOnCampusGeel | 0:d6c40db60579 | 35 | if (max_cnt>BLen) { // enkel code produceren als 32-bit code volledig is |
| VicOnCampusGeel | 0:d6c40db60579 | 36 | // low bit first - high bit last |
| VicOnCampusGeel | 0:d6c40db60579 | 37 | for (int i=1; (i < BLen+1); i++) { // i = 0 is de startpuls |
| VicOnCampusGeel | 0:d6c40db60579 | 38 | // i = 1 is bit 0 --- i = 32 bit 31 |
| VicOnCampusGeel | 0:d6c40db60579 | 39 | if ((dt_Low[i]*2 - dt_High[i] )>0) { |
| VicOnCampusGeel | 0:d6c40db60579 | 40 | // digitale 0, niets bijtellen |
| VicOnCampusGeel | 0:d6c40db60579 | 41 | } else { |
| VicOnCampusGeel | 0:d6c40db60579 | 42 | // digitale 1 : flag die telkens 1 bit wordt geshift naar links bijtellen |
| VicOnCampusGeel | 0:d6c40db60579 | 43 | NEC_Code = NEC_Code +flag; |
| VicOnCampusGeel | 0:d6c40db60579 | 44 | } |
| VicOnCampusGeel | 0:d6c40db60579 | 45 | flag=(flag<<1); // flag is flag * 2 |
| VicOnCampusGeel | 0:d6c40db60579 | 46 | } |
| VicOnCampusGeel | 0:d6c40db60579 | 47 | printf("\r\nGelezen Nec_code : %x\r\n",NEC_Code); |
| VicOnCampusGeel | 0:d6c40db60579 | 48 | printf("\r\n"); |
| VicOnCampusGeel | 0:d6c40db60579 | 49 | |
| VicOnCampusGeel | 0:d6c40db60579 | 50 | // printf ("Druk op een toets om deze pulstrein weg te schrijven naar een file op de mBED \n\r"); |
| VicOnCampusGeel | 0:d6c40db60579 | 51 | // pc.getc(); // wacht op een toets ingedrukt in Terminal. Enkel voor debugging |
| VicOnCampusGeel | 0:d6c40db60579 | 52 | } |
| VicOnCampusGeel | 0:d6c40db60579 | 53 | |
| VicOnCampusGeel | 0:d6c40db60579 | 54 | // test op de geldigheid van de ontvangen code |
| VicOnCampusGeel | 0:d6c40db60579 | 55 | // byte 0 MOET het inverse zijn van byte 1 |
| VicOnCampusGeel | 0:d6c40db60579 | 56 | // en byte 3 MOET het inverse zijn van byte 4 om geldig te zijn |
| VicOnCampusGeel | 0:d6c40db60579 | 57 | byte[0]=((NEC_Code >>0) & 0xff); |
| VicOnCampusGeel | 0:d6c40db60579 | 58 | byte[1]=!((NEC_Code>>8) & 0xff); // invers moet gelijk zijn aan vorige byte |
| VicOnCampusGeel | 0:d6c40db60579 | 59 | byte[2]=((NEC_Code>>16) & 0xff); |
| VicOnCampusGeel | 0:d6c40db60579 | 60 | byte[3]=!((NEC_Code>>24) & 0xff);// invers moet gelijk zijn aan vorige byte |
| VicOnCampusGeel | 0:d6c40db60579 | 61 | |
| VicOnCampusGeel | 0:d6c40db60579 | 62 | if (byte[0]& byte[1]) { |
| VicOnCampusGeel | 0:d6c40db60579 | 63 | printf("\r\nOngeldige fabrikantcode: %x ",NEC_Code); |
| VicOnCampusGeel | 0:d6c40db60579 | 64 | NEC_Code=0; |
| VicOnCampusGeel | 0:d6c40db60579 | 65 | } |
| VicOnCampusGeel | 0:d6c40db60579 | 66 | if (byte[2]& byte[3]) { |
| VicOnCampusGeel | 0:d6c40db60579 | 67 | printf("\r\nOngeldige toetscode: %x ",NEC_Code); |
| VicOnCampusGeel | 0:d6c40db60579 | 68 | NEC_Code=0; |
| VicOnCampusGeel | 0:d6c40db60579 | 69 | |
| VicOnCampusGeel | 0:d6c40db60579 | 70 | |
| VicOnCampusGeel | 0:d6c40db60579 | 71 | } |
| VicOnCampusGeel | 0:d6c40db60579 | 72 | |
| VicOnCampusGeel | 0:d6c40db60579 | 73 | return (NEC_Code); // big endian formaat |
| VicOnCampusGeel | 0:d6c40db60579 | 74 | /* |
| VicOnCampusGeel | 0:d6c40db60579 | 75 | zowel de Sparkfun afstandsbediening als de Optoma projector |
| VicOnCampusGeel | 0:d6c40db60579 | 76 | zijn gecodeerd volgens de NEC_Code pulstreinen |
| VicOnCampusGeel | 0:d6c40db60579 | 77 | */ |
| VicOnCampusGeel | 0:d6c40db60579 | 78 | } |
| VicOnCampusGeel | 0:d6c40db60579 | 79 | |
| VicOnCampusGeel | 0:d6c40db60579 | 80 | //------------------------------------------------------------------------------ |