ARDUINO Y PROCESSING
1. Instalar version 1.5.1 de Processing (LA MAS NUEVA NO FUNCIONA)
2. Con Arduino IDE, subir StandardFirmdata al arduino
3. Poner este codigo en processing:
import processing.serial.*;
import cc.arduino.*;
Arduino arduino;
int ledPin = 13;
boolean led = false;
void setup() {
size(200, 200);
println("COM Ports");
println(Arduino.list());
println("=========");
arduino = new Arduino(this, Arduino.list()[1], 57600);
arduino.pinMode(ledPin, Arduino.OUTPUT);
arduino.pinMode(2, Arduino.INPUT);
arduino.digitalWrite(ledPin, Arduino.HIGH);
}
void draw() {
if (arduino.digitalRead(2) == Arduino.HIGH)
println("HIGH!!");
else
println("LOW!!");
}
void mousePressed()
{
if (led)
arduino.digitalWrite(ledPin, Arduino.HIGH);
else
arduino.digitalWrite(ledPin, Arduino.LOW);
led = !led;
}
----------------------------------------------------------------------------
http://www.youtube.com/watch?v=8OHs1VqIzVU
Libreria para C# y standard firmdata
http://www.acraigie.com/programming/firmatavb/default.html
http://code.google.com/p/sharpduino/
Leer archivo de texto con processing:
http://forum.processing.org/topic/import-and-read-files
http://txapuzas.blogspot.com/2009/12/txapu-cnc-hardware.html
GCODE SENDER TO ARDUINO
http://www.contraptor.org/forum/t-287260/gcode-sender-program
Smooth scrolling text en c#
1. Create a C# windows form application
2. In the Solution Explorer window, right click the project node and click Add->New Item button.
3. Select the Component Class template, rename it to MarqueeLabel.cs and click Add button
4. Replace the MarqueeLabel implementation with Fernando's codes
5. Delete the default MarqueeLabel.designer.cs file
6. Build you solution
7. In your Form designer, you will find the MarqueeLabel component in the tool box window.
8. Drag it onto your form, it will work correctly.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace DeteccionPuertos
{
class MarqueeLabel : Label
{
private int CurrentPosition { get; set; }
private Timer Timer { get; set; }
public MarqueeLabel()
{
UseCompatibleTextRendering = true;
Timer = new Timer();
Timer.Interval = 25;
Timer.Tick += new EventHandler(Timer_Tick);
//Timer.Start();
}
public void Start()
{
Timer.Start();
}
public void Stop()
{
Timer.Stop();
}
void Timer_Tick(object sender, EventArgs e)
{
if (CurrentPosition > Width)
CurrentPosition = -Width;
else
CurrentPosition += 2;
Invalidate();
}
protected override void OnPaint(PaintEventArgs e)
{
e.Graphics.TranslateTransform((float)CurrentPosition, 0);
base.OnPaint(e);
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
if (Timer != null)
Timer.Dispose();
}
Timer = null;
}
}
}
2. In the Solution Explorer window, right click the project node and click Add->New Item button.
3. Select the Component Class template, rename it to MarqueeLabel.cs and click Add button
4. Replace the MarqueeLabel implementation with Fernando's codes
5. Delete the default MarqueeLabel.designer.cs file
6. Build you solution
7. In your Form designer, you will find the MarqueeLabel component in the tool box window.
8. Drag it onto your form, it will work correctly.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace DeteccionPuertos
{
class MarqueeLabel : Label
{
private int CurrentPosition { get; set; }
private Timer Timer { get; set; }
public MarqueeLabel()
{
UseCompatibleTextRendering = true;
Timer = new Timer();
Timer.Interval = 25;
Timer.Tick += new EventHandler(Timer_Tick);
//Timer.Start();
}
public void Start()
{
Timer.Start();
}
public void Stop()
{
Timer.Stop();
}
void Timer_Tick(object sender, EventArgs e)
{
if (CurrentPosition > Width)
CurrentPosition = -Width;
else
CurrentPosition += 2;
Invalidate();
}
protected override void OnPaint(PaintEventArgs e)
{
e.Graphics.TranslateTransform((float)CurrentPosition, 0);
base.OnPaint(e);
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
if (Timer != null)
Timer.Dispose();
}
Timer = null;
}
}
}
jQuery AJAX desde PHP con jsonwrapper
Codigo del webservice:
prueba1.php
<?php
$receive=file_get_contents('php://input');
$p = json_decode($receive);
$pp[0]["prueba0"] = $p["parametro1"];
$pp[0]["prueba1"] = "abc";
$pp[0]["ss"] = "zzz";
$p = json_encode($pp);
echo $p;
?>
Codigo JS:
function invocarAjax(url_ws, param_ws, funcion_ws, async_ws)
{
if(async_ws===undefined)
async_ws = false;
jQuery.ajax({
type: "POST",
timeout: 5000,
url: url_ws + "?" + "random=" + Math.floor(Math.random()*9999999999),
data: param_ws,
contentType: "application/json; charset=utf-8",
dataType: "json",
cache: false,
async: async_ws,
success: function(response) {
window[funcion_ws](response, null);
},
error: function(xhr, ajaxOptions, thrownError) {
window[funcion_ws](null, xhr.responseText );
}
});
}
function getJSON(data_obj)
{
if (data_obj.d)
data_ok = data_obj.d;
else
data_ok = data_obj;
evalJson = eval("var varJSON = " + data_ok + ";");
return varJSON;
}
Código que invoca al webservice:
<script>
$(document).ready(function() {
$("#setear").click(function() {
url_ws = "prueba1.php";
param_ws = '{"parametro1": "5555", "enviar_todos": "S"}';
invocarAjax(url_ws, param_ws, "callbackConfigEmails", true);
});
});
function callbackConfigEmails(v, err)
{
if (err == null)
{
if (v[0].prueba1 != "")
{
alert("prueba0: " + v[0].prueba0);
alert("prueba1: " + v[0].prueba1);
}
} else
alert("ERROR: " + err);
}
</script>
OJO!!!!!
El codigo json_decode de jsonwrapper NO funciona, en su lugar, utilizar este:
function json_decode($json)
{
$comment = false;
$out = '$x=';
for ($i=0; $i<strlen($json); $i++)
{
if (!$comment)
{
if (($json[$i] == '{') || ($json[$i] == '['))
$out .= ' array(';
else if (($json[$i] == '}') || ($json[$i] == ']'))
$out .= ')';
else if ($json[$i] == ':')
$out .= '=>';
else
$out .= $json[$i];
} else
$out .= $json[$i];
if ($json[$i] == '"' && $json[($i-1)]!="\\")
$comment = !$comment;
}
eval($out . ';');
return $x;
}
prueba1.php
<?php
$receive=file_get_contents('php://input');
$p = json_decode($receive);
$pp[0]["prueba0"] = $p["parametro1"];
$pp[0]["prueba1"] = "abc";
$pp[0]["ss"] = "zzz";
$p = json_encode($pp);
echo $p;
?>
Codigo JS:
function invocarAjax(url_ws, param_ws, funcion_ws, async_ws)
{
if(async_ws===undefined)
async_ws = false;
jQuery.ajax({
type: "POST",
timeout: 5000,
url: url_ws + "?" + "random=" + Math.floor(Math.random()*9999999999),
data: param_ws,
contentType: "application/json; charset=utf-8",
dataType: "json",
cache: false,
async: async_ws,
success: function(response) {
window[funcion_ws](response, null);
},
error: function(xhr, ajaxOptions, thrownError) {
window[funcion_ws](null, xhr.responseText );
}
});
}
function getJSON(data_obj)
{
if (data_obj.d)
data_ok = data_obj.d;
else
data_ok = data_obj;
evalJson = eval("var varJSON = " + data_ok + ";");
return varJSON;
}
Código que invoca al webservice:
<script>
$(document).ready(function() {
$("#setear").click(function() {
url_ws = "prueba1.php";
param_ws = '{"parametro1": "5555", "enviar_todos": "S"}';
invocarAjax(url_ws, param_ws, "callbackConfigEmails", true);
});
});
function callbackConfigEmails(v, err)
{
if (err == null)
{
if (v[0].prueba1 != "")
{
alert("prueba0: " + v[0].prueba0);
alert("prueba1: " + v[0].prueba1);
}
} else
alert("ERROR: " + err);
}
</script>
OJO!!!!!
El codigo json_decode de jsonwrapper NO funciona, en su lugar, utilizar este:
function json_decode($json)
{
$comment = false;
$out = '$x=';
for ($i=0; $i<strlen($json); $i++)
{
if (!$comment)
{
if (($json[$i] == '{') || ($json[$i] == '['))
$out .= ' array(';
else if (($json[$i] == '}') || ($json[$i] == ']'))
$out .= ')';
else if ($json[$i] == ':')
$out .= '=>';
else
$out .= $json[$i];
} else
$out .= $json[$i];
if ($json[$i] == '"' && $json[($i-1)]!="\\")
$comment = !$comment;
}
eval($out . ';');
return $x;
}
Configuración de EZdrummer
ABRIR LIVE COMO ADMINISTRADOR! SINO EL EZDRUMMER DA ERROR DICIENDO QUE NO ENCUENTRA LOS ARCHIVOS DE SONIDO.
ATENCION!!!!! Si no sale el sonido utilizando los drivers ASIO, conectar auriculares!!! no sale por los parlantes, sale por los auriculares!!!!
(Otra opcion es ir a las propiedades del dispositivo de salida, y en la ficha Avanzadas, desmarcar "Allow applications to take exclusive control of this device")
1. Instalar EZDrummer
2. Instalar ASIO4ALL y configurarlo:
3. Instalar Ableton Live y configurarlo:
ATENCION!!!!! Si no sale el sonido utilizando los drivers ASIO, conectar auriculares!!! no sale por los parlantes, sale por los auriculares!!!!
(Otra opcion es ir a las propiedades del dispositivo de salida, y en la ficha Avanzadas, desmarcar "Allow applications to take exclusive control of this device")
1. Instalar EZDrummer
2. Instalar ASIO4ALL y configurarlo:
3. Instalar Ableton Live y configurarlo:
5. Agregar plugin de EZDrummer en Ableton:
Para que aparezca en la lista de plugins, es necesario poner en On la opcion marcada a continuación:
6. Solucionar el problema de la latencia (configurar sonido en windows):
7. Aumentar el volumen:
8. Si se cierra la pantalla del EZDrummer, se abre de nuevo así:
Conectar WIImote al PC
PASOS PARA CONFIGURAR WIIMOTE CON BLUESOLEIL
1. Presionar 1+2 (y soltar enseguida) en el WIIMOTE y dar doble click sobre la esfera naranja en BlueSoleil
2. Tiene que aparecer el dispositivo, primero con un numero y luego con el nombre "Nintendo RVL-CN..."
3. Hacer doble click sobre el dispositivo
4. Presionar 1+2 en el WIIMOTE, y dar click derecho sobre el dispositivo y luego "Buscar servicios"
5. Cuando diga "NINTENDO RVL-CN... 1 servicios.", presionar 1+2 en el WIIMOTE y dar boton derecho sobre el dispositivo y elegir "Conectar Dispositivo de interfaz humana Bluetooth".
6. Cuando aparece la línea punteada entre el dispositivo y la esfera naranja, el WIIMOTE esta pronto para usar.
http://www.simplehelp.net/2009/01/14/how-to-connect-a-wii-remote-to-your-pc/
Conexion utilizando BlueSoleil
http://consoleplus.wordpress.com/2007/07/08/usar-el-wiimote-en-el-pc-version11/
Conectar el sensor bar al usb:
http://forums.dolphin-emulator.com/showthread.php?tid=21649
1. Presionar 1+2 (y soltar enseguida) en el WIIMOTE y dar doble click sobre la esfera naranja en BlueSoleil
2. Tiene que aparecer el dispositivo, primero con un numero y luego con el nombre "Nintendo RVL-CN..."
3. Hacer doble click sobre el dispositivo
4. Presionar 1+2 en el WIIMOTE, y dar click derecho sobre el dispositivo y luego "Buscar servicios"
5. Cuando diga "NINTENDO RVL-CN... 1 servicios.", presionar 1+2 en el WIIMOTE y dar boton derecho sobre el dispositivo y elegir "Conectar Dispositivo de interfaz humana Bluetooth".
6. Cuando aparece la línea punteada entre el dispositivo y la esfera naranja, el WIIMOTE esta pronto para usar.
http://www.simplehelp.net/2009/01/14/how-to-connect-a-wii-remote-to-your-pc/
Conexion utilizando BlueSoleil
http://consoleplus.wordpress.com/2007/07/08/usar-el-wiimote-en-el-pc-version11/
Conectar el sensor bar al usb:
http://forums.dolphin-emulator.com/showthread.php?tid=21649
Como identificar una polea y una correa
Correas:
384-3M-12
The first number represents the length of the belt loop (384 mm in this example). The second number represents the peak to peak tooth spacing (3 mm in this example). The third number represents the width of the belt (12 mm in this example)
Poleas:
72-3M-15
72 dientes (theet)
3M - 3mm (pitch.. distancia entre dos crestas en la correa)
15 - 15mm ancho de la correa
384-3M-12
The first number represents the length of the belt loop (384 mm in this example). The second number represents the peak to peak tooth spacing (3 mm in this example). The third number represents the width of the belt (12 mm in this example)
Poleas:
72-3M-15
72 dientes (theet)
3M - 3mm (pitch.. distancia entre dos crestas en la correa)
15 - 15mm ancho de la correa
Evitar que un div vaya a la siguiente linea
usar display: inline
Este ejemplo muestra un textbox y al lado el div (no debajo)
<input type="text" size="20"><div style="display: inline">contenido del div</div>
Este ejemplo muestra un textbox y al lado el div (no debajo)
<input type="text" size="20"><div style="display: inline">contenido del div</div>
Conectar el ultrasonic range sensor HC-SR04 a arduino
Conexión:
GND - tierra
ECHO - digital pin 2 de arduino
TRIG - digital pin 3 de arduino
Vcc - 5v de arduino
Código:
/*
* Define the pins you want to use as trigger and echo.
*/
#define ECHOPIN 2 // Pin to receive echo pulse
#define TRIGPIN 3 // Pin to send trigger pulse
/*
* setup function
* Initialize the serial line (D0 & D1) at 115200.
* Then set the pin defined to receive echo in INPUT
* and the pin to trigger to OUTPUT.
*/
void setup()
{
// Serial.begin(115200);
Serial.begin(9600);
pinMode(ECHOPIN, INPUT);
pinMode(TRIGPIN, OUTPUT);
}
/*
* loop function.
*
*/
void loop()
{
// Start Ranging
digitalWrite(TRIGPIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIGPIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGPIN, LOW);
// Compute distance
float distance = pulseIn(ECHOPIN, HIGH);
distance= distance/58;
Serial.println(distance);
delay(200);
}
fuente: http://www.xappsoftware.com/wordpress/2012/03/15/how-to-interface-the-hc-sr04-ultrasonic-ranging-module-to-arduino/
Ejemplo de Paking assistant:
http://electronicavm.wordpress.com/2011/07/07/sensor-de-aparcamiento-con-arduino/
Wrapper de teclado para control IR con arduino y event handlers de c#
Código arduino:
#include <IRremote.h>
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
}
void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value, HEX);
irrecv.resume(); // Receive the next value
}
}
Código C# (DLL):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.Ports;
namespace IRemote
{
public class IRemoteRec
{
static SerialPort port;
String str_recibido = "";
public event EventHandler IRreceived;
public void Inicializar(String puerto, int baudios, Parity paridad, int databits, StopBits stopbits)
{
port = new System.IO.Ports.SerialPort(puerto, baudios, paridad, databits, stopbits);
port.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(port_DataReceived);
port.Open();
}
void port_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
int bytesToRead = port.BytesToRead;
char[] z = new char[bytesToRead];
port.Read(z, 0, bytesToRead);
foreach (char s in z)
{
if (s == '\n')
{
// Console.WriteLine(str_recibido);
//quito el \r
this.IRreceived(str_recibido.Substring(0, str_recibido.Length - 1), new EventArgs());
str_recibido = "";
}
else
str_recibido += s;
}
}
}
}
Código C# (Uso de DLL):
using System;
using System.Windows.Forms;
using System.IO.Ports;
using IRemote;
namespace MKOtimer
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
IRemoteRec ir = new IRemoteRec();
ir.Inicializar("COM3", 9600, System.IO.Ports.Parity.None, 8, System.IO.Ports.StopBits.One);
ir.IRreceived += new EventHandler(IR_EventoRecibido);
}
void IR_EventoRecibido(object sender, EventArgs e)
{
//the CarOwner property has been modified
if (sender.ToString() == "FFA25D")
Ejecutar();
}
void Ejecutar()
{
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.EnableRaisingEvents = false;
proc.StartInfo.FileName = "calc";
proc.Start();
}
}
}
Steppers con arduino C# y comunicacion serial **FUNCIONANDO**
En esta version, se investigó el tope de tamaño de buffer serial de arduino (64K), y se hicieron varias pruebas para exceder ese limite, observandose anomalìas en el funcionamiento.
El ejemplo adjunto funciona correctamente, si se trata de exceder en un octeto mas, ya no funciona.
OJO! También se agregó Serial.flush() antes de comenzar.
Código arduino:
//#include <QueueArray.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); //set the LCD address to 0x27 for a 16 chars and 2 line display
int motor1[] = { 4, 5, 6, 7 };
int motor2[] = { 8, 9, 10, 11 };
String incomingString;
String buffer_ant = "";
String buffer = "";
boolean fin_datos;
void setup() {
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("www.b2cqshop.com");
lcd.setCursor(0, 1);
lcd.print("Voltage: ");
lcd.setCursor(13, 1);
lcd.print("V");
Serial.begin(9600);
fin_datos = false;
DDRD = B11111111; // set PORTD (digital 7~0)
DDRB = B11111111; // set PORTB (digital 13~8)
paso(0, "stop");
Serial.flush();
buffer = "";
incomingString = "";
}
void paso(int motor, String dir)
{
static int paso_actual_motor1 = 1;
static int paso_actual_motor2 = 1;
if (dir == "stop")
{
PORTD = B00000000;
PORTB = B00000000;
}
if (motor == 1)
{
if (dir == "derecha")
{
paso_actual_motor1++;
if (paso_actual_motor1 > 4)
paso_actual_motor1 = 1;
} else if (dir == "izquierda")
{
paso_actual_motor1--;
if (paso_actual_motor1 < 1)
paso_actual_motor1 = 4;
}
switch (paso_actual_motor1)
{
case 1:
// 76543210
PORTD = B00010000;
break;
case 2:
// 76543210
PORTD = B00100000;
break;
case 3:
// 76543210
PORTD = B01000000;
break;
case 4:
// 76543210
PORTD = B10000000;
break;
default: break;
}
}
if (motor == 2)
{
if (dir == "derecha")
{
paso_actual_motor2++;
if (paso_actual_motor2 > 4)
paso_actual_motor2 = 1;
} else if (dir == "izquierda")
{
paso_actual_motor2--;
if (paso_actual_motor2 < 1)
paso_actual_motor2 = 4;
}
switch (paso_actual_motor2)
{
case 1:
// 98
PORTB = B00000001;
break;
case 2:
// 76543210
PORTB = B00000010;
break;
case 3:
// 76543210
PORTB = B00000100;
break;
case 4:
// 76543210
PORTB = B00001000;
break;
default: break;
}
}
}
void mover_motores(String buffer)
{
if (buffer[7] != buffer_ant[7])
{
if (buffer[3] == '1')
paso(1, "derecha");
else
paso(1, "izquierda");
}
buffer_ant = buffer;
delay(10);
}
void push(String dato)
{
buffer += dato;
}
String pop()
{
String s;
s = buffer.substring(0, 8);
if (buffer.length() > 8)
buffer = buffer.substring(8);
else
buffer = "";
return s;
}
boolean queue_empty()
{
return (buffer.length() == 0);
}
//************************ LOOP ******************************//
void loop()
{
if (Serial.available() > 0)
{
char incomingByte = Serial.read();
if (incomingByte == '\0')
{
if (incomingString == "XXXXXXXX")
fin_datos = true;
else
{
push(incomingString);
}
incomingString = "";
} else
incomingString += incomingByte;
}
if (fin_datos)
{
while (!queue_empty())
{
String octeto = pop();
mover_motores(octeto);
}
paso(0, "stop");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Inactivo");
Serial.flush();
fin_datos = false;
}
}
Código .net
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;
using System.Runtime.InteropServices;
using System.Collections;
using System.Threading;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
static Queue<String> q = new Queue<String>();
static String mensaje = "";
ArrayList arr;
static long cant_queue;
static bool comienzo = false;
int paso = 1;
String buffer; //voy a usar de 1 a 8, el cero lo ignoro.
String buffer_ant;
String str_recibido = "";
String log = "";
static bool enviar_a_arduino = false;
[DllImport("inpout32.dll", EntryPoint = "Out32")]
public static extern void Output(int adress, int value);
[DllImport("inpout32.dll", EntryPoint = "Inp32")]
public static extern short Input(int adress);
static SerialPort port;
public Form1()
{
InitializeComponent();
}
void port_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
int bytesToRead = port.BytesToRead;
char[] z = new char[bytesToRead];
port.Read(z, 0, bytesToRead);
// ESTO NO VA ACA!!!!!!! str_recibido = "";
//PORQUE SI VA ACA, COMO NO RECIBE TODA LA LINEA DE UN SAQUE, CUANDO VUELVE A DISPARARSE ESTE EVENTO LO PONE VACIO DE NUEVO.
foreach (char s in z)
{
if (s == '\0')
{
Console.WriteLine(str_recibido);
str_recibido = "";
}
else
str_recibido += s;
}
}
private void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
//Write the serial port data to the console.
Console.WriteLine(port.ReadExisting());
}
private void Form1_Load(object sender, EventArgs e)
{
try
{
port = new System.IO.Ports.SerialPort("COM17", 9600, System.IO.Ports.Parity.None, 8, System.IO.Ports.StopBits.One);
//port.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);
port.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(port_DataReceived);
port.Open();
} catch(Exception ex)
{
MessageBox.Show("No se pudo abrir com17: " + ex.Message);
}
}
private void prueba()
{
Queue<String> q = new Queue<String>();
q.Enqueue("abc");
q.Enqueue("zzz");
q.Enqueue("fff");
q.Enqueue("hhh");
while (cant_queue > 0)
{
Console.WriteLine(q.Dequeue());
cant_queue--;
}
//foreach (String v in q)
// {
// Console.WriteLine(v);
// }
}
private void cmdMonitorLPT_Click(object sender, EventArgs e)
{
short v, v_ant;
int cant_ceros = 0;
buffer_ant = " "; // pin2_ant = "";
Step("stop");
if (cmdMonitorLPT.Text == "Monitor LPT")
{
arr = new ArrayList();
cmdMonitorLPT.Text = "Detener";
Application.DoEvents();
v = 0;
v_ant = -1;
while (v == 0)
{
v = leerLPT();
}
do
{
if (v != v_ant)
{
EnviarArduino();
v_ant = v;
}
v = leerLPT();
if (v == v_ant)
cant_ceros++;
else
cant_ceros = 0;
} while (cant_ceros < 600000);
Step("stop");
} else
cmdMonitorLPT.Text = "Monitor LPT";
}
private short leerLPT()
{
short v;
v = Input(888);
buffer = Convert.ToString(v, 2).PadLeft(8, '0');
return v;
}
private void EnviarArduino()
{
char pin2, pin6;
pin2 = buffer[7]; //.Substring(7, 1);
pin6 = buffer[3]; // t.Substring(3, 1);
if (buffer[7].CompareTo(buffer_ant[7]) != 0) //pin2.CompareTo(pin2_ant) != pin2_ant)
{
if (buffer[3] == '0') //pin6 == "0")
{
port.Write(paso.ToString());
paso++;
if (paso > 4)
paso = 1;
}
else
{
port.Write(paso.ToString());
paso--;
if (paso < 1)
paso = 4;
}
buffer_ant = buffer;
//pin2_ant = pin2;
System.Threading.Thread.Sleep(2);
}
}
public static int ToDecimal(string bin)
{
long l = Convert.ToInt64(bin, 2);
int i = (int)l;
return i;
}
private void Step(String dir)
{
switch (dir)
{
case "der" :
port.Write(paso.ToString());
paso++;
if (paso > 4)
paso = 1;
break;
case "izq":
port.Write(paso.ToString());
paso--;
if (paso < 1)
paso = 4;
break;
case "stop":
port.Write("X");
break;
}
}
private static void enviarOctetosANT(int cant)
{
int i = cant;
String s = ""; String octeto = "";
bool fin_datos = false;
while (i > 0 && cant_queue > 0 && !fin_datos)
{
octeto = q.Dequeue();
if (octeto == "TERMINO")
{
s += "{" + octeto + "}";
fin_datos = true;
q.Clear();
cant_queue = 0;
} else
{
s += "{" + octeto + "}";
i--;
cant_queue--;
}
}
if (!fin_datos)
s += "{FIN}"; //FIN indica que termino el set de octetos. TERMINO indica que termino todo.
port.Write(s);
}
private static void enviarOctetos(int cant)
{
int i = cant;
String s = ""; String octeto = "";
bool fin_datos = false;
while (i > 0 && cant_queue > 0 && !fin_datos)
{
octeto = q.Dequeue();
if (octeto == "TERMINO")
{
s += "{" + octeto + "}";
fin_datos = true;
q.Clear();
cant_queue = 0;
}
else
{
s += "{" + octeto + "}";
i--;
cant_queue--;
}
}
if (!fin_datos)
s += "{FIN}"; //FIN indica que termino el set de octetos. TERMINO indica que termino todo.
port.Write(s);
}
private void button5_Click(object sender, EventArgs e)
{
short v, v_ant;
int cant_ceros = 0;
buffer_ant = ""; // pin2_ant = "";
Step("stop");
if (cmdMonitorLPT.Text == "Monitor LPT")
{
arr = new ArrayList();
cmdMonitorLPT.Text = "Detener";
Application.DoEvents();
v = 0;
v_ant = -1;
while (v == 0)
{
v = leerLPT();
}
do
{
if (v != v_ant)
{
EnviarArduino();
v_ant = v;
}
v = leerLPT();
if (v == v_ant)
cant_ceros++;
else
cant_ceros = 0;
} while (cant_ceros < 600000);
Step("stop");
}
else
cmdMonitorLPT.Text = "Monitor LPT";
}
private void button6_Click(object sender, EventArgs e)
{
comienzo = false;
q.Clear();
cant_queue = 0;
Thread t1 = new Thread(new ParameterizedThreadStart(monitorLPT));
t1.Start();
}
private static void enviarDatosArduino()
{
if (cant_queue > 0)
{
//ESTA BIEN! SE EJECUTA 2 VECES PORQUE MANDA 1RO LOS 50 Y LUEGO LOS 22 (SON 72 EN TOTAL)
enviarOctetos(200);
}
}
private static void envioArduino(object num)
{
while (true)
{
if (cant_queue > 100)
{
port.Write("S");
comienzo = true;
}
if (enviar_a_arduino)
{
enviar_a_arduino = false;
enviarOctetos(50);
}
Thread.Sleep(200);
}
}
private static void CargarArchivo(object num)
{
cant_queue = 0;
System.IO.StreamReader sr = new System.IO.StreamReader(Application.StartupPath + "..\\..\\..\\archivos\\a2.txt");
while (!sr.EndOfStream)
{
String linea = sr.ReadLine();
q.Enqueue(linea);
cant_queue++;
}
sr.Close();
}
private static void monitorLPT(object num)
{
short v, v_ant;
int cant_ceros = 0;
String octeto = "";
//bool comenzo_arduino = false;
v = 0;
v_ant = -1;
while (v == 0)
{
v = Input(888);
octeto = Convert.ToString(v, 2).PadLeft(8, '0');
//v = leerLPT();
}
do
{
if (v != v_ant)
{
q.Enqueue(octeto);
cant_queue++;
//Console.WriteLine("Guardando en queue: " + octeto + " Cantidad: " + cant_queue);
//if (cant_queue > 100 && !comenzo_arduino)
//{
// port.Write("S"); //luego que cargue 100 en el buffer, le digo a arduino que comience
// comenzo_arduino = true;
//}
//EnviarArduino();
v_ant = v;
} else
{
mensaje = "Evitando duplicados...";
}
v = Input(888);
octeto = Convert.ToString(v, 2).PadLeft(8, '0');
if (v == v_ant)
cant_ceros++;
else
cant_ceros = 0;
} while (true); // (cant_ceros < 600000);
}
private void MoverMotores()
{
for (int i = 0; i < 6; i++)
{
port.Write("00010001\0");
port.Write("00010000\0");
port.Write("00010001\0");
port.Write("00010000\0");
port.Write("00010001\0");
port.Write("00010000\0");
port.Write("00010001\0");
port.Write("00010000\0");
}
port.Write("00010001\0");
port.Write("XXXXXXXX\0");
}
private void button3_Click(object sender, EventArgs e)
{
MoverMotores();
}
}
}
Suscribirse a:
Entradas (Atom)












