You are on page 1of 3

//Hay que enviar constantemente la posicion actual, o sino se va al origen.

int CLK = 3; //Pin3: Azul CLK+


int SYNC=4; //Pin4: Cafe SYNC+
int CHAN2=5; //Pin5: Verde CHAN2+
int CHAN1=6; //Pin6: Rojo CHAN1+
int salida=0;

int count = 0;
int aux=0;
unsigned int posXdecimal=0;
unsigned int posYdecimal=0;

int i=0;

//BOTONERA
//Pin10: ENTER
//Pin11: BOTON ARRIBA
//Pin12: BOTON ABAJO
int botonEnter=10;
int botonArriba=12;
int botonAbajo=11;

void setup()
{
//Pines Botonera:
pinMode(botonEnter, INPUT);
pinMode(botonArriba, INPUT);
pinMode(botonAbajo, INPUT);

pinMode(CLK, OUTPUT);
pinMode(SYNC, OUTPUT);
pinMode(CHAN1, OUTPUT);
pinMode(CHAN2, OUTPUT);

digitalWrite(CLK, LOW);
digitalWrite(SYNC, LOW);
digitalWrite(CHAN1, LOW);
digitalWrite(CHAN2, LOW);
delay(5000);

digitalWrite(CHAN1, LOW);
digitalWrite(CHAN2, LOW);
digitalWrite(SYNC, LOW);
for( i = 0; i < 100; i++)
{
digitalWrite(CLK, HIGH);
digitalWrite(CLK, LOW);
}
}

void loop()
{
//Header:
//Bit 1:
digitalWrite(SYNC, HIGH);
digitalWrite(CLK, HIGH);
digitalWrite(CLK, LOW);
//Bit 2:
digitalWrite(CLK, HIGH);
digitalWrite(CLK, LOW);
//Bit 3:
digitalWrite(CHAN1, HIGH);
digitalWrite(CHAN2, HIGH);
digitalWrite(CLK, HIGH);
digitalWrite(CLK, LOW);

//Posicion:
//Min: 0 Max: 65535 (comprobado que ese es el maximo)

// posXdecimal=posXdecimal+300;
// posYdecimal=posYdecimal+300;

// posXdecimal=300;
//posYdecimal=300;

//Enviar posiciones
for( i = 15; i >= 0; i--)
{
//PosX:
salida = (posXdecimal >> i) & 1; // n=0..15. stores nth bit of x in y. y
becomes 0 or 1.
if(salida==1)
{
digitalWrite(CHAN1, HIGH);
}
else
{
digitalWrite(CHAN1, LOW);
}

//PosY:
salida = (posYdecimal >> i) & 1; // n=0..15. stores nth bit of x in y. y
becomes 0 or 1.
if(salida==1)
{
digitalWrite(CHAN2, HIGH);
}
else
{
digitalWrite(CHAN2, LOW);
}
digitalWrite(CLK, HIGH);
digitalWrite(CLK, LOW);
}
//Parece que las paridades dan lo mismo si estan bien o mal
//Paridad X:
count = 0;
for (int n=0; n<16; ++n) {
if (posXdecimal & (1<<n)) {
++count;
}
}
if ( (count % 2) == 1)
{
digitalWrite(CHAN1, L);
}
else
{
digitalWrite(CHAN1, LOW);
}

//Paridad Y:
count=0;
for (int n=0; n<16; ++n) {
if (posYdecimal & (1<<n)) {
++count;
}
}
if ( (count % 2) == 1)
{
digitalWrite(CHAN2, LOW);
}
else
{
digitalWrite(CHAN2, HIGH);
}

digitalWrite(SYNC, LOW);

for (int n=0; n<1000; ++n) {


digitalWrite(CLK, HIGH);
digitalWrite(CLK, LOW);
}

delay(30);
}

You might also like