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:
code without serial commands:
edit: checked again, both code work "correctly" long microcontroller's connected through serial port.
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
Post a Comment