Mostrando entradas con la etiqueta Pinguino Processing. Mostrar todas las entradas
Mostrando entradas con la etiqueta Pinguino Processing. Mostrar todas las entradas

martes, 18 de marzo de 2014

Processing con Pinguino X4

Processing con Pinguino X4

En el blog tengo publicaciones previas de como interactuar con la tarjeta Pinguino desde Processing, pero el código correspondiente a la tarjeta Pinguino, ya no es compatible con el nuevo IDE X4, por lo cual al compilarlo generara errores.
La librería correspondiente a Processig sigue siendo la misma y sigue operando bien para la versión actual de Processing.

USB Processing Código Para Pinguino X4

Este código corresponde al modo de operación de comunicación modo Bulk tal como esta para la nueva versión del IDE de programación del la tarjeta Pinguino que tiene instrucciones diferentes para la lectura y escritura.
El siguiente código se probo con un microcontrolador 18f4550 con el bootloader versión 2.12
La conexión la probé desde GNU/Linux con Ubuntu



//Por: Julio Fabio De La Cruz G. 2014
//http://micropinguino.blogspot.com 
//Adaptacion a pinguino X4 para emplear la libreria usbprocessing
//Basado en el trabajo de Stéphane Cousot, Jean-Pierre Mandon y Douglas Edric Stanley.
int i;
int temp;
u8 receivedbyte;
char rbuffer[64];
char sbuffer[2];
void setup(){
    TRISB=0;
    for(i=8;i<=12;i++)
        pinMode(i,INPUT);  
    for(i=21;i<=28;i++)
        pinMode(i,INPUT);
}
void loop(){
    receivedbyte=0;
    if(BULK.available()) 
        do {
            receivedbyte = BULK.read(rbuffer);
        } while (receivedbyte == 0);
    rbuffer[receivedbyte] = 0;
    if (receivedbyte > 0){
      if(rbuffer[0]=='+'){
        if (rbuffer[1]=='C')
            PORTB=0;
        if(rbuffer[1]=='W'){
            if(rbuffer[2]=='D')
                digitalWrite(rbuffer[3],rbuffer[4]);
            if(rbuffer[2]=='A'){
                temp=rbuffer[4]+(rbuffer[5]*256);
                analogWrite(rbuffer[3], temp );
            }
        }
        if(rbuffer[1]=='R'){
            if(rbuffer[2]=='D'){
                sbuffer[0]=digitalRead(rbuffer[3]);
                BULK.write(sbuffer[0], 1);
            }
            if(rbuffer[2]=='A'){
                temp=analogRead(rbuffer[3]);
                sbuffer[0]=temp;
                sbuffer[1]=temp/256;
                BULK.write(sbuffer, 2);
            }
        }
      }
    }
}

domingo, 22 de mayo de 2011

Plantilla en Processing para sistemas secuenciales con diagramas de estado

Esta es una plantilla para programar un sistema secuencial con processing utilizando pinguino y processing.
con pinguino obtengo las estradas digitales para generar las transiciones entre estados y a su vez generar las salidas digitales que controlan el proceso.
La plantilla esta realizada para 4 estados y dos entradas digitales.
Las salidas y los cambios de estado se realizan sengun el problema


/*=========================================================================
  Librerias
     import hypermedia.pinguino.*;
        Llamo la libreria para trabajar con la plataforma pinguino
     Pinguino pinguino;
        Creo el objeto pinguino
  Variables
===========================================================================*/
import hypermedia.pinguino.*;
Pinguino pinguino;
/*=========================================================================*/
//variable que monitorea los estados
int nEstado;
//los nombres de los estados
int nEstadoA,nEstadoB,nEstadoC,nEstadoD;
//las entradas
int nSensor0,nSensor1,nSensor2,nSensor3,nSensor4;
// variables donde se guardan los bits capturados
int bit0,bit1,bit2,bit3,bit4;
void setup(){
  size(400,200);
  Pinguino.log( true );              
  pinguino = new Pinguino( this );
  //Doy valores para identificar los estados
  nEstadoA=0;
  nEstadoB=1;
  nEstadoC=2;
  nEstadoD=3;
  //Indico los terminales de pinguino como entradas digitales
  //los terminales 8,9,10,11,12 de pinguino
  nSensor0=8;
  nSensor1=9;
  nSensor2=10;
  nSensor3=11;
  nSensor4=12;
  //Inicio en el estado A
  nEstado=nEstadoA;
}
void draw(){
   //leo las entradas digitales
   bit0 = pinguino.digitalRead(nSensor0);
   bit1 = pinguino.digitalRead(nSensor1);
   bit2 = pinguino.digitalRead(nSensor2);
   bit3 = pinguino.digitalRead(nSensor3);
   bit4 = pinguino.digitalRead(nSensor4);
   //obtengo el valor digital equivalente de las entradas digitales
   dato = bit4*16 + bit3*8 + bit3*2 + bit1*2 + bit0;
   println("Dato de entrada es " + dato);


  //verifico si esta en el estado A
  if (nEstado==nEstadoA){
    //verifico las condiciones para las entradas que ocasionan cambio
    //de estado como ejemplo se tiene los valores de entrada 0,1,2,3
    //para evaluar solo dos sensores, el sensor0 y el sensor1
    println("Estado A");
    if(dato==0){


    }
    if(dato==1){


    }
    if(dato==2){


    }
    if(dato==3){


    }
  }//fin del estado A


  //verifico si esta en el estado B  
  if (nEstado==nEstadoB){
    println("Estado B");
    if(dato==0){


    }
    if(dato==1){


    }
    if(dato==2){


    }
    if(dato==3){


    }
  }//fin del estado B


  //verifico si esta en el estado C  
  if (nEstado==nEstadoC){
    println("Estado C");
    if(dato==0){


    }
    if(dato==1){


    }
    if(dato==2){


    }
    if(dato==3){


    }
  }//fin del estado C


  //verifico si esta en el estado D  
  if (nEstado==nEstadoD){
    println("Estado D");
    if(dato==0){


    }
    if(dato==1){


    }
    if(dato==2){


    }
    if(dato==3){


    }
  }//fin del estado D


}

