Strange Bluetooth Problem


hi guys, thank time.
i'm building toy boat works 3 motors, 2 of them connected l298n bridge, , other 1 works transistor (it's located on of boat). however, problem when press direction on phone (it works bluetooth), motors start going backwards , after while right direction. here full code (skip first bit due it's music). i'd appreciate kind of suggestion. know ultrasonic sensor (hc-sr04), can't figure what. in code, "atras" function makes go backwards. thank you!

code: [select]
// altavoz
int speakerpin = 9;

//sensor ultrasonidos
const int trigpin = a2;
const int echopin = a4;

//iluminación (no tira led)

int ldr = a0;
int luz;
int ledldr = a5;
int ledder = 7;
int ledizq = 8;
softwareserial bt(2, 3);

// motor a
int ena = 6;
int in1 = 13;
int in2 = 12;

// motor b
int enb = 5;
int in3 = 11;
int in4 = 10;

// motor c

int btransistor = 4;
int vel = 190;

void gameofthrones() {
 for(int i=0; i<4; i++) {
    tone(speakerpin, note_g4);

    delay(500);
    notone(speakerpin);
 
    tone(speakerpin, note_c4);
 
    delay(500);
    notone(speakerpin);
 

    tone(speakerpin, note_ds4);
   
    delay(250);
    notone(speakerpin);


    tone(speakerpin, note_f4);

    delay(250);
    notone(speakerpin);
 
  }

 /* for(int i=0; i<4; i++){
    tone(speakerpin, note_g4);
   
    delay(500);
    notone(speakerpin);
   

    tone(speakerpin, note_c4);
 
    delay(500);
    notone(speakerpin);
 

    tone(speakerpin, note_e4);

    delay(250);
    notone(speakerpin);
   

    tone(speakerpin, note_f4);
   
    delay(250);
    notone(speakerpin);
 
  } */

   

}

void setup()
{
  bt.begin(9600) ;
  // declaramos todos los pines como salidas
  pinmode (ena, output);
  pinmode (enb, output);
  pinmode (in1, output);
  pinmode (in2, output);
  pinmode (in3, output);
  pinmode (in4, output);
  pinmode (ledldr, output);
  pinmode (ldr, input);
  pinmode (ledder, output);
  pinmode(speakerpin, output);
  pinmode(ledizq, output);
  pinmode(btransistor, output);
  gameofthrones();
  serial.begin(9600);
}

void loop()
{
  luz = analogread(ldr);
 
  if(luz<600){
    digitalwrite(ledldr, high);
  }
  if(luz>600){
    digitalwrite(ledldr, low);
   
  }
 
  long duration, dcm;

 
  pinmode(trigpin, output);
  digitalwrite(trigpin, low);
  delaymicroseconds(2);
  digitalwrite(trigpin, high);
  delaymicroseconds(10);
  digitalwrite(trigpin, low);

  pinmode(echopin, input);
  duration = pulsein(echopin, high);

 
  dcm = microsecondstocentimeters(duration);
serial.print(dcm);
 if(dcm<2){
  atras();
 }


  if (bt.available()){
    switch (bt.read())
    {
      case 'f':
        adelante();
       break;
      case 'b':
        atras();
        break;
      case 'r':
        derecha();
       break;
      case 'l':
        izquierda();
       break;
      case 's':
        parar();
        break;
   
}
}
delay(1);
 
}

void adelante ()
{
  //direccion motor a
  digitalwrite (in1, high);
  digitalwrite (in2, low);
analogwrite (ena, vel); //velocidad motor a
  digitalwrite(btransistor, high);
  digitalwrite(ledder, low);
  digitalwrite(ledizq, low);
 
  //direccion motor b
  digitalwrite (in3, high);
  digitalwrite (in4, low);
  analogwrite (enb, vel); //velocidad motor b

  //direccion motor c
 
 
}

void atras ()
{
  //direccion motor a
  digitalwrite (in1, low);
  digitalwrite (in2, high);
 analogwrite (ena, vel);  //velocidad motor a
  digitalwrite(btransistor, low);
  digitalwrite(ledder, low);
  digitalwrite(ledizq, low);
  //direccion motor b
  digitalwrite (in3, low);
  digitalwrite (in4, high);
  analogwrite (enb, vel); //velocidad motor b
   //direccion motor c
 
}

void derecha ()
{
  //direccion motor a
  digitalwrite (in1, low);
  digitalwrite (in2, high);
  analogwrite (ena, vel); //velocidad motor a
   digitalwrite(btransistor, low);
    digitalwrite(ledder, high);
    digitalwrite(ledizq, low);
  //direccion motor b
  digitalwrite (in3, high);
  digitalwrite (in4, low);
  analogwrite (enb, vel); //velocidad motor a
}

void izquierda ()
{
  //direccion motor a
  digitalwrite (in1, high);
  digitalwrite (in2, low);
  analogwrite (ena, vel); //velocidad motor a
   digitalwrite(btransistor, low);
   digitalwrite(ledder, low);
    digitalwrite(ledizq, high);
  //direccion motor b
  digitalwrite (in3, low);
  digitalwrite (in4, high);
  analogwrite (enb, vel); //velocidad motor a
}

void parar ()
{
  //direccion motor a
  digitalwrite (in1, low);
  digitalwrite (in2, low);
  analogwrite (ena, 0); //velocidad motor a
   digitalwrite(btransistor, low);
  digitalwrite(ledizq, low);
   digitalwrite(ledder, low);
  //direccion motor b
  digitalwrite (in3, low);
  digitalwrite (in4, low);
  analogwrite (enb, 0); //velocidad motor a
 

}

long microsecondstocentimeters(long microseconds)
{
  // speed of sound 340 m/s or 29 microseconds per centimeter.
  // ping travels out , back, find distance of the
  // object take half of distance travelled.
  return microseconds / 29 / 2;
}

i suspect code call atras() function @ line 137 problem.

i reckon should serial data first thing in loop() , make decision based on serial data , variable dcm should happen.

as separate issue not style switch (bt.read()) because not allow view received value debugging. make 2 (or 4) separate lines in
code: [select]
datareceived = bt,read()
// serial,print("bt value ");
// serial.println(datareceived);
switch(datareceived)


you may @ serial input basics.

...r


Arduino Forum > Using Arduino > Programming Questions > Strange Bluetooth Problem


arduino

Comments

Popular posts from this blog

Flip address is out of range arduino uno r3

Arduino DUE ADC to DAC Piezo 30 Khz-100Khz

Indesign and MathType fonts