Quantcast
Channel: MSP430 Technical Forums
Viewing all articles
Browse latest Browse all 2077

Some times dc motor doens't stop working in my project

$
0
0
First of all a question, I just have to change the  jumpers J3 connections if I use serial communication right?
 
Hello, I've a project where the msp430g2553 makes an access control by password.
 
The launch pad receives a password from a matrix keypad, and turns on a motor to lock the door, or to lock the door if a button is pressed from inside the "room"
 
The project works fine, but sometimes the dc motor doesn't stop working, and it is happening randomly. 
 
can somebody help me?
 
sorry for my terrible english

 

the code and a circuit layout:

 

/*lock door control*/


/* matrix keypad: São 3 columns e 4 row
columns: pins 3,4,5 (inputs)
rows: pins 6,7,8,9 (outputs)*/


const int C2 = 5; // 2 to 4 keypad columns pins


const int C1 = 4; 


const int C0 = 3; 


const int L3 = 9; // 6 to 9 keypad rows pins


const int L2 = 8;


const int L1 = 7;


const int L0 = 6;


const int Open = 11; // led unlocked door


const int Close = 12; // led locked door


const int Lock = 13; // pin - motor locks door - clockwise 


const int Unlock = 15; // Pin - motor unlocks door - anticlockwise


const int sensor = 10; // sensor - door is locked or unlocked


const int ofi = 18; // button to unlock door from inside room


const int ledread = 14; // led that shows - keypad is being reading


// Variaveis:


char senha[3]; 


int i = 0; // password array


void setup() {


 pinMode(ledread, OUTPUT);






// pins configurtation


 pinMode(ofi,INPUT_PULLUP);


 pinMode(sensor, INPUT_PULLUP);


 pinMode(C2, INPUT_PULLUP);


 pinMode(C1, INPUT_PULLUP);


 pinMode(C0, INPUT_PULLUP); 






 pinMode(L3, OUTPUT);


 pinMode(L2, OUTPUT);


 pinMode(L1, OUTPUT);


 pinMode(L0, OUTPUT);






 pinMode(Open, OUTPUT);


 pinMode(Close, OUTPUT);






 pinMode(Lock, OUTPUT);


 pinMode(Unlock, OUTPUT);


}


void loop(){


//verify Sensor


 if(digitalRead(sensor) == LOW){ // door locked


 digitalWrite(Open, HIGH); //turn off green Led


 digitalWrite(Close, LOW ); //turn on red Led 


 }


 else{ // unlocked door


 digitalWrite(Open, LOW ); //turn on green Led


 digitalWrite(Close, HIGH ); //turn off red Led


 }






//verify ofi


 if(digitalRead(ofi) == LOW && digitalRead(sensor) == LOW){ //unlock button, if the door is locked


 digitalWrite(Unlock, LOW); //turn on motor to unlock the door


 delay (500);


 digitalWrite(Unlock, HIGH);


 }


 if(digitalRead(ofi) == LOW && digitalRead(sensor) == HIGH){ // lock button, if the door is unlocked


 digitalWrite(Lock, LOW); //turn on motor to lock the door


 delay (500);


 digitalWrite(Lock, HIGH);


 }


//Verify keypad


 digitalWrite(L3, LOW);


 digitalWrite(L2, LOW);


 digitalWrite(L1, LOW);


 digitalWrite(L0, LOW);






 if (digitalRead(C0) == LOW || digitalRead(C2) == LOW || digitalRead(C1) == LOW){


 teclado();


 varredura();


 }






}


void teclado()
{


//read L3


 digitalWrite(L3, LOW );


 digitalWrite(L2, HIGH);


 digitalWrite(L1, HIGH);


 digitalWrite(L0, HIGH); 






 while (digitalRead(C2) == LOW)
 {
 senha[i] = 1; 


 digitalWrite(ledread, HIGH);


 digitalWrite(Open, LOW );
 }




 while (digitalRead(C1) == LOW)
 {
 senha[i] = 2; 


 digitalWrite(ledread, HIGH);


 digitalWrite(Open, LOW );
 }




 while (digitalRead(C0) == LOW)
 {
 senha[i] = 3; 


 digitalWrite(ledread, HIGH);


 digitalWrite(Open, LOW );
 }






//read L2


 digitalWrite(L3, HIGH);


 digitalWrite(L2, LOW );


 digitalWrite(L1, HIGH);


 digitalWrite(L0, HIGH); 






 while (digitalRead(C2) == LOW)


 {
 senha[i] = 4; 


 digitalWrite(ledread, HIGH);


 digitalWrite(Open, LOW );
 }




 while (digitalRead(C1) == LOW)


 {
 senha[i] = 5; 


 digitalWrite(ledread, HIGH);


 digitalWrite(Open, LOW );
 }




 while (digitalRead(C0) == LOW)


 {
 senha[i] = 6; 


 digitalWrite(ledread, HIGH);


 digitalWrite(Open, LOW );
 }






//read L1


 digitalWrite(L3, HIGH);


 digitalWrite(L2, HIGH);


 digitalWrite(L1, LOW);


 digitalWrite(L0, HIGH); 






 while (digitalRead(C2) == LOW)


 {
 senha[i] = 7; 


 digitalWrite(ledread, HIGH);


 digitalWrite(Open, LOW );
 }




 while (digitalRead(C1) == LOW)


 {
 senha[i] = 8; 


 digitalWrite(ledread, HIGH);


 digitalWrite(Open, LOW );
 }






 while (digitalRead(C0) == LOW)
 {
 senha[i] = 9; 


 digitalWrite(ledread, HIGH);


 digitalWrite(Open, LOW );
 }




//read L0


 digitalWrite(L3, HIGH);


 digitalWrite(L2, HIGH);


 digitalWrite(L1, HIGH);


 digitalWrite(L0, LOW ); 






 while (digitalRead(C2) == LOW)


 {
 senha[i] = '*'; 


 digitalWrite(ledread, HIGH);


 digitalWrite(Open, LOW );
 }




 while (digitalRead(C1) == LOW)
 {
 senha[i] = 0; 


 digitalWrite(ledread, HIGH);


 digitalWrite(Open, LOW );
 }




 while (digitalRead(C0) == LOW)
 {
 senha[i] = '#'; 


 digitalWrite(ledread, HIGH);


 digitalWrite(Open, LOW );
 }




//correct led status


 digitalWrite(ledread, LOW );


 digitalWrite(Open, HIGH);


//array


 i++;


}


void varredura()


{
//Verify password


 if (senha[0] == 1 && senha[1] == 5 && senha[2] == 9 && digitalRead(sensor) == LOW){ 


 digitalWrite(Unlock, LOW); //turn on motor to unlock the door


 delay (500);


 digitalWrite(Unlock, HIGH);


 i = 0; // erase array


 senha[0] = 'x'; //erase password


 senha[1] = 'x';


 senha[2] = 'x'; 


 } 


 if (senha[0] == '*' && digitalRead(sensor) == HIGH){


 digitalWrite(Lock, LOW); //turn on motor to lock the door


 delay (500);


 digitalWrite(Lock, HIGH);


 i = 0; //erase array


 }


 if (i == 3 && senha[2] != 'x'){ //if passwors is wrong


 for (int x = 0; x < 3; x++){ //blink red led 3 time


 digitalWrite(Close, HIGH);


 delay (100);


 digitalWrite(Close, LOW);


 delay (100);


 }


 }






 if (i > 2) //erase array after 3 dials


 {i = 0;}


}

Attached Thumbnails

  • esquemático.jpg

Viewing all articles
Browse latest Browse all 2077

Trending Articles