Show Posts
Pages: [1]
1  International / Software / Error de libreria de ArduSnake on: March 08, 2014, 05:55:53 pm
Hola a todos, recientemente me he impreso un hexapodo y estoy utilizando la libreria  de Juan Gonzalez (obijuan)
El caso es que cuando intento compilar uno de los ejemplos  me aparece un error en el include oscillador.h
Antes de poner este post he estado mirando por todos los sitios para buscar el error.

In file included from hexapodFullDemo.ino:13:
C:\Users\Paco\Documents\Arduino\libraries\ArduSnake/Oscillator.h:8:19: warning: extra tokens at end of #ifndef directive
C:\Users\Paco\Documents\Arduino\libraries\ArduSnake/Oscillator.h:9:19: warning: missing whitespace after the macro name
In file included from hexapodFullDemo.ino:13:
C:\Users\Paco\Documents\Arduino\libraries\ArduSnake/Oscillator.h:18: error: expected identifier before '.' token
C:\Users\Paco\Documents\Arduino\libraries\ArduSnake/Oscillator.h:18: error: expected unqualified-id before '.' token

el programa es:

//--------------------------------------------------------------
//-- MicroHexapod controller example http://www.thingiverse.com/thing:34796
//--
//-- Uses the ArduSnake oscillator library by Juan Gonzalez-Gomez
//-- https://github.com/Obijuan/ArduSnake
//-----------------------------------------------------------
//-- Layer: Oscillator
//------------------------------------------------------------
//-- Example of use of the Oscillator layer
//--
//-- MOD Example 5: A mini-wave is used for the locomotion of
//-- a three modules worm robot
//--------------------------------------------------------------
//-- (c) Carlos Garcia-Saura (Carlosgs), November-2012
//-- CC-BY-SA license
//--------------------------------------------------------------
#include <Servo.h>
#include <Oscillator.h>

//-- Declare the oscillators
Oscillator osc_middle, osc_right, osc_left;

//-- Global parameters for the oscillators
const int A=30; // Amplitude (higher -> longer steps) set 10-40
const int T=1000; // Period (lower -> faster moves)

void setup()
{
  delay(1000); // Small startup delay, replace with start-button press (if present)
 
  //-- Attach the oscillators to the servos
  osc_middle.attach(2); // 2,3 and 4 are the digital pins
  osc_right.attach(3);
  osc_left.attach(4);
 
  //-- Set the parameters
  osc_middle.SetO(-17); // Correction for the offset of the servos
  osc_right.SetO(-20);
  osc_left.SetO(0);
 
  osc_middle.SetA(5); // Middle motor needs a small amplitude (5-10)
  osc_right.SetA(A);
  osc_left.SetA(A);
 
  osc_middle.SetT(T); // Set the period of work
  osc_right.SetT(T);
  osc_left.SetT(T);
 
  //-- Refresh the oscillators
  osc_middle.refresh();
  osc_right.refresh();
  osc_left.refresh();

  //-- Set the phase difference
  //-- This defines the type of movement the robot makes
  osc_middle.SetPh(DEG2RAD( 90 ));
  osc_left.SetPh(  DEG2RAD( 0 ));
  osc_right.SetPh( DEG2RAD( 0 )); // For example, putting 180 here will make the robot spin clockwise

}

void loop()
{
  //-- Refresh the oscillators
  osc_middle.refresh();
  osc_right.refresh();
  osc_left.refresh();
}


y el archivo Oscillator.h es
//--------------------------------------------------------------
//-- Oscillator.pde
//-- Generate sinusoidal oscillations in the servos
//--------------------------------------------------------------
//-- (c) Juan Gonzalez-Gomez (Obijuan), Dec 2011
//-- GPL license
//--------------------------------------------------------------
#ifndef Oscillator_h
#define Oscillator_h
#endif
#include <Servo.h>

//-- Macro for converting from degrees to radians
#ifndef DEG2RAD
#define DEG2RAD(g) ((g)*M_PI)/180
#endif

class Oscillator
{
  public:
    Oscillator(){};
    void attach(int pin, bool rev =false);
   
