More Serial Trouble


hi. in program works great. however, in program gather gyro data. data contaminated byte command sets motor speed. how can prevent happening.


//libraries
#include <afmotor.h>
#include <softwareserial.h>
#include "math.h"


//software serial
#define rxpin 6    // defines "recieve" pin software serial motor controller
#define txpin 7    // defines "transmit" pin software serial motor controller
#define resetpin 8 // defines reset pin motor controller

//variable declaration
softwareserial motorserial = softwareserial(rxpin, txpin);
float vzero=analogread(0);
float vinputv=analogread(1);
float vinputh=analogread(2);
float biasv=0.00;
float biash=0.00;
float sense=2.00;
float angvv=0.000000;
float angvh=0.000000;
float analogv=0.00;
float analogh=0.00;
float angvvcorr=4.28*2.5;
float angvhcorr=4.28*2.5;
int correction=0;
int mspeed=0;
int input=0;

char upk='8';
char downk='2';
char stablek='5';
char leftk='4';
char rightk='6';
char sup='a';
char sdown='s';
int setspeed=0;
void setup()
{
    serial.begin(9600);      
    serial.flush();
    initmotor();
}

void loop()
{
 
 if ( serial.available() > 0)
  {
 
      input=serial.read();
     
 
      if (input==sup)
       {    
         setspeed=setspeed+5;
         setmotor(setspeed);


       }
       else if (input==sdown)
       {    
         setspeed=setspeed-5;
         setmotor(setspeed);


       }
 
      else if(input==upk)
       {
     
       }
      else if(input==stablek)
       {
 
       }
      else if(input==downk)
       {
   
       }
      else if(input==leftk)
       {

           
       }
      else if(input==rightk)
       {

       
       }
 
      else if(input=='q')
      {
             gyro();
         
      }
  }  
}

void gyro()
{
   vzero=analogread(0);
   vinputv=analogread(1);
   vinputh=analogread(2);

   if (correction==0)
    {
        biasv=vinputv-vzero;
        biash=vinputh-vzero;
        correction=1;
    }

   analogv=(vinputv)-(vzero)-biasv;
   analogh=(vinputh)-(vzero)-biash;

   if((analogv==-2)||(analogv==-1)||(analogv==1)||(analogv==2))
    {
        analogv=0.00;
    }
   if((analogh==-2)||(analogh==-1)||(analogh==1)||(analogh==2))
    {
        analogh=0.00;
    }

   angvv=(angvvcorr*(analogv/sense));
   angvh=(angvhcorr*(analogh/sense));

   serial.write(char(int(angvv)/3));
   serial.write(char(int(angvh)/3));
   


}




void initmotor()
{

    pinmode(txpin, output);// serial transmit pin
    pinmode(resetpin, output);      // motor reset pin

    motorserial.begin(9600);

   // reset motor controller (by setting low high signals resetpin)
    digitalwrite(resetpin, high);      
    delay(10);
    digitalwrite(resetpin, low);
    delay(10);
    digitalwrite(resetpin, high);
    delay(10);
}

void setmotor(int speed)
{
    int motorindex=0;
    unsigned char buffer[4];// create packet buffer
    unsigned char index = 0;
    unsigned char targetspeed = speed;
   
    buffer[0] = 0x80;
    buffer[1] = 0x00;
    buffer[2] = 0x00 | index;
    buffer[3] = targetspeed;
     
    sendpacket(buffer, 4);
}

void sendpacket(unsigned char *buffer, int buffercount)
{
    for(int = 0; < buffercount; i++)
      {
         motorserial.print(buffer,byte);
      }
}

i'm not sure mean "but data contaminated byte command sets motor speed" -- think problem casts incorrect in serial.write() commands.

also: use # button posting code.


Arduino Forum > Forum 2005-2010 (read only) > Software > Interfacing > More Serial Trouble


arduino

Comments

Popular posts from this blog

CAN'T INSTALL MAMBELFISH 1.5 FROM DIRECTORY - Joomla! Forum - community, help and support

error: expected initializer before 'void'

CPU load monitoring using GPIO and leds - Raspberry Pi Forums