DEBIAN PRO

DEBIAN PRO
DEBIAN

sábado, 9 de noviembre de 2013

Codigo Completo con todo.


El código con todo dentro.
Display de 7 segmentos
Board con 16 Relays
Display 8 x 8 Segmentos (8x7)
Switch en PIN 10 para input.

/*

Mix demo ALL-INCLUSIVE
dac FREECODE 2013-11

30-46 connected to 16 relay board

14-21 connected to 7 segment display

10 connected to switch

ICSP conencted to 8 x 8 segment display
1 negro a 6 RCK
2 azul a NADA
3 blanco a SCK
4 gris a DID
6 violet a GND

XXXXXXXX
1 PUNTO
2 cen
3 arr izq
4 aba izq
5 aba
6 aba der
7 arr der
8 arr

*/

#include

const byte LATCH = 51;
String inputString = "";
boolean stringComplete = false;
String conv = "";

void setup() {

digitalWrite(SS, HIGH);
SPI.begin ();
SPI.setClockDivider(SPI_CLOCK_DIV2);

digitalWrite (LATCH, LOW);
SPI.transfer (B10000000); // INICIO ultimo digito
SPI.transfer (B11000000); // esta en cero
digitalWrite (LATCH, HIGH);


Serial.begin(9600);
inputString.reserve(20);

pinMode(10, INPUT);

int i = 0;
for (i == 0; i<16; i++)
{
pinMode(30+i, OUTPUT);
digitalWrite(30+i, HIGH);
}

int j = 0;
for (j == 0; j<8; j++)
{
pinMode(14+j, OUTPUT);
digitalWrite(14+j, HIGH);
}
}