    void SetA(unsigned int A) {_A=A;};
    void SetO(unsigned int O) {_O=O;};
    void SetPh(double Ph) {_phase0=Ph;};
    void SetT(unsigned int T);
    void Stop() {_stop=true;};
    void Play() {_stop=false;};
    void Reset() {_phase=0;};
    void refresh();
   
  private:
    bool next_sample(); 
   
  private:
    //-- Servo that is attached to the oscillator
    Servo _servo;
   
    //-- Oscillators parameters
    unsigned int _A;  //-- Amplitude (degrees)
    unsigned int _O;  //-- Offset (degrees)
    unsigned int _T;  //-- Period (miliseconds)
    double _phase0;   //-- Phase (radians)
   
    //-- Internal variables
    int _pos;         //-- Current servo pos
    double _phase;    //-- Current phase
    double _inc;      //-- Increment of phase
    double _N;        //-- Number of samples
    unsigned int _TS; //-- sampling period (ms)
   
    long _previousMillis;
    long _currentMillis;
   
    //-- Oscillation mode. If true, the servo is stopped
    bool _stop;

    //-- Reverse mode
    bool _rev;
};

#endif

Ardusnake la tengo puesta en la libreria

Gracias de antemano

2  International / Software / Re: Recuperar sketch Arduino on: February 13, 2013, 05:14:05 am
Supongo que Atmel (Micro de arduino)  puede que proporcione alguna herramienta para ver el codigo HEXADECIMAL cargado en el arduino. Pero siempre será en HEXADECIMAL, y en todo caso el te dara en base al codigo que ha leido de Arduino el programa equivalente.. pero OJO en ENSAMBLADOR  y sin etiquetas  , la depuracion correria por tu cuenta
En los PIC'S de Microchip (MPLAB) funcionan así y creo que los micros de ATMEL (el nucleo de arduino) no sea muy diferente
(ATMELStudio)
3  International / Software / Re: Funcion para convertir un String en double o float on: February 12, 2013, 02:47:40 pm
Bueno ya he acabado parte del proyecto de iniciacion
Basicamente es hacer una calculadora con arduino, de momento solo hace operaciones básicas, pues el teclado que tengo es Hexadecimal, pero para ir empezando no esta mal. Gracias Curro por tu ayuda...
Aqui os dejo el programa para quien quiera utilizarlo, y agradeceria cualquier onsejo para optimizarlo.


Quote
// librerias que vamos a utilizar

#include <Keypad.h>
#include <LiquidCrystal.h>

//inicializacion del lcd
LiquidCrystal lcd(5,4,3,2,1,0);

// Inicializacion teclado
const byte Columnas = 4;
const byte Filas = 4;
byte Pines_Filas[Filas] = {13,12,11,10};
byte Pines_Columnas[Columnas] = {9,8,7,6};
// Mapa teclado
char mapa [Filas][Columnas] = {
  {'+','-','X','/'},
  {'=','9','6','3'},
  {'0','8','5','2'},
  {'.','7','4','1'}
};
int i=0;
String operador="";
String operador1="";
String operador2="";

char operacion;
char tecla;
float numero1;
double memoria;
double resultado;
// Creamos el objeto tecla
Keypad teclado =Keypad (makeKeymap(mapa),Pines_Filas,Pines_Columnas,Filas,Columnas);



// inicializacion
void setup()

  //Serial.begin(9600);
  lcd.begin(20,4);
}


//inicio del programa

