With serial, my program works the way I want it; without serial, it doesn't


i got program work couple of buttons drive 2 separate motors forward , backwards. in total, 4 separate buttons. used "serial.println()" verify buttons being pressed. tested , worked way like.

when tell motor move forward, can simultaneously tell motor b move backwards. it's gravy until remove serial commands. doing that, can 1 command @ time, rather simultaneously. inputs why it's happening way?

code serial commands , works fine microcontroller connected serial port. bolded parts took out code sorta works:
quote
#include <bmserial.h>
#include <roboclaw.h>

#define address 0x80

roboclaw roboclaw(8,9);

// joypad buttons
const int upa = 2;
const int downa = 3;
const int upb = 4;
const int downb = 5;

void setup()
{
 pinmode(upa, input);
 pinmode(downa, input);
 pinmode(upb, input);
 pinmode(downb, input);
 
 
 digitalwrite(2, high);
 digitalwrite(3, high);
 digitalwrite(4, high);
 digitalwrite(5, high);
 
 roboclaw.begin(2400);
 serial.begin(9600);
}

void loop()
{
 
   if(digitalread(upa) == low)
 {
   roboclaw.forwardm1(address, 96);
   serial.println( f( "up a" ) );
 }

   if(digitalread(downa) == low)
 {  
   roboclaw.backwardm1(address, 96);
   serial.println( f( "down a" ) );
 }
 
 
   if(digitalread(upb) == low)
 {    
   roboclaw.forwardm2(address, 96);
   serial.println( f( "up b" ) );
 }
 
   if(digitalread(downb) == low)
 {    
   roboclaw.backwardm2(address, 96);
   serial.println( f( "down b" ) );
;  
 }

   if(digitalread(upa) == high && digitalread(downa) == high && digitalread(upb) == high && digitalread(downb) == high)
 {
   roboclaw.forwardm1(address, 0);
   roboclaw.forwardm2(address, 0);
   roboclaw.backwardm1(address, 0);
   roboclaw.backwardm2(address, 0);
   serial.println( f( "0 velocity" ) );
 }
 
}


code without serial commands:
code: [select]
#include <bmserial.h>
#include <roboclaw.h>

#define address 0x80

roboclaw roboclaw(8,9);

// joypad buttons
const int upa = 2;
const int downa = 3;
const int upb = 4;
const int downb = 5;

void setup()
{
 pinmode(upa, input);
 pinmode(downa, input);
 pinmode(upb, input);
 pinmode(downb, input);
 
 
 digitalwrite(2, high);
 digitalwrite(3, high);
 digitalwrite(4, high);
 digitalwrite(5, high);
 
 roboclaw.begin(2400);
}

void loop()
{
 
   if(digitalread(upa) == low)
 {
   roboclaw.forwardm1(address, 96);
 }

   if(digitalread(downa) == low)
 {  
   roboclaw.backwardm1(address, 96);  
 }
 
 
   if(digitalread(upb) == low)
 {    
   roboclaw.forwardm2(address, 96);  
 }
 
   if(digitalread(downb) == low)
 {    
   roboclaw.backwardm2(address, 96);
;  
 }

   if(digitalread(upa) == high && digitalread(downa) == high && digitalread(upb) == high && digitalread(downb) == high)
 {
   roboclaw.forwardm1(address, 0);
   roboclaw.forwardm2(address, 0);
   roboclaw.backwardm1(address, 0);
   roboclaw.backwardm2(address, 0);
 }
 
}


edit: checked again, both code work "correctly" long microcontroller's connected through serial port.


the serial commands take time execute - real difference.

at 9600 baud 1char per millisec if add delay of 5-10 millis expect work to.

that time needed debounce buttons (not sure on btw)


Arduino Forum > Using Arduino > Programming Questions > With serial, my program works the way I want it; without serial, it doesn't


arduino

Comments

Popular posts from this blog

Thread: PKI Client 5.00 install (for eToken Pro)

ATmega2560-Arduino Pin Mapping

Crossfader Arduino Tutorial