Hello guys
For my second code I have ever written I decided to play around with bitwise operator and I came up with the idea of simulating an elevator. The code I wrote is working pretty well, even though I realised I need to make one logic change. However my question is regarding a function in the main loop just being ignored.
I have made 2 main functions, one is called "targeting", which decides where the elevator should go next... and the other is "movimento", which in theory makes the door open/close and move the elevator. However the function "movimento" is not working at all, as in not running through it. So I need you guys help because I don't know why it wouldnt work.
To test if it was actually not running through it or it was a programming flaw I have commented out all the "movimento" function and I only made it to be a Serial.print ... and it is not even printing anything. Therefore I concluded that for some unknown reason the function is being ignored and I really have no idea why. The function right before it, "targeting", is working just fine.
Here is part of my code, I am skipping variable declarations, setup and the targeting function for length sake, since the code is over 400 lines. I have bolded the relevant part. (some comments/parts are in portuguese, I am not american)
Thanks in advance =)
//CODE
variables declaration
//funcoes
int targeting ( byte flagIn, byte flagOut, byte andar);
void movimento( byte alvo, long tempo, byte andar, int openFlag);
void setup()
{
skipped
}
void loop()
{
menosUmStateIn = digitalRead (menosUmIn);
groundStateIn = digitalRead (groundIn);
umStateIn = digitalRead (umIn);
doisStateIn = digitalRead (doisIn);
tresStateIn = digitalRead (tresIn);
quatroStateIn = digitalRead (quatroIn);
menosUmStateOut = digitalRead (menosUmOut);
groundStateOut = digitalRead (groundOut);
umStateOut = digitalRead (umOut);
doisStateOut = digitalRead (doisOut);
tresStateOut = digitalRead (tresOut);
quatroStateOut = digitalRead (quatroOut);
tempo = millis(); // marcar tempo
//tests indicador
Serial.print("andar:");
Serial.println(andar);
Serial.print("alvo:");
Serial.println(alvo);
Serial.print("estado1:");
Serial.println(s);
Serial.print("estado2:");
Serial.println(e);
Serial.print("flagin:");
Serial.println(flagIn);
Serial.print("flagout:");
Serial.println(flagOut);
Serial.print("open? ");
Serial.println(openFlag);
// descobrir qual andar que o elevador está, assumindo que ele aperte um limitswitch
if (digitalRead(menosUmPin)==LOW)
{
andar = (B00000001);
}
else if (digitalRead(groundPin) == LOW)
{
andar = (B00000010);
}
else if (digitalRead(umPin)==LOW)
{
andar = (B00000100);
}
else if (digitalRead(doisPin)==LOW)
{
andar = (B00001000);
}
else if (digitalRead(tresPin) == LOW)
{
andar = (B00010000);
}
else if (digitalRead(quatroPin) == LOW)
{
andar = (B00100000);
}
//controle interno usando bitoperator para saber qual pedido esta pendente
//interno
if (menosUmStateIn==LOW)
{
flagIn = (flagIn | (B00000001));
}
if (groundStateIn==LOW)
{
flagIn = (flagIn | (B00000010));
}
if (umStateIn == LOW)
{
flagIn = (flagIn | (B00000100));
}
if (doisStateIn == LOW)
{
flagIn = (flagIn | (B00001000));
}
if (tresStateIn == LOW)
{
flagIn = (flagIn | (B00010000));
}
if (quatroStateIn == LOW)
{
flagIn = (flagIn | (B00100000));
}
//externo
if (menosUmStateOut==LOW)
{
flagOut = (flagOut | (B00000001));
}
if (groundStateOut==LOW)
{
flagOut = (flagOut | (B00000010));
}
if (umStateOut == LOW)
{
flagOut = (flagOut | (B00000100));
}
if (doisStateOut == LOW)
{
flagOut = (flagOut | (B00001000));
}
if (tresStateOut == LOW)
{
flagOut = (flagOut | (B00010000));
}
if (quatroStateOut == LOW)
{
flagOut = ((flagOut) | (B00100000));;
}
//identifica se pedido de flag ja foi atendido
if (flagIn == (flagIn | andar) && flagIn!=0)
{
flagIn = (flagIn ^ andar);
openFlag = 1;
}
else if (flagOut == (flagOut | andar) && flagOut!=0)
{
flagOut = (flagOut ^ andar);
openFlag = 1;
}
else
{
openFlag= 0;
}
** alvo = targeting(flagIn, flagOut, andar);**
** movimento(alvo, tempo, andar, openFlag);**
}
//FUNCOES
int targeting(byte flagIn, byte flagOut, byte andar)
{
skipped code
}
void movimento (byte alvo, double tempo, byte andar, int openFlag)
{
** Serial.print(" jfdklajsdlaksjdlkajs");**
/*
if (openFlag == 1)
{
e = abrir;
}
switch(e)
{
case abrir:
digitalWrite(portaPin, HIGH); // setar a porta para abrir... possivelmente seria uma funcao
if (digitalRead(sensorPortaPin)==LOW)
{
e = aberto;
}
break;
case aberto:
timeout = tempo + 3500;
//esperar pessoas
if (digitalRead(sensorMovPin)==LOW)
{
timeout = tempo + 3000;
}
if (tempo >timeout)
{
e = fechar;
//fechar porta
//nota: por a mao enquanto fecha
}
break;
case fechar:
digitalWrite(portaPin, -HIGH); // setar a porta para fechar... possivelmente seria uma funcao
if (digitalRead(sensorMovPin)==LOW)
{
e = abrir;
}
if (digitalRead(sensorPortaPin)==LOW)
{
e = fechado;
}
break;
case fechado:
if (target<andar)
{
digitalWrite(portaPin, -HIGH);
}
else if (target > andar)
{
digitalWrite(portaPin, HIGH);
}
else
{
digitalWrite(portaPin, LOW);
}
break;
}
return;
*/
}