void loop()
{
  lcd.setCursor(1,1);      //Presentacion de la calculadora
  lcd.print("Caculadora by Paco");
  delay(3000);
  lcd.clear();       // Pasado 3 seg, se limpia la calculadora
   
  int i =0;
  lcd.setCursor(1,1);
  do
  {
    tecla = teclado.getKey(); //escaneamos tecla
    switch(tecla)        //construimos los operadores o la operacion segun el caso         
    {
      case ('.'):
        lcd.print(".");
        operador +='.';
        break;
       
      case ('+'):
        lcd.print(" + ");
        intercambio();
        operacion='+';   
        i=0;
        break;
       
       case ('-'):
        lcd.print(" - ");
        intercambio();
        operacion='-';   
        i=0;
        break;
       
      case ('X'):
        lcd.print(" X ");
        intercambio();
        operacion='X';
        break;
       
      case ('/'):
        lcd.print(" / ");
        intercambio();
        operacion='/';
        break;
       
      case ('='):
         lcd.print (" = ");
         tecla = NO_KEY;
         
          switch(operacion) //segundo bucle case esta vez es para realizar la operacion
          { 
            case ('+'):
           
            //numero1 = atof(operador1);
            resultado = StrToDouble(operador1) + StrToDouble(operador);
            break;
           
            case ('-'):
            resultado = StrToDouble(operador1) - StrToDouble(operador);
            break;
           
            case('X'):
            resultado = StrToDouble(operador1) * StrToDouble(operador);
            break;
           
            case('/'):
            resultado = StrToDouble(operador1) / StrToDouble(operador);
            break; 
          }
         
          operador="";
          operador1="";
          lcd.setCursor(1,3);
          lcd.print(resultado,6);
          do
          {
            tecla=teclado.getKey();
          }while (tecla==NO_KEY);
         
          lcd.clear();
          lcd.begin(1,1);
        break;
         
      case (NO_KEY): //Si la tecla no ha sido pulsada salimos
           break;
           
      default:
       
        lcd.print(tecla);
        operador += tecla;
        break;
       
       
    }
   
  }while(tecla |='f');
  //Bucle sin fin
 
 
}

void intercambio()
{
    tecla=NO_KEY;
    operador1=operador;
    operador="";
}


double StrToDouble(String Texto)
{
   char cadena[Texto.length()+1];
   Texto.toCharArray(cadena, Texto.length()+1);
   double myFloat = atof(cadena);
   return myFloat;
}
4  International / Software / Re: Funcion para convertir un String en double o float on: February 11, 2013, 06:19:02 am
Muchisimas gracias!!! , Googleando por Internet encontre informacion bastante confusa, algunas paginas comentaban que se podia utilizar atof directamente y otros que no estaba implemantada la funcion.
Sobre detractores y segidores, depende mucho del mundo del que vengas, y que es lo que busques, pero creo que sin estas en el inicio (aunque tengas bases en la programacion), mejor empezar programando el codigo estructurado y ordenado,  y mas tarde segun, cojas experiencia ir optimizandolo.

Cuando acabe el programilla lo cuelgo por aqui (quiero implementarle unas cuantas funciones mas), para que  los que empezamos en este mundillo lo puedan utilizar como ejemplo

Gracias otra vez
 smiley
5  International / Software / Re: Funcion para convertir un String en double o float on: February 08, 2013, 07:11:31 am
Aqui os dejo el programa mas depurado.. pero sigo sin encontrar una funcion que me haga la conversion
he intentado  con resultado = atol(operador1)  ( +-X / )  atol(operador) pero me da error:


// librerias que vamos a utilizar

#include <Keypad.h>
#include <LiquidCrystal.h>
#include <stdlib.h>
//inicializacion del lcd
LiquidCrystal lcd(12,11,5,4,3,2);

// Inicializacion teclado
const byte Columnas = 4;
const byte Filas = 4;
byte Pines_Filas[Filas] = {13,12,11,10};
byte Pines_Columnas[Columnas] = {9,8,7,6};
// Mapa teclado
char mapa [Filas][Columnas] = {
  {'7','8','9','/'},
  {'4','5','6','X'},
  {'1','2','3','-'},
  {'.','0','=','+'}
};
int i=0;
String operador="";
String operador1="";
String operador2="";
char operacion;
char tecla;
long numero1;
long resultado;
// Creamos el objeto tecla
Keypad teclado =Keypad (makeKeymap(mapa),Pines_Filas,Pines_Columnas,Filas,Columnas);



// inicializacion
void setup()

  Serial.begin(9600);
}


//inicio del programa

