Beispiel #1
0
int main()
{
   UART uart;

   std::string outputString;
   int outData;
   uart.initUart();

   std::string RPM="010C\r";
   std::string Speed="010D\r";
   
   uart.sendLine("ATZ\r");
  
   sleep(5);

   outputString = uart.receiveLineString();
   std::cout << outputString << std::endl;

   uart.sendLine(RPM);


   outData = uart.receiveLineData("010C41 0C ", 5);

   std::cout << outData << std::endl;

}
Beispiel #2
0
void query()
{

   ////////////////////////////////////////////////
   extern int curSpeed;
   extern int curRPM;
   extern int initFuel, prevFuel, curFuel;
   extern int initDist, curDist;
   extern int curTemp;
   extern int leftDist, rightDist;

   //Time Globals
   extern time_t rawTime;
   extern struct tm *prevTime, *curTime;
   extern int timeOffset;
   extern bool forwardMode;



   ////////////////////////////////////////////////

   int temp, count=0;
   UART uart;
   myI2C *sensorPtr0 = new myI2C();
   myI2C *sensorPtr1 = new myI2C();

   std::string RPM="010C\r";
   std::string Speed="010D\r";
   std::string Temperature="0105\r";
   std::string Fuel="012F\r";
   std::string Dist="0131\r";

   //   sensorPtr0->i2cSetAddress(DEVICE_ADDR0);
   //   sensorPtr1->i2cSetAddress(DEVICE_ADDR1);

   uart.initUart();

   uart.sendLine("ATZ\r");

   int fd = open( "/sys/class/gpio/gpio67/value", O_RDONLY | O_NONBLOCK );
   GIOChannel* channel = g_io_channel_unix_new( fd );
   GIOCondition cond = GIOCondition( G_IO_PRI );
   guint id = g_io_add_watch( channel, cond, onButtonEvent, 0 );


   usleep(5000000);



   //Get initial Distance
   //======================================
   uart.sendLine(Dist);
   temp=-1;
   while(temp==-1)
   {
      if ((temp=uart.receiveLineData("013141 31 ",5))!=-1)
      {
	 initDist=temp;
	 curDist=initDist;
      }
      usleep(500000);
   }
   //======================================

   //Get initial time
   //======================================
   time(&rawTime);
   prevTime=localtime(&rawTime);
   prevTime->tm_hour+=timeOffset;
   curTime=localtime(&rawTime);
   curTime->tm_hour+=timeOffset;
   if(prevTime->tm_hour<0)
   {
      prevTime->tm_hour+=24;
      curTime->tm_hour+=24;
   }
   //======================================

   //Get initial fuel level
   //======================================
   uart.sendLine(Fuel);
   temp=-1;
   while(temp==-1)
   {
      if ((temp=uart.receiveLineData("012F41 2F ",2))!=-1)
      {
	 initFuel=temp;
	 prevFuel=initFuel;
	 curFuel=initFuel;
      }
      usleep(500000);
   }
   //======================================

   //Query for Engine Temp
   //======================================
   uart.sendLine(Temperature);
   temp=-1;
   while(temp==-1)
   {
      if ((temp=uart.receiveLineData("010541 05 ",2))!=-1)
      {
	 curTemp=temp;
      }
      usleep(500000);
   }
   //======================================

   while(1)
   {
      //Forward Mode
      //======================================
      if(forwardMode)
      {

	 //Query for Speed
	 //======================================
	 uart.sendLine(Speed);
	 if ((temp=uart.receiveLineData("010D41 0D ",2))!=-1)
	 {
	    curSpeed=temp;
	 }
	 //======================================

	 usleep(500000);
	 //Query for RPM
	 //======================================
	 uart.sendLine(RPM);
	 if ((temp=uart.receiveLineData("010C41 0C ",5))!=-1)
	 {
	    curRPM=temp;
	 }
	 //======================================

	 //Get the time
	 //======================================
	 time(&rawTime);
	 curTime=localtime(&rawTime);
	 curTime->tm_hour+=timeOffset;
	 if(curTime->tm_hour < 0)
	 {
	    curTime->tm_hour+=24;
	 }
	 //======================================

	 usleep(500000);
	 //if it's been a minute, check fuel level and engine Temp
	 //======================================
	 if(count>99)
	 {
	    count=0;
	    prevTime=localtime(&rawTime);
	    prevTime->tm_hour+=timeOffset;
	    if(prevTime->tm_hour < 0)
	    {
	       prevTime->tm_hour+=24;
	    }
	    uart.sendLine(Fuel);
	    if ((temp=uart.receiveLineData("012F41 2F ",2))!=-1)
	    {
	       curFuel=temp;
	    }
	    usleep(500000);

	    //Query for Engine Temp
	    //======================================
	    if ((temp=uart.receiveLineData("010541 05 ",2))!=-1)
	    {
	       curTemp=temp;
	    }
	    //======================================
	    usleep(500000);
	 }
	 //======================================

	 //if the fuel level has changed,
	 //check distance
	 //======================================
	 if(prevFuel!=curFuel)
	 {
	    prevFuel=curFuel;
	    uart.sendLine(Dist);
	    if ((temp=uart.receiveLineData("013141 31 ",4))!=-1)
	    {
	       curDist=temp;
	    }
	    usleep(500000);
	 }

	 //if the speed is greater than 30MPH or 49 KPH
	 //check rear distance
	 //======================================
	 if(curSpeed > 49)
	 {
	    /*sensorPtr0->Send_I2C_Byte(0x00, 0x51);
	      usleep(68E3);
	      leftDist=sensorPtr0->Read_2I2C_Bytes(0x02);
	      sensorPtr1->Send_I2C_Byte(0x00, 0x51);
	      usleep(68E3);
	      rightDist=sensorPtr1->Read_2I2C_Bytes(0x02);*/
	 }
	 //======================================
      
      count++;

      }
      //======================================

      //Reverse Mode
      //======================================
      else
      {
	 usleep(1000000);
	 //Query reverse distance as much as possible
	 //======================================
	 /*sensorPtr0->Send_I2C_Byte(0x00, 0x51);
	   usleep(68E3);
	   leftDist=sensorPtr0->Read_2I2C_Bytes(0x02);
	   sensorPtr1->Send_I2C_Byte(0x00, 0x51);
	   usleep(68E3);
	   rightDist=sensorPtr1->Read_2I2C_Bytes(0x02);*/
	 //======================================

      }
   }
}