Elevador com 3 andares SIMPLES!

ME AJUDEM POR FAVOR.....

Pessoal estou fazendo um trabalho para o meu curso onde devo fazer um elevador com 3 andares, ou seja, térreo, 1º e 2º andar.

A principio é algo simples, como:

  • Utilizar 3 botões respectivos para o andar.
  • 1 entrada do Arduino para receber o final da micro chave

Eu fiz uma programação, que na teoria daria certo, mas....... Não deu!
Tentei enganar ela com um "while", mas, também não consegui.

Quais componentes estou utilizando ?

  • Arduino Uno R3.
  • Ponte H l298N.
  • Motor DC.
  • Botões, push botton.
  • Micro Chave.

Segue a programação que eu fiz......

//CONFIGURANDO SENTIDO DO MOTOR
// MOTOR IN1 IN2
// HORARIO 5V GND
// ANTI-HORARIO GND 5V
// PONTO MORTO GND GND
// FREIO 5V 5V

// SENTIDOS ADOTADOS:
// Horario - DESCE
// Anti-Horario - SOBE

//Sinal para Ponte H L298N
int LeftPin = 2;
int RightPin = 3;

//Pisos
int con = 0;

//Piso actual
int act = 1;

//Piso destino
int nue = 0;

//Piso destino test
int test = 0;

//Sensor para detectar los pisos
const int buttonPin = 8; //Fim de curso, único para todos os andares. Te´ramum fim de curso para cada andar, porem a entrada no arduino será a mesma.
int buttonState = 0;

//Botoes dos Andares
#define botao1 4
#define botao2 5
#define botao3 6

int botao_1 = 1;
int botao_2 = 1;
int botao_3 = 1;

int velocidadeA = 7; // velocidade

void setup()
{
Serial.begin(9600);
pinMode(LeftPin, OUTPUT);
pinMode(RightPin, OUTPUT);
pinMode(buttonPin, INPUT);
pinMode (botao1, INPUT);
pinMode (botao2, INPUT);
pinMode (botao3, INPUT);
pinMode (velocidadeA, INPUT);

}

void loop()
{
// if (Serial.available() != 0)
while (((botao_1 = digitalRead (botao1)) and (botao_2 = digitalRead (botao2)) and (botao_3 = digitalRead (botao3))) == 0) // espera que um botao seja precionado
{
// Digite novo piso

nue = '0';

if (botao_1 == 0)
{
nue = '1';
}

if (botao_1 == 0)
{
nue = '2';
}

if (botao_3 == 0)
{
nue = '3';
}

}
Serial.print("andar ");
Serial.println(nue);

// Se o elevador está a ser movido
if (nue != 0)
{
// Operações para detectar novo nível
// E sabe quantos pulsos (andares) omitir para chegar ao destino

con = nue - act;
act = nue;
nue = 0;

// Para mais baixo
if (con < 0)
{
//Converter o resultado para positivo
con *= -1;

// Sai-ligar o motor

digitalWrite(LeftPin, HIGH);
digitalWrite(RightPin, LOW);
delay(100);
}

//Caso de subir
else
{
if (con > 0)
{
//Fazer o motor chegar no andar.

digitalWrite(LeftPin, LOW);
digitalWrite(RightPin, HIGH);
delay(700);
}
}
}
}

void parar()
{

// Se voce ainda nao chegar ao destino
if (con != 0)
{
//Esperar pulso (Andar)
buttonState = digitalRead(buttonPin);
//Se detecta o pulso
if (buttonState == HIGH)
{
// Subtrair um contador
con--;

//ja chegou ao destino? para o motor
if (con <= 0)
{

digitalWrite(LeftPin, LOW);
digitalWrite(RightPin, LOW);
}

// Da tempo para pular de pulso e up / down
else
{
delay(100);
}

}
}

}//Fin do loop

Mas qual seria o seu problema?

Verifiquei que no seu programa tem um erro:

  if (botao_1 == 0) /** <============= aqu não seria botao_2?
   {
     nue = '2';
   }

Poh, vlws, nem tinha reparado. O problema é:
Quando eu aperto um dos botões fisicos para chamar o elevador, quando bate na micro chave (pino 8) ele não está parando e não consigo encontrar o por que......, com algumas "gambiarra" eu consigo fazer o botao_1 parar quando tocar na micro chave, mais não a mesma coisa para os demais.

Os delay's não ajudam em nada o teu código. Consegues explicar porque usas esses delays??? Eu não consigo.

Este while

while (((botao_1 = digitalRead (botao1)) and (botao_2 = digitalRead (botao2)) and (botao_3 = digitalRead (botao3)))  == 0)    // espera que um botao seja precionado
 {

Está a fazer o quê?

Em lado algum chamas a função parar()... que ao que me parece é o que faz parar o elevador.

Acho que devias pensar um pouco melhor no código... talvez pesquisar uma máquina de estados?? Para ver como fazer isto?

Porque não fazer um array com os níveis para onde o elevador tem de ir em vez duma lógica que não tem em conta vários utilizadores do elevador...

PLS I NEED HELP ....

I NEED PROGRAM TO ELEVATOR, 4 floors, SENSORS on the doors to check if it is open, 4 floor sensors, maximum limit and minimum limit, the middle floors, second floor and third floor, has 2 buttons one to climb and one to come down.

Can someone help me? I do not understand much about programming and the arduino.

pls

AJUDA POR FAVOR...

PRECISO DE UM PROGRAMA PARA ARDUINO DE UM ELEVADOR DE 4 ANDARES, SENSORES NAS PORTAS PARA VERIFICAR SE A PORTA SE ENCONTRA ABERTA OU FECHADA (NOS 4 PISOS), 4 SENSORES DE PISO (UM EM CADA), SENSOR PARA DETERMINAR O LIMITE MÁXIMO E UM DE LIMITE MÍNIMO, OS PISOS DO MEIO (O 2º E O 4º PISO) POSSUEM 2 BOTÕES UM PARA SUBIR E UM PARA DESCER, OS PISOS 1 E 4 SÓ POSSUEM 1 BUTÃO EXTERIOR. POSSUI 4 BOTÕES INTERIORES PARA DETERMINAR O PISO PRETENDIDO PELO UTILISADOR.

ALGUÉM ME PODE AJUDAR?? EU NÃO PERCEBO MUITO DE PROGRAMAÇÃO MUITO MENOS DE ARDUINO.

AJUDA POR FAVOR

PedroVideira:
AJUDA POR FAVOR...

PRECISO DE UM PROGRAMA PARA ARDUINO DE UM ELEVADOR DE 4 ANDARES, SENSORES NAS PORTAS PARA VERIFICAR SE A PORTA SE ENCONTRA ABERTA OU FECHADA (NOS 4 PISOS), 4 SENSORES DE PISO (UM EM CADA), SENSOR PARA DETERMINAR O LIMITE MÁXIMO E UM DE LIMITE MÍNIMO, OS PISOS DO MEIO (O 2º E O 4º PISO) POSSUEM 2 BOTÕES UM PARA SUBIR E UM PARA DESCER, OS PISOS 1 E 4 SÓ POSSUEM 1 BUTÃO EXTERIOR. POSSUI 4 BOTÕES INTERIORES PARA DETERMINAR O PISO PRETENDIDO PELO UTILISADOR.

ALGUÉM ME PODE AJUDAR?? EU NÃO PERCEBO MUITO DE PROGRAMAÇÃO MUITO MENOS DE ARDUINO.

AJUDA POR FAVOR

Estás tú guapo ...

PedroVideira:
AJUDA POR FAVOR...

PRECISO DE UM PROGRAMA PARA ARDUINO DE UM ELEVADOR DE 4 ANDARES, SENSORES NAS PORTAS PARA VERIFICAR SE A PORTA SE ENCONTRA ABERTA OU FECHADA (NOS 4 PISOS), 4 SENSORES DE PISO (UM EM CADA), SENSOR PARA DETERMINAR O LIMITE MÁXIMO E UM DE LIMITE MÍNIMO, OS PISOS DO MEIO (O 2º E O 4º PISO) POSSUEM 2 BOTÕES UM PARA SUBIR E UM PARA DESCER, OS PISOS 1 E 4 SÓ POSSUEM 1 BUTÃO EXTERIOR. POSSUI 4 BOTÕES INTERIORES PARA DETERMINAR O PISO PRETENDIDO PELO UTILISADOR.

ALGUÉM ME PODE AJUDAR?? EU NÃO PERCEBO MUITO DE PROGRAMAÇÃO MUITO MENOS DE ARDUINO.

AJUDA POR FAVOR

Se não sabes de programação, não vais fazer isto para ser colocado em funcionamento com pessoas dentro do elevador... como tal, isto é um exercicio académico ou para demonstrares conhecimento em algo que obviamente não tens, possivelmente para um emprego??

Assim sendo e como é também costume no fórum, ninguém vai fazer o trabalho por ti.

Começa tu a fazer algo e vem aqui colocar dúvidas concretas em vez de pedires que alguém faça algo por ti e certamente que vais obter ajuda.