Electrónica y Programación en Personal
«Si no se soluciona con un script en Python entonces no es viable»

por Yeison Cardona el 16 de febrero de 2012 a las 18:58 UTC
Ahora que tengo mi board de PIC32 Pinguino OTG y después de una lucha para conseguir que me compilara los programas para PIC32 lo primero que hice fue correr el siempre primer código: Blink.pde



Después quise correr el mismo Blink pero con Pynguino, es decir, mandando los comandos desde Python, y sorpresa!! el código no compilaba, la solución:

  • Eliminar todos los #include, no son necesarios.
  • Eliminar el #define para el RunLed, en PIC32 no funciona así.
  • Eliminar las líneas de código para la lectura y escritura de la EEPROM interna, en PIC32 no hay EEPROM interna, quien la necesita cuando podemos conectar una memoria SD?.
  • Y eliminar la línea de código sobre la función reset(), aún no estoy seguro de por qué? :)

Aquí está con el código con las modificaciones mencionadas, del lado del módulo en Python no es necesario modificar nada.
Supongo que mas tarde será agregado al paquete Pynguino.
// pynguino32

char *lectura[21];
char *lectura_interna[7];
unsigned char ranlg[5];
unsigned char eedatas[4];

int ciclico, cond, pin, value, i, eedatai, posicion,time;

void setup(){
 }
 
int leer_entero(){
 int entero;
 unsigned char valor_leido[21];
 unsigned char receivedbyte;
 int cond=1;
 while (cond){ 
  receivedbyte=CDC.read(valor_leido);
  valor_leido[receivedbyte]=0;
  if (receivedbyte>0) cond=0;}
 entero=atoi(valor_leido); 
 return entero;}

char* leer_cadena(){
 unsigned char valor_leido[21];
 unsigned char receivedbyte;
 int cond=1;
 while (cond){ 
  receivedbyte=CDC.read(valor_leido);
  valor_leido[receivedbyte]=0;
  if (receivedbyte>0) cond=0;}
 return valor_leido;}
 
char* leer_conectar(){
 unsigned char valor_leido[21];
 unsigned char receivedbyte;
 int cond=1;
 while (cond){ 
  receivedbyte=CDC.read(valor_leido);
  valor_leido[receivedbyte]=0;
  if (receivedbyte>0) cond=0;}
 return valor_leido;}

void loop(){

ciclico=1;
while (ciclico){
 *lectura=leer_conectar();
 if (strcmp(*lectura, "Pynguino")==0) ciclico=0;} 
CDC.print("Conectado",9);

while (1){

*lectura=leer_cadena();

if (strcmp(*lectura, "setup")==0){ 
 pin=leer_entero();
 *lectura_interna=leer_cadena();
 if (strcmp(*lectura_interna, "input")==0) pinMode(pin,INPUT);
 else if (strcmp(*lectura_interna, "output")==0) pinMode(pin,OUTPUT);}

else if (strcmp(*lectura, "read")==0){ 
 pin=leer_entero();
 *lectura_interna=leer_cadena();
 if (strcmp(*lectura_interna, "digital")==0){ 
  if (digitalRead(pin)==0) CDC.print("0",1);
  else if (digitalRead(pin)==1) CDC.print("1",1);}
 else if (strcmp(*lectura_interna, "analog")==0){ 
  value=analogRead(pin);
  itoa(value, ranlg, 10);
  CDC.print(ranlg,5);}}

else if (strcmp(*lectura, "write")==0){
 pin=leer_entero();
 *lectura_interna=leer_cadena();
 if (strcmp(*lectura_interna, "digital")==0){
  value=leer_entero();
  digitalWrite(pin,value);}
 else if (strcmp(*lectura_interna, "analog")==0){ 
  value=leer_entero();
  analogWrite(pin,value);}}

else if (strcmp(*lectura, "allOutput")==0){
 for (i=0;i<=17;i++){
  pinMode(i,OUTPUT);
  digitalWrite(i,LOW);}}

else if (strcmp(*lectura, "allInput")==0){
 for (i=0;i<=17;i++)
  pinMode(i,INPUT);}

else if (strcmp(*lectura, "allHigh")==0){
 for (i=0;i<=17;i++){
  pinMode(i,OUTPUT);
  digitalWrite(i,HIGH);}}

else if (strcmp(*lectura, "allLow")==0){
 for (i=0;i<=17;i++){
  pinMode(i,OUTPUT);
  digitalWrite(i,LOW);}}
}}
Del lado de Python simplemente tenemos...
#!/usr/bin/env python
#-*- coding: utf-8 -*-

from pynguino import PinguinoProcessing
from time import sleep as delay

pinguino32 = PinguinoProcessing()
pinguino32.RecursiveConect()
pinguino32.pinMode(13, "output")

while (True):
    pinguino32.digitalWrite(13, "high")
    delay(0.1)
    pinguino32.digitalWrite(13, "low")
    delay(0.1)

También podría interesarte:

Comentarios:
mauricio dijo:
abr. 8, 2013, 6:24 p.m.
amigo quiero probar el pinguino en una arquitectura de 32bits pero el problema es que las boards no son muy faciles de conseguir asi que quiero saber si me puede ayudar con ese aspecto. en la busqueda de la board encontre esta en dynamo http://www.dynamoelectronics.com/dynamo-tienda-virtual.html?page=shop.product_details&flypage=dynamo.tpl&product_id=983&category_id=81 la cual tiene un pic con el que se mota otra board diseñada especialmente para pinguino y quiero saber si funcionara sin problemas gracias por la ayuda
Responder a mauricio
Respuesta de Yeison Cardona:
abr. 8, 2013, 11:05 p.m.
Un saludo Mauricio
No, la ChipKit no es compatible con Pinguino, Microchip (desarrolladores de chipkit) dicen que es 100% compatible con Arduino, pero eso tampoco es cierto, Yo les he hablado a los señores de Dynamo sobre lo interesante que sería que trajeran tarjetas Pinguino, pero parece que no les gusta.
Lastimosamente sólo nos queda dos opciones Olimex Chile y Olimex Bulgaria para realizar compras. Hasta pronto.
Responder a Yeison Cardona
Añadir un nuevo comentario:
Si desean una respuesta para su comentario sólo deben agregarme en G+ y hacer una mención a Yeison Cardona, así les podré responder lo antes posible.