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;}
}