Pin INPUT/OUTPUT pero para trafico como sería

Hola, muy complicado el titulo, pero mi consulta encierra todo. Veamos
Si yo quiero definir un pin digital Arduino como entrada hago pinMode(x, INPUT);
Si yo quiero definir un pin Digital Arduino como Salida hago pinMode(x, OUPUT);
Ahora viene mi consulta:
Pero si yo necesito que por ese pin Digital VAYA y VENGA una cadena digital como debería de tener que definir ese pin.

¿Por qué y para qué quisiera que vayan y vengan por el mismo pin?

Ej. wire DATA+ o DATA- del cable USB necesito que entre por un pin y salga por otro. (como sabemos por el cable DATA+ van y vienen datos digitales) entonces necesito que ese pin en cuestión permite tanto SALIDA como ENTRADA.

Gracias a quien pueda darme una mano.

El IDE de arduino permite declarar el modo del pin dentro del loop, cambialo cuando necesites recibir o mandar, no lo he probado, hazlo tu a ver que pasa. Tambien puedes leer un pin declarado como salida, aunque esto no se si devuelve el valor real del pin o solo el valor del regirtro asociado pruebalo tambien.
Saludos.

Lee el valor del registro asociado.

Si un pin está declarado como salida no es posible usarlo al mismo tiempo como entrada.
Pensemos un caso: el pin está enviando un HIGH e intento "inyectarle" un LOW, ¿qué pasaría?
Sí, me quedo sin pin porque genero un cortocircuito.

En el otro caso, definido como entrada, si escribimos un HIGH activamos la resistencia pull-up.
Tal vez podríamos "jugar" con la resistencia pull-up para obtener un HIGH al habilitarla y un LOW (mediante una resistencia a masa) al deshabilitarla.
Pero es una idea que habría que probar. :thinking:

Saludos

Estudia la librería OneWire.h usada para los botones Dallas que justamente son Salida en un momento y Entrada en otro.

Muchas gracias a todos; veré acerca de esta librería Surbyte.

como conclusiones de mi consulta: quisiera interceptar los datos del cable DATA+ y los del DATA- de mi Pc a mi Impresora y poder reflejarlos en un display. "algo así como una suerte de imaginario osciloscopio". Al interceptarlos solamente deseo verlos mientras mi impresora se comunica con mi pc.
Como dije antes verá la librería que me has recomendado. Un cordial saludo.

Pues creo que no, he montado en la protoboar un pulsador en pull_down y un led al mismo pin y con este codigo

void setup() {
  Serial.begin (9600);
   pinMode(4,OUTPUT);
}
void loop() { 
  digitalWrite (4, HIGH);
  Serial.print (digitalRead (4));
  delay(500);
  digitalWrite (4, LOW);
  Serial.println (digitalRead (4));
  delay(500); 
}

es capaz de leer el "1" al pulsar el boton, mientras el led parpadea.
Poner el boton en pull_up no me atrevo, creo que en eso tienes razon y habria un corto.
Como lo tengo montado voy ha seguir haciendo "perrerias" al pin, si saco algo en claro lo publico.
Saludos.

No me lo discutas a mi, discúteselo a Atmel y/o Microchip. :wink:

Saludos

Gracias hermano; por tomarte este tiempo en mi. (lo agradezco).
Con respecto a tu propuesta. no funcionaría para este caso.
El problema aquí es que (según la web) nadie a intentado "interceptar" los datos que van y vienen por los cables DATA+ y DATA-.
Dicho esto, este problema que me he planteado es; "ver un trafico de comunicación" entre Pc e impresora. es un modo de aprender a dominar esta comunicación" con ayuda de mi arduino". quiero "ver" lo que va y viene por estos dos cables. Es por eso que no debo podemos intervenir demasiado.
Es por eso que mi intensión es "meterme" en ese cable y ver que pasa por dentro. NO, repito NO... como un osciloscopio si no solo verlos pasar.
Ej. Imaginario
Corto el cable por la mitad el extremo de la pc lo conecto al pin 6 y lo saco por el pin 5 hacia el cable que va a la impresora.
ahora lo que va por el 6 lo mando al pin A4, A5 donde lo espera un display y de ahí lo manda por el 6 a la impresora.
Por que hacerlo? Eso es el desafío. porque si lográsemos verlo (de este modo) alteraríamos la posibilidad del MUX, DEMUX y copiar esa trama y enviarla a otra impresora por ejemplo conectada en paralelo.
¿y para que demonios? Emm. no tengo la mas mínima idea. Solo hacerlo es el desafío. Un cordial saludo.

No te va a dar la velocidad del micro para lo que quieres hacer (tal vez llegues a poder ver algo en USB 1.0 y 1.1), creo que mínimo tendrías que pensar en un SMT32.

Saludos

gracias gatul. Mira no tenés una idea de las locuras que hice en estos días y todo anduvo muy bien; lo que me permite decir que los baudios; no son un problema.

como te explico a ver:
la impresora anduvo más lenta que de costumbre, pero anduvo muy bien
en una placa soldé (en ambos extremos los conectores USB AyB) entre ellos cuatro cables con un Led cada uno con R 270ohm y GND común a todos y anduvo muy bien.
Dicho esto los led (a la vista humana) no logré ver los ceros y los uno; solo se veían encendidos. pero todo anduvo.
Este primer experimento me permitió pensar en intervenir con arduino.
Pero como dije antes Los baudios no son un problema.

Claro, los baudios de la comunicación con la impresora no son el problema, el problema es que USB tiene un rango de transferencia de 1.5 Mbps hasta 20 Gbps (según sea 1.x, 2.x o 3.x).
En este caso particular seguramente va bárbaro, yo pensaba que estabas haciendo un "monitor" más general.

Por otro lado, llegado el caso, el tema del parpadeo de los LEDs (para que sean más visibles) lo puedes resolver con contadores, por ejemplo, cuentas los 1's y llegado a X valor enciendes el LED que corresponda, por otro lado cuentas los 0's para llegado a Y valor lo apagas.
En resumen, sería como un divisor de frecuencia.

Saludos

Aja! correcto.
Todos te muestran la trama con osciloscopio. Bueno barbaro por ellos.

Pero por un instante pensemos que gracias a este desafío lograremos cosas locas como por ejemplo:

  • 1 pagina de word a dos o más impresoras (Claro misma marca y modelo).
  • grabar la trama completa y determinar a que hora imprimirla
    O sea dominar esa trama (significa) poder conservarla y usarla cuando yo quiera.
  • volvamos a la impresora modificar la cabeza de la trama y logramos imprimir en dos, repito DOS impresora de distinta marca.
    todavía no tengo idea para qué hacerme tanto lío; pero creo que al no estar propuesto en la web podría servirle a alguien algún día.

Bueno para ayudarte un poco la librería OneWire.h usa esto

#define DIRECT_MODE_INPUT(base, pin)    pinMode(pin,INPUT)
#define DIRECT_MODE_OUTPUT(base, pin)   pinMode(pin,OUTPUT)

y mira como lo usa

uint8_t OneWire::read_bit(void)
{
	IO_REG_TYPE mask IO_REG_MASK_ATTR = bitmask;
	volatile IO_REG_TYPE *reg IO_REG_BASE_ATTR = baseReg;
	uint8_t r;

	noInterrupts();
	DIRECT_MODE_OUTPUT(reg, mask);  // <== lo pone como salida con máscara de bits
	DIRECT_WRITE_LOW(reg, mask);        // <== escribe el bit
	delayMicroseconds(3);
                                                                        // <== lo pone como entrada
	DIRECT_MODE_INPUT(reg, mask);	// let pin float, pull up will raise
	delayMicroseconds(10);                      // le da un tiempo
	r = DIRECT_READ(reg, mask);              // lee el bit
	interrupts();
	delayMicroseconds(53);
	return r;
}

Te lo he explicado pero eso no dista mucho de hacerlo directamente como has preguntado.

foro
Hola chicos; Espero que esta imagen muestre la seriedad con la que estoy tomando este tema. Me esta permitiendo comprender fundamentalmente las palabras "Protocolo de Comunicación" y sus diferencias.
Que puedo y que no puedo hacer. Hasta ahora (gracias a Dios) no he quemado ningún puerto de la Pc o el de la impresora.

