KenF:
OK The problem is, that once it stops turning, it needs to go back to doing what it was doing before you started turning.
So I've altered your code, this takes note of wether you're going Forwards, Reversing or Stopped. in a separate variable.
When it recieves a signal to turn, it turn and wait for a tenth of a second, At this point if no other signal is being recieved, it should resume it's previous operation (forwards, reverse or stop).
You may have to alter some of the details but see how it goes.
const int ldr = A7; //Lyssensor (LDR), Light sensor
const int led = 3; //Kjørelys, Lights
const int blaa1 = 4;
const int lys = 300; //Laveste verdi for lys (styrer kjørelyset), Light value
const int mhp = 8; //MotorHøyrePositiv
const int mhn = 9; //MotorHøyreNegativ
const int mvp = 10; //MotorVenstrePositiv
const int mvn = 11; //MotorVenstreNegativ
#include <IRremote.h> //Inkluderer biblioteket for IR kontroll
int RECV_PIN = 5;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup(){
Serial.begin(9600);
pinMode(3, OUTPUT); //Kjørelys
pinMode(4, OUTPUT); //Blått lys (indikerer at kjørelys er PÅ)
irrecv.enableIRIn();
pinMode(mhp, OUTPUT);
digitalWrite(mhp, LOW);
pinMode(mhn, OUTPUT);
digitalWrite(mhn, LOW);
pinMode(mvp, OUTPUT);
digitalWrite(mvp, LOW);
pinMode(mvn, OUTPUT);
digitalWrite(mvn, LOW);
}
char currentDirection='S'; //S for stop, F forwards, R reverse
void loop(){
//LYS / LIGHTS - START
int lysverdi = analogRead(ldr);
Serial.println(lysverdi);
if (lysverdi < lys)
digitalWrite(led, HIGH);
else
digitalWrite(led, LOW);
if (lysverdi < lys)
digitalWrite(blaa1, HIGH);
else
digitalWrite(blaa1, LOW);
delay(200);
//LYS / LIGHTS - STLUTT
//IR, MOTOR - START
if (irrecv.decode(&results)){
Serial.println(results.value, DEC);
irrecv.resume();
}
delay(100);
switch (results.value){
case 16712445: //STOPP >>|
digitalWrite(mhp, LOW);
digitalWrite(mhn, LOW);
digitalWrite(mvp, LOW);
digitalWrite(mvn, LOW);
currentDirection='S';
break;
case 16736925: //Forward CH
digitalWrite(mhp, LOW);
digitalWrite(mhn, HIGH);
digitalWrite(mvp, HIGH);
digitalWrite(mvn, LOW);
currentDirection='F';
break;
case 16754775: //Backward +
digitalWrite(mhp, HIGH);
digitalWrite(mhn, LOW);
digitalWrite(mvp, LOW);
digitalWrite(mvn, HIGH);
currentDirection='R';
break;
case 16720605: //Left
digitalWrite(mhp, HIGH);
digitalWrite(mhn, LOW);
digitalWrite(mvp, HIGH);
digitalWrite(mvn, LOW);
delay(100);
break;
case 16761405: //Right
digitalWrite(mhp, LOW);
digitalWrite(mhn, HIGH);
digitalWrite(mvp, LOW);
digitalWrite(mvn, HIGH);
delay(100);
break;
case 16769565: //Lights On CH+
digitalWrite(led, HIGH);
case 16753245: //Lights Off CH-
digitalWrite(led, LOW);
default://if no input continue in current mode
switch(currentDirection)
{
case 'S': //STOPP
digitalWrite(mhp, LOW);
digitalWrite(mhn, LOW);
digitalWrite(mvp, LOW);
digitalWrite(mvn, LOW);
currentDirection='S';
break;
case 'F': //Forward
digitalWrite(mhp, LOW);
digitalWrite(mhn, HIGH);
digitalWrite(mvp, HIGH);
digitalWrite(mvn, LOW);
currentDirection='F';
break;
case 'R': //Backward
digitalWrite(mhp, HIGH);
digitalWrite(mhn, LOW);
digitalWrite(mvp, LOW);
digitalWrite(mvn, HIGH);
currentDirection='R';
break;
}
}
//IR, MOTOR - SLUTT
}
Hi. The car still doesn't "stop" after turning
I managed to make the car "turn and stop" once, but I haven't managed to recreate that scenario. I have tried every possible combinations on my remote (forward then left, backward then left, left then right, and so on.. )
Is it possible to make the car stop after turning and not go back to the previous case? Would that be easier?
Thanks for all you good help btw!