void loop() {
if (stringComplete) {

Serial.println( digitalRead (10) );
if ( (inputString.length()-1) <= 10)
{
converso();
digitalWrite (LATCH, LOW);
SPI.transfer (B10000000); // ULTIMO DIGITO
SPI.transfer (B11111001); // 1
digitalWrite (LATCH, HIGH);

int k = 0;
for (k == 0; k {
if ( inputString[k] == '1')
{
// Serial.println( '1' );
digitalWrite(14+k, LOW);
}
else
{
// Serial.println( '0' );
digitalWrite(14+k, HIGH);
}
}
}
else
{
digitalWrite (LATCH, LOW);
SPI.transfer (B10000000); // ultimo digito
SPI.transfer (B10100100); // 2
digitalWrite (LATCH, HIGH);

int l = 0;
for (l == 0; l {
if ( inputString[l] == '1')
{
// Serial.println( '1' );
digitalWrite(30+l, LOW);
}
else
{
// Serial.println( '0' );
digitalWrite(30+l, HIGH);
}
}
};

// Serial.println(inputString);
inputString = "";
stringComplete = false;
}
}


void converso () {
// if (inputString =='11111111')
conv = "";
// 'B10000000';

// if (inputString =='00000001')
// conv = 'B00000001';

// if (inputString =='00000010')
// conv = 'B00000011';
}

void serialEvent() {
while (Serial.available()) {
char inChar = (char)Serial.read();
inputString += inChar;
if (inChar == '\n') {
stringComplete = true;
}
}
}
// end of code

Arduino Mega y Display 8 x 7 segmentos


Finalmente estoy encontrando la solución para comandar el display.

El link a DX del Display.

Pensé que sería algo mas fácil, y aún no lo tengo al 100%.


El pinout, usé la interfaz ICSP :
1 negro a 6 RCK
2 azul a NADA
3 blanco a SCK
4 gris a DID
6 violet a GND
Un punto importante es que no conecté el pin de voltaje


Mi código ejemplo es este.


#include
const byte LATCH = 51;

void setup ()
{
digitalWrite(SS, HIGH);
SPI.begin ();
SPI.setClockDivider(SPI_CLOCK_DIV8);
}


void loop ()
{
unsigned int pattern;

// 1 PUNTO
// 2 cen
// 3 arr izq
// 4 aba izq
// 5 aba
// 6 aba der
// 7 arr der
// 8 arr

digitalWrite (LATCH, LOW);
SPI.transfer (B11111111); // TODO ON
SPI.transfer (B00000000); // 8 y punto ENCENDIDO
digitalWrite (LATCH, HIGH);
delay(300);

digitalWrite (LATCH, LOW);
SPI.transfer (B11111111); // TODO ON
SPI.transfer (B11111000); // siete
digitalWrite (LATCH, HIGH);
delay(300);

digitalWrite (LATCH, LOW);
SPI.transfer (B10000100); // 3 y ultimo
SPI.transfer (B10000000); // 8
// SPI.transfer (B00000010); // decenas
// SPI.transfer (B11111000); // 7
// SPI.transfer (B00000001); // unidades
// SPI.transfer (B11111001); // 1
digitalWrite (LATCH, HIGH);
delay(1000);


digitalWrite (LATCH, LOW);
SPI.transfer (B10101010); // en 1 3 5 7
SPI.transfer (B00000000); // 8chos
digitalWrite (LATCH, HIGH);
delay(300);

digitalWrite (LATCH, LOW);
SPI.transfer (B10000000); // 8vo segment
SPI.transfer (B11111001); // un uno
digitalWrite (LATCH, HIGH);
delay(300);


digitalWrite (LATCH, LOW);
SPI.transfer (B01000000); // 7mo segment
SPI.transfer (B10100100); // un DOS
digitalWrite (LATCH, HIGH);
delay(300);


// un 8 en el 8vo display
digitalWrite (LATCH, LOW);
SPI.transfer (B10000000);
SPI.transfer (B10000000);
digitalWrite (LATCH, HIGH);
delay(300);



// 9 y punto
digitalWrite (LATCH, LOW);
SPI.transfer (highByte(0x10));
SPI.transfer (lowByte (0x10));
digitalWrite (LATCH, HIGH);
delay(300);

// CERO y punto
digitalWrite (LATCH, LOW);
SPI.transfer (highByte(0x40));
SPI.transfer (lowByte (0x40));
delay(300);
digitalWrite (LATCH, HIGH);

// letra o minuscula
digitalWrite (LATCH, LOW);
SPI.transfer (highByte(0x23));
SPI.transfer (lowByte (0x23));
delay(300);
digitalWrite (LATCH, HIGH);

digitalWrite (LATCH, LOW);
SPI.transfer (highByte(0xF));
SPI.transfer (lowByte (0xF));
delay(300);
digitalWrite (LATCH, HIGH);

digitalWrite (LATCH, LOW);
SPI.transfer (highByte(0xA));
SPI.transfer (lowByte (0xA));
delay(300);
digitalWrite (LATCH, HIGH);

delay(1000);
}


jueves, 7 de noviembre de 2013

Lync in Linux


Para hacer funcionar mi equipo Linux con LYNC, he seguido la siguiente secuencia.

Instalar pidgin pidgin-sipe
# apt-get install pidgin pidgin-SIPE

Agregar una cuenta (+ADD)
Protocol Office Communicator.
Username Nombre.Apellido@Dominio.com
LOGIN USER
dominio\usuario
clave
Remember Password

Y listo.... voila. Funcionando.

Display 7 segmentos Arduino Mega


Luego de unas cuantas horas de investigación, logré que funcione un nuevo display de 8 x 7 segmentos (aunque en realidad es de 8 x 8 segmentos).
Usando Arduino Mega R3 y el display de la foto (8 x 8 VCC, GND, DIO, SCK, RCK), 8 displays con 7 segmentos, pero que tienen un punto decimal también, asi que sería un 8 x 8.

Algo de info SPI aca.


Usé los pines 1,2,3,4 y 6.

1 - RCK
2 - VCC
3 - SCK
4 - DIO
6 - GND


El código demo es este:


#include
const byte LATCH = 4;
const byte numberOfChips = 8;

byte LEDdata [numberOfChips]; // initial pattern

void refreshLEDs ()
{
digitalWrite (LATCH, LOW);
for (byte i = 0; i < numberOfChips; i++) SPI.transfer (LEDdata [i]); digitalWrite (LATCH, HIGH); } // end of refreshLEDs void setup () { SPI.begin (); } // end of setup void showPattern (const unsigned int p1, const unsigned int p2) { LEDdata [0] = highByte (p1); LEDdata [1] = lowByte (p1); LEDdata [2] = highByte (p2); LEDdata [3] = lowByte (p2); refreshLEDs (); delay (100); } // end of showPattern void loop () { unsigned int pattern; pattern = 1; for (int i = 0; i < 16; i++) { showPattern (pattern, pattern); pattern <<= 1; } pattern = 0x8000; for (int i = 0; i < 16; i++) { showPattern (pattern, pattern); pattern >>= 1;
}

pattern = 1;
for (int i = 0; i < 16; i++) { showPattern (~pattern, ~pattern); pattern <<= 1; } pattern = 0x8000; for (int i = 0; i < 16; i++) { showPattern (~pattern, ~pattern); pattern >>= 1;
}

} // end of loop




