Se envían mensajes aleatorios a un televisor panasonic

Dependencies:   TextLCD mbed

Committer:
NicolasV
Date:
Thu May 18 22:56:32 2017 +0000
Revision:
0:15536ec3bf58
Child:
1:ed8910f358bc
Control Loco

Who changed what in which revision?

UserRevisionLine numberNew contents of line
NicolasV 0:15536ec3bf58 1 /** Control Loco.
NicolasV 0:15536ec3bf58 2
NicolasV 0:15536ec3bf58 3 Por: Laura Ávila
NicolasV 0:15536ec3bf58 4 Daniela López
NicolasV 0:15536ec3bf58 5 Nicolás Villegas
NicolasV 0:15536ec3bf58 6
NicolasV 0:15536ec3bf58 7 Este programa interfiere de forma loca la operación de un televisor.
NicolasV 0:15536ec3bf58 8 Emite códigos de t.v. con el fin de fastidiar al televidente.
NicolasV 0:15536ec3bf58 9
NicolasV 0:15536ec3bf58 10 El control utilizado es de marca Panasonic. Se encontró que los códigos IRDA para
NicolasV 0:15536ec3bf58 11 esta referencia tienen una longitud de 48 bits. Se modificó el programa "Capturas IRDA"
NicolasV 0:15536ec3bf58 12 para ajustarse a esta característica y con base en eso se obtuvieron los códigos.
NicolasV 0:15536ec3bf58 13
NicolasV 0:15536ec3bf58 14 La emisión es aleatoria para
NicolasV 0:15536ec3bf58 15 1 Mute
NicolasV 0:15536ec3bf58 16 2 On/Off
NicolasV 0:15536ec3bf58 17 3 Vol+
NicolasV 0:15536ec3bf58 18 4 Vol-
NicolasV 0:15536ec3bf58 19 5 Ch+
NicolasV 0:15536ec3bf58 20 6 Ch-
NicolasV 0:15536ec3bf58 21 */
NicolasV 0:15536ec3bf58 22
NicolasV 0:15536ec3bf58 23 #include "mbed.h"
NicolasV 0:15536ec3bf58 24 #include <Timer.h>
NicolasV 0:15536ec3bf58 25 #include <math.h>
NicolasV 0:15536ec3bf58 26 #include "TextLCD.h"
NicolasV 0:15536ec3bf58 27
NicolasV 0:15536ec3bf58 28 Timer timer;
NicolasV 0:15536ec3bf58 29 DigitalOut led(PTE31); // Al transistor del led infrarrojo pin.
NicolasV 0:15536ec3bf58 30 DigitalOut indic(LED2);
NicolasV 0:15536ec3bf58 31 TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5); // rs, e, d4-d7
NicolasV 0:15536ec3bf58 32
NicolasV 0:15536ec3bf58 33 double escala_tiempo = 1.0;
NicolasV 0:15536ec3bf58 34 int code[50];
NicolasV 0:15536ec3bf58 35 int aleatorio(int a, int b);
NicolasV 0:15536ec3bf58 36 void enviar_uno(int duracion);
NicolasV 0:15536ec3bf58 37 void enviar_codigo(int n_bits, int *code);
NicolasV 0:15536ec3bf58 38
NicolasV 0:15536ec3bf58 39 const int n_bits = 48;
NicolasV 0:15536ec3bf58 40 const int header_L = 3440;
NicolasV 0:15536ec3bf58 41 const int header_H = 1737;
NicolasV 0:15536ec3bf58 42
NicolasV 0:15536ec3bf58 43 const unsigned ch_up[] = {449,1346,477,477,476,476,476,477,477,476,476,476,476,1346,476,477,477,478,476,475,476,476,477,1347,475,475,475,476,477,475,476,475,476,476,1346,476,1348,1320,476,475,475,476,1345,476,1347,1320,476,1346};
NicolasV 0:15536ec3bf58 44 const unsigned ch_down[] = {452,1323,451,452,452,453,452,454,452,451,453,451,453,1323,454,451,452,452,453,452,451,452,452,1322,451,451,453,452,453,452,454,451,1300,451,1322,453,1322,1322,451,451,1322,452,1322,451,1297,1298,450,1323};
NicolasV 0:15536ec3bf58 45 const unsigned mute[] = {457,1326,456,457,456,456,456,456,457,458,481,457,458,1326,481,455,456,456,457,457,456,456,457,1326,458,455,456,456,458,456,480,454,458,1327,456,456,1327,1327,455,458,457,1327,481,457,1328,1326,455,1328};
NicolasV 0:15536ec3bf58 46 const unsigned power[] = {476,1347,476,477,475,477,475,476,476,476,475,450,476,1347,476,475,476,476,476,478,477,477,475,1346,477,476,477,476,476,476,477,476,1346,477,1346,1347,1346,1347,475,477,1347,476,1324,1347,1346,1325,456,1327};
NicolasV 0:15536ec3bf58 47 const unsigned vol_up[] = {452,1322,452,452,452,453,452,451,451,452,452,452,452,1322,452,453,451,452,452,452,452,452,453,1322,451,454,453,453,453,452,452,452,452,453,453,452,453,1323,452,452,454,453,453,454,453,1323,453,1323};
NicolasV 0:15536ec3bf58 48 const unsigned vol_down[] = {453,1298,454,452,454,453,454,453,453,453,453,454,453,1324,454,453,454,454,452,454,453,454,454,1323,452,453,452,452,453,453,453,453,1322,454,452,453,452,1322,451,452,1323,454,452,453,452,1324,452,1323};
NicolasV 0:15536ec3bf58 49 char* msg;
NicolasV 0:15536ec3bf58 50
NicolasV 0:15536ec3bf58 51 int main() {
NicolasV 0:15536ec3bf58 52
NicolasV 0:15536ec3bf58 53 timer.start();
NicolasV 0:15536ec3bf58 54 lcd.cls();
NicolasV 0:15536ec3bf58 55
NicolasV 0:15536ec3bf58 56 while (true) {
NicolasV 0:15536ec3bf58 57
NicolasV 0:15536ec3bf58 58 int numero = aleatorio(0, 57) % 6;
NicolasV 0:15536ec3bf58 59
NicolasV 0:15536ec3bf58 60 switch (numero) {
NicolasV 0:15536ec3bf58 61 case 0:
NicolasV 0:15536ec3bf58 62 for (int i = 0; i < n_bits; i++) {
NicolasV 0:15536ec3bf58 63 code[i] = ch_up[i];
NicolasV 0:15536ec3bf58 64 msg = "ch_up";
NicolasV 0:15536ec3bf58 65 }
NicolasV 0:15536ec3bf58 66 break;
NicolasV 0:15536ec3bf58 67 case 1:
NicolasV 0:15536ec3bf58 68 for (int i = 0; i < n_bits; i++) {
NicolasV 0:15536ec3bf58 69 code[i] = ch_down[i];
NicolasV 0:15536ec3bf58 70 msg = "ch_down";
NicolasV 0:15536ec3bf58 71 }
NicolasV 0:15536ec3bf58 72 break;
NicolasV 0:15536ec3bf58 73 case 2:
NicolasV 0:15536ec3bf58 74 for (int i = 0; i < n_bits; i++) {
NicolasV 0:15536ec3bf58 75 code[i] = mute[i];
NicolasV 0:15536ec3bf58 76 msg = "mute";
NicolasV 0:15536ec3bf58 77 }
NicolasV 0:15536ec3bf58 78 break;
NicolasV 0:15536ec3bf58 79 case 3:
NicolasV 0:15536ec3bf58 80 for (int i = 0; i < n_bits; i++) {
NicolasV 0:15536ec3bf58 81 code[i] = power[i];
NicolasV 0:15536ec3bf58 82 msg = "power";
NicolasV 0:15536ec3bf58 83 }
NicolasV 0:15536ec3bf58 84 break;
NicolasV 0:15536ec3bf58 85 case 4:
NicolasV 0:15536ec3bf58 86 for (int i = 0; i < n_bits; i++) {
NicolasV 0:15536ec3bf58 87 code[i] = vol_up[i];
NicolasV 0:15536ec3bf58 88 msg = "vol_up";
NicolasV 0:15536ec3bf58 89 }
NicolasV 0:15536ec3bf58 90 break;
NicolasV 0:15536ec3bf58 91 case 5:
NicolasV 0:15536ec3bf58 92 for (int i = 0; i < n_bits; i++) {
NicolasV 0:15536ec3bf58 93 code[i] = vol_down[i];
NicolasV 0:15536ec3bf58 94 msg = "vol_down";
NicolasV 0:15536ec3bf58 95 }
NicolasV 0:15536ec3bf58 96 break;
NicolasV 0:15536ec3bf58 97 }
NicolasV 0:15536ec3bf58 98
NicolasV 0:15536ec3bf58 99 int minutos = aleatorio(1, 100) % 10;
NicolasV 0:15536ec3bf58 100
NicolasV 0:15536ec3bf58 101 for (int m = minutos; m > 0; m--) {
NicolasV 0:15536ec3bf58 102 for (int s = 59; s >= 0; s--) {
NicolasV 0:15536ec3bf58 103 indic = !indic;
NicolasV 0:15536ec3bf58 104 lcd.cls();
NicolasV 0:15536ec3bf58 105 lcd.locate(0,0);
NicolasV 0:15536ec3bf58 106 lcd.printf("%s\nen:%2d:%02d", msg, m, s);
NicolasV 0:15536ec3bf58 107 wait(1/escala_tiempo);
NicolasV 0:15536ec3bf58 108 }
NicolasV 0:15536ec3bf58 109 }
NicolasV 0:15536ec3bf58 110
NicolasV 0:15536ec3bf58 111 enviar_codigo(n_bits, code);
NicolasV 0:15536ec3bf58 112
NicolasV 0:15536ec3bf58 113 }
NicolasV 0:15536ec3bf58 114 }
NicolasV 0:15536ec3bf58 115
NicolasV 0:15536ec3bf58 116 void enviar_uno(int duracion) {
NicolasV 0:15536ec3bf58 117
NicolasV 0:15536ec3bf58 118 Timer t;
NicolasV 0:15536ec3bf58 119 t.reset();
NicolasV 0:15536ec3bf58 120 t.start();
NicolasV 0:15536ec3bf58 121
NicolasV 0:15536ec3bf58 122 while (t.read_us() < duracion) {
NicolasV 0:15536ec3bf58 123 led = 1;
NicolasV 0:15536ec3bf58 124 wait_us(8);
NicolasV 0:15536ec3bf58 125 led = 0;
NicolasV 0:15536ec3bf58 126 wait_us(8);
NicolasV 0:15536ec3bf58 127 }
NicolasV 0:15536ec3bf58 128 }
NicolasV 0:15536ec3bf58 129
NicolasV 0:15536ec3bf58 130 void descanso(int duracion) {
NicolasV 0:15536ec3bf58 131 wait_us(duracion);
NicolasV 0:15536ec3bf58 132 }
NicolasV 0:15536ec3bf58 133
NicolasV 0:15536ec3bf58 134 void enviar_codigo(int n_bits, int *code) {
NicolasV 0:15536ec3bf58 135
NicolasV 0:15536ec3bf58 136 led = 0;
NicolasV 0:15536ec3bf58 137 wait_ms(100);
NicolasV 0:15536ec3bf58 138 enviar_uno(header_L);
NicolasV 0:15536ec3bf58 139 descanso(header_H);
NicolasV 0:15536ec3bf58 140
NicolasV 0:15536ec3bf58 141 for (int i = 0; i < n_bits; ++i) {
NicolasV 0:15536ec3bf58 142 enviar_uno(400);
NicolasV 0:15536ec3bf58 143 descanso(code[i]);
NicolasV 0:15536ec3bf58 144 }
NicolasV 0:15536ec3bf58 145 enviar_uno(420);
NicolasV 0:15536ec3bf58 146 }
NicolasV 0:15536ec3bf58 147
NicolasV 0:15536ec3bf58 148 int aleatorio(int a, int b) {
NicolasV 0:15536ec3bf58 149 return rint((b - a) * abs(cos((double)timer.read_us())) + a);
NicolasV 0:15536ec3bf58 150 }