Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos » Arduino y Raspberry Pi
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

18/10/2016 #1


Duda con Arduino
Buenas tardes, me gustaria que me ayudaran a resolver un problema que tengo.
lo que pasa es que quiero que mediante el arduino y un l293 me accione e invierta un motor, con esto paso al problema de que quiero que cuando se pulse un pulsador la salida del arduino correspondiente se mantenga en alto hasta que pulse el otro pulsador que me invertira el giro del motor, les dejo el cidigo que estoy armando e implementado porfavor quien pueda ayudarme le estare muy agradecido, les estare agradecido.
Código:
// programa para control de motor
int E=10 // Enable pin 1 para motor
int M1=9 //  pin motor pin 1
int M2=8 //  pin motor  pin 2
int C1=7 // control motor pin 1 (switch)
int C2=5 // control motor pin 2 (switch)


void setup() {
  Serial.begin (9600);
  pinMode (E, OUTPUT);
  pinMode (M1, OUTPUT);
  pinMode (M2, OUTPUT);
  pinMode (C1, INPUT);
  pinMode (C2, INPUT);
  // put your setup code here, to run once:

}

void loop() {
  digitalWrite (E, HIGH)
  C1State=digitalRead(C1); // me lee el estado de C1
  C2State=digitalRead(C2); // me lee el estado de C2
  if ((C1State==LOW)&&(C2State==HIGH))
  {
    // enciende giro motor en pin 1  (M1)
    digitalWrite ( M1, HIGH)
    digitalWrite (M2, LOW)
    }
  
  else if ((C1State==HIGH)&&(C2State==LOW)){
   // enciende giro motor en pin 2 (M2)
   digitalWrite (M2, HIGH)
   digitalWrite (M1, LOW)
    }
  else if ((C1State==LOW)&&(C2State==LOW)){
  digitalWrite (M1, LOW)
  digitalWrite (M2, LOW)
  }
  else {
    digitalWrite (M1, LOW)
    digitalWrite (M2, LOW)
  }
  }
}
19/10/2016 #2

Avatar de Nuyel

no declares 'int E=10', en su lugar usa 'const int E=10' para evitar usar ram para una constante, además, también es posible hacerlo directamente usando macros de C '#define E 10', aunque este solo funciona por que Arduino compila sobre C/C++.

Agrega un while después de activar las bobinas y verifica en él el estado del otro pulsador, una ves que este en el estado que buscas sales del while, mientras el estado sea otro mantienes el while, como no hay circuito y no se si es pull-up o pull-down, no se si seria while(digitalRead(Cx)==HIGH) o while(digitalRead(Cx)==LOW)
20/10/2016 #3

Avatar de Yaitronica

Te dejo un ejercicio del Stater Kit incluye control de velocidad, para que te guies y puedas corregir tu código por tu cuenta.

Código:
//Ejercicio basado en los ejercicios 9 y 10 del libro Arduino Starter Kit
//Version original

//const int switchPin = 10;
const int controlPin1 = 2;
const int controlPin2 = 3;
const int enablePin = 9;
const int directionSwitchPin = 4;
const int onOffSwitchStateSwitchPin = 5;
const int potPin = A0;

int onOffSwitchState = 0;
int previousOnOffSwitchState = 0;
int directionSwitchState = 0;
int previousDirectionSwitchState = 0;

int motorEnabled = 0;
int motorSpeed = 0;
int motorDirection = 1;

//const int motorPin = 11;
//int switchState = 0;
//encendido_apagado = 0;

void setup(){
//pinMode(motorPin, OUTPUT);
//pinMode(switchPin, INPUT);
pinMode(directionSwitchPin, INPUT);
pinMode(onOffSwitchStateSwitchPin, INPUT);
pinMode(controlPin1, OUTPUT);
pinMode(controlPin2, OUTPUT);
pinMode(enablePin, OUTPUT);
digitalWrite(enablePin, LOW);
}

void loop(){
// leo el boton de encendido/apagado del pin 2
/*switchState = digitalRead(switchPin);
if ((switchState == HIGH)&& !encendido_apagado){	//Si está el motor apagado y leo un pulso
	encendido_apagado = 1;
	digitalWrite(motorPin, HIGH);
}
if (switchState == HIGH)&& encendido_apagado){	//Si está el motor encendido y leo un pulso
	encendido_apagado = 0;
	digitalWrite(motorPin, LOW);
}
*/
onOffSwitchState = digitalRead(onOffSwitchStateSwitchPin);
delay(1);
directionSwitchState = digitalRead(directionSwitchPin);
motorSpeed = analogRead(potPin)/4;

if (onOffSwitchState != previousOnOffSwitchState){
	if (onOffSwitchState == HIGH){
		motorEnabled = !motorEnabled;
	}
}

if (directionSwitchState != previousDirectionSwitchState) {
	if (directionSwitchState == HIGH){
		motorDirection = !motorDirection;
	}
}

if (motorDirection == 1) {
	digitalWrite(controlPin1, HIGH);
	digitalWrite(controlPin2, LOW);
}
else {
	digitalWrite(controlPin1,LOW);
	digitalWrite(controlPin2,HIGH);
}

if (motorEnabled == 1){
	analogWrite(enablePin,motorSpeed);
}
else {
	analogWrite(enablePin, 0);
}

previousDirectionSwitchState = directionSwitchState;
previousOnOffSwitchState = onOffSwitchState;

}
20/10/2016 #4

Avatar de Scooter

tanto const int e =10 como int e=10 ocupan la misma ram, al menos con la versión del compilador con la que lo comprobé.
#define no ocupa ram
20/10/2016 #5

Avatar de Nuyel

El punto de Arduino es que no existe #define, y digo que no existe por que no es parte del lenguaje, pero como compila con C/C++, claro que existe, solo que es mala practica definir usando int en lugar de const int, si consume lo mismo esta bien, pero hay que tener consideración de eso para definir la constante que nunca cambia y eviten errores luego.
21/10/2016 #6

Avatar de Scooter

Si, no existe pero va y ahorra memoria.
Ciertamente se desaconseja su uso en el manual.


Enviado desde mi 5056D mediante Tapatalk
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Arduino y Raspberry Pi

Cerrar
Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos » Arduino y Raspberry Pi

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.