-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtransmitRC.ino
91 lines (77 loc) · 2.65 KB
/
transmitRC.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
/*
* Para importar la libreria RC-Switch by sui77:
* Arduino IDE > Programa > Incluir Libreria > Administrar Bibliotecas > Buscar: RC-Switch
*/
#define Xpin A5
#define Ypin A4
const int Bpin = 3;
const int transmitPin = 10;
#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();
/* Colores en el autito:
0 - apagado
1 - rojo
2 - verde
3 - azul
4 - violeta
5 - naranja
*/
int color = 0;
int cantColores = 6;
bool botonPresionado = false;
void setup() {
pinMode(Xpin, INPUT);
pinMode(Ypin, INPUT);
pinMode(Bpin, INPUT_PULLUP);
mySwitch.enableTransmit(transmitPin);
mySwitch.setRepeatTransmit(1);
mySwitch.setProtocol(5); //frecuencia = 666Hz
}
/* CREAR_MASCARA
todo 0 y pongo 1 entre el min y el max
incluidos
*/
unsigned long crear_mascara (int max, int min)
{
unsigned long mask = 0;
int cantidad_unos = (max - min);
int i;
for (i=0; i<=(cantidad_unos-1); i++)
{
mask = mask + 1;
mask = mask << 1;
}
mask = mask + 1; //sino adentro del for queda 0 en el lsb
mask = mask << min;
return mask;
}
//---------------------------------------------------------------------------------
// Funcion mySwitch.send(msg,32): el msg es el mensaje a transmitir y el 32 es el tamaño del mensaje
// Se envia un mensaje de 4 bytes
// Los 4 bytes se estructuran de la siguiente manera, siendo 1 el byte mas significativo, y 4 el menos significativo:
// -> 1° byte: Valor analogico correspondiente a la posicion X del joystick.
// -> 2° byte: Valor analogico correspondiente a la posicion Y del joystick.
// -> 3° byte: Es un entero que representa el color que debera adoptar el auto.
// -> 4° byte: Por el momento no esta en uso. Puede usarse para enviar el valor analogico de otro potenciometro para "Hackeos"
void enviarMensaje(int x, int y, int boton)
{
unsigned long mensaje = (unsigned long) x << 24;
unsigned long posY = (unsigned long) y << 16;
if (boton){ // Boton presionado
if (!botonPresionado){ // Si no estaba presionado antes, aumento "color". Si ya estaba presionado, no hago nada
color++;
if (color >= cantColores) color = 0; // Si supera el maximo de colores se pone en 0
botonPresionado = true;
}
}else{
botonPresionado = false; // Si no estan apretando el boton marco que no esta presionado
}
mensaje = mensaje | (crear_mascara(23, 16) & posY) | (color << 8);
mySwitch.send(mensaje, 32);
}
//-
void loop() {
delay(1);
//se envian los estados del control mapeados entre 0 y 255
enviarMensaje((int)map(analogRead(Xpin), 0, 1023, 255, 0), (int)map(analogRead(Ypin), 0, 1023, 255, 0), digitalRead(Bpin));
}