Nicolás Villegas Echavarría
/
control_loco
Se envían mensajes aleatorios a un televisor panasonic
Diff: main.cpp
- Revision:
- 0:15536ec3bf58
- Child:
- 1:ed8910f358bc
diff -r 000000000000 -r 15536ec3bf58 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu May 18 22:56:32 2017 +0000 @@ -0,0 +1,150 @@ +/** Control Loco. + +Por: Laura Ávila + Daniela López + Nicolás Villegas + +Este programa interfiere de forma loca la operación de un televisor. +Emite códigos de t.v. con el fin de fastidiar al televidente. + +El control utilizado es de marca Panasonic. Se encontró que los códigos IRDA para +esta referencia tienen una longitud de 48 bits. Se modificó el programa "Capturas IRDA" +para ajustarse a esta característica y con base en eso se obtuvieron los códigos. + +La emisión es aleatoria para + 1 Mute + 2 On/Off + 3 Vol+ + 4 Vol- + 5 Ch+ + 6 Ch- +*/ + +#include "mbed.h" +#include <Timer.h> +#include <math.h> +#include "TextLCD.h" + +Timer timer; +DigitalOut led(PTE31); // Al transistor del led infrarrojo pin. +DigitalOut indic(LED2); +TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5); // rs, e, d4-d7 + +double escala_tiempo = 1.0; +int code[50]; +int aleatorio(int a, int b); +void enviar_uno(int duracion); +void enviar_codigo(int n_bits, int *code); + +const int n_bits = 48; +const int header_L = 3440; +const int header_H = 1737; + +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}; +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}; +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}; +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}; +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}; +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}; +char* msg; + +int main() { + + timer.start(); + lcd.cls(); + + while (true) { + + int numero = aleatorio(0, 57) % 6; + + switch (numero) { + case 0: + for (int i = 0; i < n_bits; i++) { + code[i] = ch_up[i]; + msg = "ch_up"; + } + break; + case 1: + for (int i = 0; i < n_bits; i++) { + code[i] = ch_down[i]; + msg = "ch_down"; + } + break; + case 2: + for (int i = 0; i < n_bits; i++) { + code[i] = mute[i]; + msg = "mute"; + } + break; + case 3: + for (int i = 0; i < n_bits; i++) { + code[i] = power[i]; + msg = "power"; + } + break; + case 4: + for (int i = 0; i < n_bits; i++) { + code[i] = vol_up[i]; + msg = "vol_up"; + } + break; + case 5: + for (int i = 0; i < n_bits; i++) { + code[i] = vol_down[i]; + msg = "vol_down"; + } + break; + } + + int minutos = aleatorio(1, 100) % 10; + + for (int m = minutos; m > 0; m--) { + for (int s = 59; s >= 0; s--) { + indic = !indic; + lcd.cls(); + lcd.locate(0,0); + lcd.printf("%s\nen:%2d:%02d", msg, m, s); + wait(1/escala_tiempo); + } + } + + enviar_codigo(n_bits, code); + + } +} + +void enviar_uno(int duracion) { + + Timer t; + t.reset(); + t.start(); + + while (t.read_us() < duracion) { + led = 1; + wait_us(8); + led = 0; + wait_us(8); + } +} + +void descanso(int duracion) { + wait_us(duracion); +} + +void enviar_codigo(int n_bits, int *code) { + + led = 0; + wait_ms(100); + enviar_uno(header_L); + descanso(header_H); + + for (int i = 0; i < n_bits; ++i) { + enviar_uno(400); + descanso(code[i]); + } + enviar_uno(420); +} + +int aleatorio(int a, int b) { + return rint((b - a) * abs(cos((double)timer.read_us())) + a); +} \ No newline at end of file