sábado, 21 de mayo de 2011

Obtener el equivalente digital de varias entradas análogas

Podemos utilizar varias entradas análogas como binarias y obtener el dato digital equivalente a estas entradas.



/*************************************************************************
*Manejo de la plataforma pinguino                                        * 
*Autor:                                                             *
*           Julio Fabio De La Cruz Gomez                                 *
*                                                                        *
*Ejemplo 013: Entradas Digitales y analogas                              *
*                                                                        *
*Descripcion:                                                            *
*            Como utilizar las entradas analogas como digitales          *
*            y obtener el equivalente decimal                            *
**************************************************************************/


import hypermedia.pinguino.*;
Pinguino pinguino;


int an0,an1,an2,an3,an4,an5,an6,an7;
int bit0,bit1,bit2,bit3,bit4,bit5,bit6,bit7;
int dato;
void setup(){
    Pinguino.log( true );              
    pinguino = new Pinguino( this );  
}
/*=========================================================================
  Ciclo principal
        Los terminales configurados como entradas analogas son 13,14,15,16,
        17,18,19,20
        El ADC es de 10 bits asi que los valores leidos van de 0 - 1023
        Los valores de voltaje van de 0v - 5v
        Un 1 Logico corresponde aproximadamente a 5V
        Un 0 Logico corresponde aproximadamente a 0v
        Un valor leido mayor a 700 corresponderia a un 1 logico, de lo
        contrario en un 0 logico.
 ===========================================================================*/
 void draw(){
  an0=pinguino.analogRead(13);
  an1=pinguino.analogRead(14);
  an2=pinguino.analogRead(15);
  an3=pinguino.analogRead(16);
  an4=pinguino.analogRead(17);
  an5=pinguino.analogRead(19);
  an6=pinguino.analogRead(19);
  an7=pinguino.analogRead(20);
  // Obtengo el bit 0  
  if(an0 > 700)
    bit0 = 1;
  else
    bit0 = 0;
  // Obtengo el bit 1     
   if(an1 > 700)
    bit1 = 1;
  else
    bit1 = 0;
  // Obtengo el bit 2     
  if(an2 > 700)
    bit2 = 1;
  else
    bit2 = 0;
  // Obtengo el bit 3     
   if(an3 > 700)
    bit3 = 1;
  else
    bit3 = 0;
  // Obtengo el bit 4     
  if(an4 > 700)
    bit4 = 1;
  else
    bit4 = 0;
  // Obtengo el bit 5     
   if(an5 > 700)
    bit5 = 1;
  else
    bit5 = 0;
  // Obtengo el bit 6     
  if(an6 > 700)
    bit6 = 1;
  else
    bit6 = 0;
  // Obtengo el bit 7     
   if(an7 > 700)
    bit7 = 1;
  else
    bit7 = 0;
   //obtengo el equivalente decimal de los datos leidos 
   dato = bit4*16 + bit3*8 + bit3*2 + bit1*2 + bit0; 
   println("Dato = " + dato); 
 }

Como convertir la entradas digitales a su equivalente decimal

Con la libreria diseñada para operar a pinguino desde processing se obtienen los valores digitales uno a la vez,
pero quizá sea útil en la aplicación obtener el dato equivalente de las entradas digitales, en este ejemplo se toman las entradas digitales y se obtiene su equivalente en decimal.

 /*************************************************************************
*Manejo de la plataforma pinguino                                        * 
*Autor:                                                             *
*           Julio Fabio De La Cruz Gomez                                 *
*                                                                        *
*Ejemplo 011: Entradas Digitales                                         *
*                                                                        *
*Descripcion:                                                            *
*            Convertir las entradas digitales en su equivalente decimal  *
**************************************************************************/

import hypermedia.pinguino.*;
Pinguino pinguino;

int bit0,bit1,bit2,bit3,bit4;
int dato;
void setup(){
    Pinguino.log( true );              
    pinguino = new Pinguino( this );  
}
/*=========================================================================
  Ciclo principal
        Los terminales configurados como entradas digitales son 8,9,10,11,12
        Para obtener el dato digital sumo las multiplicaciones del dato
        digital leido por su correspondiente potencia de 2
        la relacion que convierte el dato binario a su equivalente decimal es:
        dato = bit4*16 + bit3*8 + bit3*2 + bit1*2 + bit0;
 ===========================================================================*/
 void draw(){
   bit0 = pinguino.digitalRead(8);
   bit1 = pinguino.digitalRead(9);
   bit2 = pinguino.digitalRead(10);
   bit3 = pinguino.digitalRead(11);
   bit4 = pinguino.digitalRead(12);
   dato = bit4*16 + bit3*8 + bit3*2 + bit1*2 + bit0;
   println("Dato = " + dato); 
 }

martes, 26 de abril de 2011

Archivos De Pinguino Para Windows

En esta carpeta están los instaladores de Pinguino para windows 7, el Pinguino beta 9-05, processing-1.2.1, algunas imágenes del montaje de la plaqueta, la carpeta Pinguino con processing y algunos manuales (2 hechos por el profesor Julio Fabio De La Cruz y 2 manuales hechos por mi).

Link de descarga de la carpeta http://www.megaupload.com/?d=33QK583X

Si de pronto los links de los archivos que he subido se rompe o no funcionan déjenme un comentario con mucho gusto lo arreglo .