Pages: [1]   Go Down
Author Topic: Escribir Binario fácil  (Read 2278 times)
0 Members and 1 Guest are viewing this topic.
Lanus
Offline Offline
Newbie
*
Karma: 0
Posts: 18
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola, necesito para controlar una fuente de corriente digital. Para eso quiero escribir un número via serial y que un arduino mega me lo escriba digitalmente: ejemplo si el serial dice 1 quiero que mi salida en 10 puertos digitales sea LOW LOW LOW....HIGH, si dice 2 LOW LOW..... HIGH LOW y así para cualquier número. ¿Hay alguna forma de hacer esto sin escribir las tediosas divisones necesarias para pasar un número a binario? Leí http://www.arduino.cc/playground/Code/BitMath pero no me quedó del todo claro qué código usar.


Gracias
Logged

Onda
Offline Offline
Jr. Member
**
Karma: 0
Posts: 91
This is personal...
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Creo que no te he entendido del todo... ¿tu quieres pasar un numero (del 1 al 10) por el puerto serie y que ponga en HIGH el pin digital que corresponde a ese numero? Eso no es binario, es simplemente asignar una salida al numero que le pasas.

Lo que explicas sería algo similar a esto
Code:
int vectorSalidas[] = {1,2,3,4,5,6,7,8,9,10}; //asignar numero de pin

void setup()
{
  for (int i = 0; i < 10; i++) {
    pinMode(vectorSalidas[i], OUTPUT);
  }
  Serial.begin(9600);
}

void loop(){
if (Serial.available() > 0)
    {
      int inByte = Serial.read();
      switch (inByte)
      {
        case '1':   
          pines(1);
          break;
       case '2':   
          pines(2);
          break;
       case '3':   
          pines(3);
          break;
       case '4':   
          pines(4);
          break;
       case '5':   
          pines(5);
          break;
       case '6':   
          pines(6);
          break;
       case '7':   
          pines(7);
          break;
       case '8':   
          pines(8);
          break;
       case '9':   
          pines(9);
          break;
      default:
          pines(10);
          break;
      }
    }
}


void pines(int pin)
{
  for (int i= 0; i<10; i++)
  {
      vectorSalidas[i] = LOW;
  }
  vectorSalidas[pin%10] = HIGH;
}

Logged

---
Saludos,
José Chorva
www.pepechorva.com
@pepechorva on twitter

Lanus
Offline Offline
Newbie
*
Karma: 0
Posts: 18
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

No, no. Quizas no me exprese bien, yo quiero escribir cualquier numero entre 0 y (2 a la N)-1, en binarios con N igual al numero de bits q tenga. Por eso decia de pasarlo a binario. Quizas hay algun metodo para escribir un numero cualquiera en binario sin hacer las divisiones.
Logged

Lanus
Offline Offline
Newbie
*
Karma: 0
Posts: 18
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

osea lo digo de nuevo si escribo 1 quiero tener LOW LOW LOW.... HIGH si escribo en el serial 2 a la N -1 quiero HIGH HIGH HIGH.... HIGH, para cualquier numero entero en el rango
Logged

Lanus
Offline Offline
Newbie
*
Karma: 0
Posts: 18
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Dicho de otra forma mas quiero un traductor a binario, con entrada por serial y salida digital.
Logged

Madriz
Offline Offline
Full Member
***
Karma: 0
Posts: 176
Glober Arduiner
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

creo que buscas esto_

http://www.arduino.cc/en/Reference/PortManipulation
Logged

Lanus
Offline Offline
Newbie
*
Karma: 0
Posts: 18
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Si busco eso no me doy cuenta como usarlo.

Habia pensado guardar la lectura del serial en un entero llamado numero, y despues la salida del bit menos significativo sera Bitread(numero,0)
Entonces deberia poder escribir algo como digitalWrite(pin del menos significativo, Bitread(numero,0)) no se si interpreta HIGH como 1, pero se debe poder hacer algo asi.

Escucho ofertas
Logged

Spain
Offline Offline
Full Member
***
Karma: 0
Posts: 191
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Si lo he entendido, creo que lo que quieres es pasar un número por puerto serie, convertirlo en binario y poner en alto los puertos correspondientes a los unos de ese número en binario:

Puerto serie = "38" o 38 (no queda claro)
Número binario = 0010.0110

Si utilizas 8 puertos (númerados de P0 a P7):
(0) P0=LOW
(1) P1=HIGH
(1) P2=HIGH
(0) P3=LOW
(0) P4=LOW
(1) P5=HIGH
(0) P6=LOW
(0) P7=LOW

Primero de todo, tienes que tener en cuenta si por el puerto serie vas a recibir 38 o "38", es decir un byte o varios carácteres ascii que forman un número decimal, para hacer la conversión correspondiente a byte del valor en el arduino.

Después, una vez que tienes el valor en byte (ya lo tienes en binario), utilizar máscaras para ver que bits están en alto, en la forma:
Code:
#define MASK_1  1  // en binario 0000.0001
#define MASK_2  2  // en binario 0000.0010
#define MASK_4  4  // en binario 0000.0100
#define MASK_8  8  // en binario 0000.1000
#define MASK_16 16  // en binario 0001.0000
...
  if(numeroRecibido & MASK_1) // Comparación bit a bit
    digitalWrite(pin1, HIGH);
  else
    digitalWrite(pin1, LOW);
 
  if(numeroRecibido & MASK_2) // Comparación bit a bit
    digitalWrite(pin2, HIGH);
  else
    digitalWrite(pin2, LOW);
...
Logged

Lanus
Offline Offline
Newbie
*
Karma: 0
Posts: 18
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

GRACIAS A TODOS, Jorge me has solucionado la vida! (en argentino sería "me solucionaste")

Saludos
Logged

Pages: [1]   Go Up
Jump to: