Pages: [1]   Go Down
Author Topic: Problemas con funciones  (Read 1167 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola! soy muy nuevo en esto de arduino y estoy queriendo hacer funciones propias para simplificar un programa que hice antes, paso a explicarles mi problema:
en el programa que arme primero tenia dos entradas (una de un botón y otra de un sensor) si el botón no estaba apretado el arduino por lcd mostraba el texto "apagado" si el botón se apretaba y el sensor no detectaba nada mostraba "En brazo" y por ultimo si el botón estaba apretado y el sensor detectaba algo mostraba "En sincro" (adjunto el programa al final) ahora cuando quise hacer una función para que quede todo un poco mas prolijo me encontré con el problema de que no sabía cómo hacer para asignar a esa función variables del tipo int y del tipo char juntas, defino las variables del tipo int y con esas no hay problema pero cuando quiero poner las de tipo chart (para que las muestre el lcd) me tira error ahora les pongo los programas así ven de lo que les hablo:
Este es el que funciona bien:
Code:
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

void setup() {
  lcd.begin(16, 2);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
  pinMode(11, INPUT);
  pinMode(10, INPUT);
}
void loop() {
  for(int z = 1; z < 2; z++){
  int A; int B;
   A = digitalRead(11);
   B = digitalRead(10);
  if (A == HIGH) {
    if (B == LOW) {
    for(int i = 1; i < 2; i++) {
      lcd.clear();
      lcd.setCursor(5, 0);
      lcd.print("T.S.I.");
      lcd.setCursor(7, 1);
      lcd.print("En brazo");
      delay(1000);
      lcd.noDisplay();
      delay(1000);
      int i = 0;
      lcd.display();
    }
    }
    else {
    for(int u = 1; u < 2; u++) {
      lcd.clear();
      lcd.setCursor(5, 0);
      lcd.print("T.S.I.");
      lcd.setCursor(7, 1);
      lcd.print("En sincro");
      delay(250);
      int u = 0;
      lcd.noDisplay();
      delay(250);
      lcd.display();
    }
  }
  }
  else {
    int x = 0;
    for(x == 1; x < 2; x++){
      lcd.clear();
    }
    for(x == 3; x < 99999999; x++){
      lcd.setCursor(5, 0);
      lcd.print("T.S.I.");
      lcd.setCursor(7, 1);
      lcd.print("Apagado");
    }
}
z = 0;
  }
}
y este el que no puedo hacer funcionar:
Code:
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
int sensordepulso = 11;
int sensordeprox = 10;
float funcion;

void setup() {
  lcd.begin(16, 2);
  lcd.setCursor(5, 0);
  lcd.print("T.S.I.");
  pinMode(sensordepulso, INPUT);
  pinMode(sensordeprox, INPUT);
}
void loop(){
  if (sensordepulso == HIGH) {
    int a01 = 250;
    int a02 = 1000;
    int a03 = sensordepulso;
    int a04 = sensordeprox;
    char b01[] = {"En sincro"};
    char b02[] = {"En brazo"};
  Funcionloop(a01, a02, a03, a04, b01, b02);
  }
  else {
    lcd.print("Apagado");
  }
  String Funcionloop(int Delay01, int Delay02, int sensor01, int sensor02, char Display01, char Display02){
    if (sensor02 == HIGH) {
      lcd.setCursor(3, 1);
      lcd.print(Display01[9]);
      delay(Delay01);
      lcd.noDisplay();
      delay(Delay01);
      lcd.display();
    }
    else {
      lcd.setCursor(3, 1);
      lcd.print(Display02[8]);
      delay(Delay02);
      lcd.noDisplay();
      delay(Delay02);
      lcd,display();
    }
Por favor les pido me ayuden a comprender mejor la programación o si saben de algún manual o algo, no quiero la solución del problema sino entender como se hace, también me gustaría saber bien cómo manejar el tema de cuando algo se loopea y cuando se realiza una sola vez.
Desde ya muchas gracias!
Saludos!
Logged

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

Pues parece que el error son los corchetes al declarar el char array... smiley-wink

http://arduino.cc/es/Reference/Array
Logged

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

hola, me he comprado un arduino uno y como soy nuevo en esto, quería saber si alguno de vosotros me podría decir exactamente como hacer que el arduino haga lo siguinte:

 le conecto un pulsador al arduino y al pulsarlo, el arduino empieza a por asi decirlo, a escuchar durante 5 segundos,(puesto que lleva un sensor de voz),al reconocer mi voz el arduino, este cerraría un circuito (para dejar pasar la corriente a un relé, y este al recibir la corriente cambia u posicion y cierra otro circuito con 12 voltios,


NOTA:todo esto va en paralelo con respecto el segundo circuito, y otra cosa, el arduino se puede alimentar con 12 voltios?

saludos, espero respuesta, si no es exesiva molestia.
Logged

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

Hola ya arregle el problema de mi programa, encontré que me faltaba cerrar unos corchetes como dijo OoTzToO y también tenia errores en los tipos de variables que definía, ahora les dejo el programa para que vean como quedo. Gracias!

Code:
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
int sensordepulso = 11;
int sensordeprox = 10;
float funcion;

void setup() {
  lcd.begin(16, 2);
  lcd.setCursor(5, 0);
  lcd.print("T.S.I.");
  pinMode(sensordepulso, INPUT);
  pinMode(sensordeprox, INPUT);
}
void loop(){
  if (sensordepulso == HIGH) {
    int a01 = 250;
    int a02 = 1000;
    int a03 = sensordepulso;
    int a04 = sensordeprox;
    char b01[10] = "En sincro";
    char b02[9] = "En brazo";
    Funcionloop(a01, a02, a03, a04, b01, b02);
  }
  else {
    lcd.print("Apagado");
  }
}
  byte Funcionloop(int Delay01, int Delay02, int sensor01, int sensor02, String Display01, String Display02){
    if (sensor02 == HIGH) {
      lcd.setCursor(3, 1);
      lcd.print(Display01[9]);
      delay(Delay01);
      lcd.noDisplay();
      delay(Delay01);
      lcd.display();
    }
    else {
      lcd.setCursor(3, 1);
      lcd.print(Display02[8]);
      delay(Delay02);
      lcd.noDisplay();
      delay(Delay02);
      lcd.display();
    }
  }

En cuanto a lo que pregunta pedrocopi la verdad yo no tengo idea de cómo hacerlo con arduino pero lo que tendrías que hacer con el controlador en ese caso sería comparar un registro de voz definido con anterioridad con la señal que entra por el micrófono conectado al arduino y si las dos son iguales da señal a una salida para el relé.
Hay que ver como exactamente (si es que se puede, no lo sé porque yo también soy muy nuevo en esto) se le da el parámetro de referencia al arduino (o sea el registro de voz pre-grabado) y de qué manera lo compara, estaría bueno que alguien bien pro contestara tu pregunta por acá porque es una data muy copada para tenerla.

En cuanto a la alimentación podes alimentarlo con 12V pero no de manera directa tenés que armar una fuente de alimentación regulada (yo uso un circuito con un 7805) para que de los 12V te entregue solo 5V para alimentar el arduino y el resto de la alimentación (todo lo de 12V) lo haces por afuera de la fuente. Pero acordate que todo lo referente al arduino (alimentación, Entradas y salidas) están todas a 5V así que no mezcles.
Espero te sea de utilidad! Suerte!
Logged

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

Por la entrada DC de la placa del arduino puedes meter hasta 20V, pero lo mejor es utilizar entre 7 y 12 para evitar que se recaliente el regulador.

Mira la descripción de la placa UNO R3

Del tema del reconocimiento de voz, hay por ahí alguna libería, busca en los foros e internet smiley-wink
Logged

Coruña
Offline Offline
Newbie
*
Karma: 0
Posts: 26
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Estoy aprendiendo a llamar a una función propia...donde me confundo??

Code:
int count;
int pinArray[]={3,4,5,6,7,8,9,10};


void setup ()

{
  for (count=0;count<8;count++)
  {
    digitalWrite (pinArray[count],HIGH);
    pinMode (pinArray[count],OUTPUT);
  }
}

 void encender ()
{
  delay (1000);
}
void loop()
{
digitalWrite (pinArray[0],LOW);
encender;
digitalWrite (pinArray[1],LOW);
encender;
digitalWrite (pinArray[2],LOW);
encender;
digitalWrite (pinArray[3],LOW);
encender;
}
Gracias chicos....
Logged

Coruña
Offline Offline
Newbie
*
Karma: 0
Posts: 26
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bueno pues ya me respondo...despues de toda la mañana, sale ahora...
Code:
int count;
int pinArray[]={3,4,5,6,7,8,9,10};


void setup ()

{
  for (count=0;count<8;count++)
  {
    digitalWrite (pinArray[count],HIGH);
    pinMode (pinArray[count],OUTPUT);
  }
  Serial.begin(9600);
}

 void encender (void)
{
  Serial.println("hola");
  delay (1000);
  return;
}
void loop()
{
digitalWrite (pinArray[0],LOW);
encender();
digitalWrite (pinArray[1],LOW);
encender();
digitalWrite (pinArray[2],LOW);
encender();
digitalWrite (pinArray[3],LOW);
encender();
}
Logged

Pages: [1]   Go Up
Jump to: