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. :D
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)
  }
  }
}
 
Última edición por un moderador:
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)
 
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;

}
 
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
 
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.
 
Atrás
Arriba