void loop()
{
  int i =0;
  do
  {
    tecla = teclado.getKey();
    switch(tecla)
    {
      case ('.'):
        operador +='.';
        break;
       
      case ('+'):
        Serial.print(" + ");
        intercambio();
        operacion='+';   
        i=0;
        break;
       
       case ('-'):
        Serial.print(" - ");
        intercambio();
        operacion='-';   
        i=0;
        break;
       
      case ('X'):
        Serial.print(" X ");
        intercambio();
        operacion='X';
        break;
       
      case ('/'):
        Serial.print(" / ");
        intercambio();
        operacion='/';
        break;
       
      case ('='):
          Serial.print (" = ");
         tecla = NO_KEY;
         
          switch(operacion)
          { 
            case ('+'):
            resultado = operador1.toInt() + operador.toInt();
            break;
           
            case ('-'):
            resultado = operador1.toInt() - operador.toInt();
            break;
           
            case('X'):
            resultado = operador1.toInt() * operador.toInt();
            break;
           
            case('/'):
            resultado = operador1.toInt() / operador.toInt();
            break; 
          }
         
          operador="";
          operador1="";
          Serial.print(resultado);
          Serial.print("\n\r");
       
        break;
     
      case ('c'):
           break;
         
      case (NO_KEY):
           break;
           
      default:
        operador += tecla;
        break;
       
       
    }
    Serial.print(tecla);
  }while(tecla |='f');
 
 
 
}

void intercambio()
{
    tecla=NO_KEY;
    operador1=operador;
    operador="";
}

Alguna idea?
6  International / Software / Funcion para convertir un String en double o float on: February 08, 2013, 03:52:42 am
Hola a todos , estoy empezando con el arduino, intnetando hacer una calculadora,
En principio funciona bastante bien, pero hay una cosa que no consigo hacer.
Como puedo pasar una variable String (introcucida a traves de un tecaldo) a una variable double o float.
Solo he encontrado la funcion: variable.toInt() pero esta funcion me convierte el string en una  variable int
y si quiero hacer la operacion 2,3/3 el resultado es 0.67 como si fuese 2/3, ya que el decimal y todo lo que viene a continuacion no lo tiene en cuenta

A continuacion os pongo el progrmama ( esta aun en proceso de depurado, y con algun otro bug ), la idea será que al final  todo se visualice en u display, a parte de introducir mas funciones


#include <Keypad.h>
/// #include <LiquidCrystal.h>

//inicializacion del lcd
//LiquidCrystal lcd(12,11,5,4,3,2);

// Inicializacion teclado
const byte Columnas = 4;
const byte Filas = 4;
byte Pines_Filas[Filas] = {13,12,11,10};
byte Pines_Columnas[Columnas] = {9,8,7,6};
// Mapa teclado
char mapa [Filas][Columnas] = {
  {'7','8','9','/'},
  {'4','5','6','X'},
  {'1','2','3','-'},
  {'.','0','=','+'}
};
int i=0;
String operador="";
String operador1="";
String operador2="";
char operacion;
char tecla;
double resultado;
// Creamos el objeto tecla
Keypad teclado =Keypad (makeKeymap(mapa),Pines_Filas,Pines_Columnas,Filas,Columnas);



// inicializacion
void setup()

  Serial.begin(9600);
}


//inicio del programa

void loop()
{
  int i =0;
  do
  {
    tecla = teclado.getKey();
    switch(tecla)
    {
      case ('.'):
        operador +='.';
        break;
       
      case ('+'):
        Serial.print(" + ");
        intercambio();
        operacion='+';   
        i=0;
        break;
       
       case ('-'):
        Serial.print(" - ");
        intercambio();
        operacion='-';   
        i=0;
        break;
       
      case ('X'):
        Serial.print(" X ");
        intercambio();
        operacion='X';
        break;
       
      case ('/'):
        Serial.print(" / ");
        intercambio();
        operacion='/';
        break;
       
      case ('='):
          Serial.print (" = ");
          switch(operacion)
          {
            case ('+'):
            resultado = double(operador1.toInt()) + double(operador.toInt());
            break;
           
            case ('-'):
            resultado = double(operador1.toInt()) - double(operador.toInt());
            break;
           
            case('X'):
            resultado = double(operador1.toInt()) * double(operador.toInt());
            break;
           
            case('/'):
            resultado = double(operador1.toInt()) / double(operador.toInt());
            break;
           
          }
          operador="";
          operador1="";
          Serial.print(resultado);
        break;
     
      case ('c'):
           break;
         
      case (NO_KEY):
           break;
           
      default:
        operador += tecla;
        break;
       
       
    }
    Serial.print(tecla);
  }while(tecla |='f');
 
 
 
}

void intercambio()
{
    tecla=NO_KEY;
    operador1=operador;
    operador="";
}

Gracias de antemano
7  International / Talleres, Encuentros, ... / Market Sow Zaragoza on: January 28, 2013, 03:52:09 am
Los dias 22-23-24 de febrero se celebra un encuentro sobre impresion digital, arduinos, open hardware, etc
http://www.arduteka.com/2013/01/etopia-maker-show-zaragoza/

Yo tengo la intencion de ir , soy de Alicante , y querria saber si hay alguien de mi ciudad en este foto que tambien quiere ir.. para ver si podemos ir juntos y compartir gastos...
8  International / Humor y Debate / Re: Nuevo por aquí on: January 25, 2013, 04:38:38 pm
Bienvenido xacobeo
9  International / Hardware / Re: Sensor de temperatura -80ºC on: January 23, 2013, 03:49:20 am
Tienes otra posibilidad , y es usar una PT100 (de dos hilos) basicamente es una resistencia que da un valor calibrado de 100 omh a 0º  , tambien la puedes encontrar en e-bya, el conexionado tipico es en  puente weaston  y la salida de la PT100 a un operacional pero para que no te produzca  errores de calentamiento por el sesor (disipacion de potencia)  la V max que te aconsejo en la PT100 a una Tª de 80 es de 0.2-0.4V (la variacion con la teperatura es lineal., y esa señal amplificarla con un OP generico (dependiendo de la resolucion que quieras)
10  International / Software / Re: Duda sobre TX y RX on: January 15, 2013, 03:39:15 pm
No te preocupe,  los pines tx, rx,A0 PWW, toman la función que tu elijas en el programa, esto es como salidas digitales normales o como en tu caso transmision , recepcion, en el momento que tu vuelvas a programar la placa con otro tipo de programam, las salidas se configuraran ,segun el programa cargado
11  International / Software / Re: Para quien pueda interesar on: January 15, 2013, 06:17:41 am
Gracias ion, Como bien dices, en el codigo original no sale la ruta, de hecho no sale nada... hay que insertarlo
built.path= "la ruta que nosotros queramos  (C:\.....\......)
Querria haberos puesto el enlace donde encontré la información, pero no lo volví a encontrar por google.
Si alguien lo vuelve a encontrar agradeceria que pusiera el enlace, (Como veis en google se encuentra de casi todo ... otra cosa es acordarte de donde lo vistes....)   smiley-cool
12  International / Software / Donde guardar los ficheros HEX on: January 14, 2013, 12:16:46 pm
Por si os puede interesar, Si queremos que los archivos hexadecimales se guarden en una carpeta fija.
Tenemos que:
(y es importante seguir los pasos)

1) Abrimos arduino
2) Vamos a preferencias
3) en el panel de preferencias pulsar debajo de donde dice  ..." Mas preferencias pueden se editadas... "
4) Una vez que abrimos la carpeta donde esta el acrivo de preferencias, cerramos el compilador
( muy importante)
5) abrimos  el achivo de preferencias con un editor si queremos podemos hacer una copia de seguridad antes , y editamos
6) a continuacion os pongo parte del archivo editado de preferencias
                 sketchbook.path=C:\Documents and Settings\Administrador\Mis documentos\Arduino
                 export.application.stop=true
                 build.path=C:\Documents and Settings\Administrador\Mis documentos\Arduino
                 editor.divider.size.windows=2
                 preproc.enhanced_casting=true
                 run.display=1
Todas las lineas de codigo las encontrareis en el archivo original el unico cambio es build.path (que basicamente le indica al compilador donde guardar el archivo compilado). Es importante que el codigo lo pongais despues de export.application..
Una vez echo esto lo guardais y cerrais
Volveis a arrancar arduino , cargais  cualquier programa, y al compilarlo tendreis el codigo  Hex ( así como otros codigos que se generan al compilar).
Siempre que compileis los archivos se generaran  en el mismo sitio así que  para no tener  demasiados archivos, aconsejo copiar el archivo hex, una vez hayais terminado de trabajar con el programa  a otra localizacion, y borrar el contenido de la carpeta.

Espero que esta informacion os pueda ser de utilidad


Pages: [1]