Muchas gracias Surbyte. Luego de ver la Rutina que me has dejado, supe lo que sintió Noe cuando Dios le dijo "Hacete un barquito y meté una pareja de cada especie adentro. Fue así que Noe le preguntó ¿Aja y como los junto a todos? jajaja
Les cuento Lo que sintió Noe. Fue un sudor frio que le recorrió por toda la espalda.

Corto (imaginariamente) el cable a la mitad
Tengo el Pin 6 donde pongo DATA+ de la Pc y el pin 8 el mismo DATA+ que va a la Impresora
debo imaginar que esta rutina lee el pin 6 y lo que leí lo escribo en el pin 8

Creo que Dios "Surbyte" me esta diciendo eso. Me tomaré con calma a la librería y seguro que terminaré por comprender como usar la rutina propuesta.

Cuando termine esta locura en la que estoy les cuento como lo hice. Un cordial abrazo para todos!!! Gracias por estar siempre ahí Surbyte.

No, te mostró la rutina donde escribe y lee sobre el mismo pin.
Primero lo pone como salida y "envia" LOW.
Espera 3 useg y cambia el modo a entrada.
Espera 10 useg y lee el dato entrante.
Todo en el mismo pin (Los tiempos de espera, claramente, son los que especifica el protocolo)

Claramente es lo que dice @gatul porque fue lo que también yo entendí que querias hacer.
Sobre el mismo pin leer o escribir. No lo que dices ahora que tomas que lees el pin 6 y lo escribes en el pin 8.
Eso no requiere nada de lo que has preguntado o te mal entiendo.

Claro (ambos) como el agua, lo que ocurrió es que yo he cometido el error de mezclar mis objetivos. Primeros "interceptar" el hilo DATA+ / DATA- y visualizar lo que pasa por el cable. Uds. entendieron correctamente.
La confusión la armé yo al mencionar lo que aré luego de fijar esta 1ra etapa y es la de rescribirlo en otro pin. Ahí es cuando digo que si logro intervenir de este modo en la trama luego podré conservarla y hacer de ella una copia y mutarla a otra impresora (por Ej.)
Muchas gracias a ambos.
Justo anoche luego de "reevaluar" todo lo echo hasta ese momento. Decidí para esta semana "bajar mi vara de expectativas" comenzando de cero y sumando lo que UDS. me han explicado y enseñado.
un Cordial Saludo para todos!.

Fijate si te puede servir esta idea (Hago alguna presunciones que pueden ser erróneas, aclaro).

Supongo que el soft de impresión envía por usb datos serie, así como mandamos algo desde la consola al arduino.
Sabiendo cuál es el protocolo (eso debería figurar en el manual de cada impresora), me refiero a velocidad, paridad, etc., tranquilamente se podría setear el arduino para recibir esos datos por serial y luego reenviarlos.
Obviamente un Uno se quedaría corto porque habría que usar SoftwareSerial y encima doble ya que estarías haciendo un splitter.
Un Mega sería ideal, creo, ya que tiene 4 puertos serie por hardware, y agregando un par de conversores usb/ttl, podría funcionar.

Ojo, una idea muy "en el aire", pero que podría ser viable.

Saludos

Hola Gatul (Hermano). Gracias por tu consejos "todos".
Como expresé anteriormente (creo que me puse la vara muy alta) termine mezclando todo. Y me di cuenta cuando comencé esta tarde desde cero pero en lugar de porfiar con la impresora; bajé un cambio y puse un simple arduino NANO como un dispositivo al que quiero intervenir. Y al conectarle un simple conversor CP1202 hice agua. Por ello en lugar de arriesgar ("por prueba y error") a mi impresora opté por poner de "ratón de pruebas" a mi querido NANO V3.
Les cuento que mis primeras pruebas no logré leer Tx y Rx con el CP1202 una vez que pase este obstáculo vere como sigo. Te mando un cordial abrazo desde E. Ríos

Entiendo que el CP1202 es tu conversor USB to Serial TTL, ojo con la tensión de salida, lo puedes configurar en 5 o 3.3V pero ten cuidado porque se quema de nada. Ojalá tengas esos que tiene una llave para cambiar la tensión. El mío es una porquería y se cambia soldado un puente asi que lo dejé fijo en 3.3V que es para lo que lo quería.