domingo, 3 de noviembre de 2013

D.O.S. demo


Si, es de los ´80, pero hace lo que tiene que hacer...

---- DEMO.BAT -------
INICIO:
ECHO OFF
CLS
echo 1000000000000000 > COM3:
sleep -m 250
echo 0100000000000000 > COM3:
sleep -m 250
echo 0010000000000000 > COM3:
sleep -m 250
echo 0001000000000000 > COM3:
sleep -m 250
echo 0000100000000000 > COM3:
sleep -m 250
echo 0000010000000000 > COM3:
sleep -m 250
echo 0000001000000000 > COM3:
sleep -m 250
echo 0000000100000000 > COM3:
sleep -m 250
echo 0000000000000000 > COM3:
sleep -m 250
demo.bat

sábado, 2 de noviembre de 2013

Pantallas


Pantalla del móvil con la mini-interfaz para controlar el Arduino.
Desde Internet o con Wifi desde casa le puedo enviar órdenes para que active cosas.


Si, ya se que son 12 botones muuuuuuy simples, pero me alcanza para el control del dispositivo.

Arduino y relays


Llevo unas semanas jugando con electrónica, programando en C, Perl, html y varios sistemas operativos.
Hasta hoy las cosas que he probado:

* Programar un Arduino con un código simple que dados NN bits, los pase a los puertos 40 en adelante.
En esos puertos tengo conectada otra placa con 16 relays para encender/apagar cosas, relays de 250 volts y 10 amperes, lo que es bastante.

* El mismo código arduino pero dados 8 bits, los pasa al puerto 14 en adelante.
En esos 8 pin outs, tengo conectado un Display de 7 segmentos (curiosamente traen 8 porque incluyen un punto).

* También le conecté a la placa un switch en el puerto 10 para leer un SI/NO.

* Metí Arduino y relays en una caja comprada por 2 euros en "Los chinos"... agujeros para sacar cable USB y en breve mas agujeros para conectar cables a los relays.

* Armado de programas Python para control de relays y display 7 segmentos.

* Armado de programa para conectar Linux con Un controlador que armó Douglas, enviar 2 caracteres para control de relays.

* Armado de programa que dados NN bits los pase al Arduino directamente. Para faciliar la interacción desde y hacia la placa.

* Probé Cygwin para poder correr programas C en Linux (en Windows),
Para enviar bits al Arduino, existe una manera mas facil aun.

WINDWOS CYGWIN
echo 00000000 > /dev/ttyS2

WINDOWS
echo 1111111 > com3:

* Luego armado de páginas HTML y PERL para interactuar desde internet, donde las peticiones llegan a un web publicado en internet y controlar al arduino.

* Luego COPIA DE TODO por las dudas...

* Ahora estoy armando luces de Leds de bajo consumo de 4 watts, para conectar hasta 16 a los relays, para hacer juegos de luces de colores. Pero necesito latas donde meter las luces y papeles de colores. Trabajos manuales para mis hijas.

* En camino vendrán mas cosas, un display de 5 displays de 7 segmentos, cables para conectar mas cosas, luces de colores de tira, un adaptador USB a SERIAL y algunas cosas mas que ya ni recuerdo.


* Todo esto funciona a 12 volts, para evitar problemas de riezgos eléctricos para los chicos.
Voy a preparar varios experimentos mas con ventiladores, motores y mas cosas.

* Recomiendo que prueben el programa MIXXX que es similar al Tracktor DJ pero gratuito.