pleasedontcode

Vehicle Data rev_10

Jul 11th, 2025
428
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Arduino 11.56 KB | None | 0 0
  1. /********* Pleasedontcode.com **********
  2.  
  3.     Pleasedontcode thanks you for automatic code generation! Enjoy your code!
  4.  
  5.     - Terms and Conditions:
  6.     You have a non-exclusive, revocable, worldwide, royalty-free license
  7.     for personal and commercial use. Attribution is optional; modifications
  8.     are allowed, but you're responsible for code maintenance. We're not
  9.     liable for any loss or damage. For full terms,
  10.     please visit pleasedontcode.com/termsandconditions.
  11.  
  12.     - Project: Vehicle Data
  13.     - Source Code NOT compiled for: Arduino Mega
  14.     - Source Code created on: 2025-07-11 21:35:53
  15.  
  16. ********* Pleasedontcode.com **********/
  17.  
  18. /****** SYSTEM REQUIREMENTS *****/
  19. /****** SYSTEM REQUIREMENT 1 *****/
  20.     /* send data from bluetooth to android app */
  21. /****** END SYSTEM REQUIREMENTS *****/
  22.  
  23. /* START CODE */
  24.  
  25. /****** DEFINITION OF LIBRARIES *****/
  26. // No additional libraries needed for basic serial communication
  27.  
  28. /****** FUNCTION PROTOTYPES *****/
  29. void setup(void);
  30. void loop(void);
  31. float T_interpolate(byte DS_Temp); // Prototype for the interpolation function
  32.  
  33. // Declare Bluetooth serial object
  34. // Assuming Bluetooth module connected to Serial2
  35. // You can change to Serial3 if needed
  36. // For example: HardwareSerial BluetoothSerial(2);
  37. HardwareSerial& BluetoothSerial = Serial2;
  38.  
  39. void setup()
  40. {
  41.   // **** I/O configuration and setup first
  42.   pinMode(ALDLTestPin, INPUT);                                              // define D4 as an input pin to listen for the 160 baud input data
  43.   pinMode(DecodeDataOutputPin, INPUT_PULLUP);                                // User convenience pin.  Grounding this pin will send Decoded Data to the Serial Port
  44.   pinMode(HexDataOutputPin, INPUT_PULLUP);                                   // User convenience pin.  Grounding this pin will send HEX Data to the Serial Port
  45.   // **** Now, start the serial functions
  46.   Serial.begin(115200);                                                     // Open serial monitoring port
  47.   Serial1.begin(8192);                                                      // Test the capability of esp 8222 to run at 8192 baud directly
  48.   BluetoothSerial.begin(9600);                                                // Initialize Bluetooth serial at 9600 baud
  49.   delay(1500);                                                              // delay for diagnostic print
  50.   Serial.println("Ready for data capture");
  51.   // **** Initialize the variables, flags, etc
  52.   i=0;                                                                      // Reset the preamble index flag
  53. }
  54.  
  55. void loop() {
  56.                                                            
  57. // Wait for silence period on the ALDL
  58. Serial.print("wait for silence ");
  59. SilenceFound = false;                                                     // Reset silence flag
  60. StartTime= micros();                                                      // First look for an active signal or a timeout - initialize timer
  61.                                                                           // Should exit this loop on the start of a bit
  62. while ((micros() - StartTime)< 15000)                                     // Wait for a 15 ms silent period
  63.   {
  64.     if (digitalRead(4)== 0)                                               // Any line activity resets the start time
  65.      {
  66.        StartTime= micros();                                               // Timing starts over
  67.      }
  68.   }                                                            
  69. SilenceFound = true;                                                      // Set the silence flag on exit
  70.  
  71. while (SilenceFound == true)                                              // While silence found flag is set, continuously request and transmit Mode 1 data
  72.   {                                                                       // Now send a Mode 1 dump command
  73.    PreambleFound = false;                                                 // Reset preamble found flag                                                            
  74.  
  75.    while (PreambleFound == false)                                         // First look at data until the preamble has been found will read data forever until a preamble is read
  76.    {                                                                      // Loop through this while preamble has not been found
  77.     Serial.print(" M1 cmd ");
  78.     i=0;                                                                  // use bytecounter to send the outgoing Mode1CMD sequence
  79.     while (i<4)
  80.     {
  81.       Serial1.write(M1Cmd[i]);                                            // sends 1 byte of the command sequence
  82.       i++;
  83.     }  
  84.  
  85.     Serial.println(" Finding Preamble  ");  
  86.     i=0;                                                                  // Then reset byte counter and scan incoming data for the preamble
  87.     PreambleTimer = millis();                                             // Initialize timer to detect timeout
  88.     while ((((millis() - PreambleTimer) < 100)) && (PreambleFound == false))                    // First look at data for 100 ms or until the preamble has been found will read data forever until a preamble is read
  89.       {
  90.         if (Serial1.available() > 0)                                      // Check for available data on the serial port
  91.         {
  92.           ALDLbyte = Serial1.read();                                      // Read it and look for the preamble
  93.           if ( ALDLbyte == Preamble[i])                                   // Look for matching byte of data preamble in serial stream
  94.             {
  95.               i++;                                                        // Increment the preamble index and look for the next character
  96.               if (i>2)PreambleFound = true;                               // Once three characters are found, the preamble has been found, time to read in the data
  97.             }        
  98.           else                                                            // If there isn't match, start over looking from the beginning
  99.             {
  100.               PreambleFound = false;                                      // Reset preamble found flag
  101.               i=0;                                                        // Reset the preamble index flag          
  102.             }                                                             // End of Preamble check
  103.           }                                                               // End of Serial Available & read
  104.        }                                                                  // End of the preamble finding routine either preamble found or timeout          
  105.     }
  106.                                                                           // While loop only exits after a valid preamble is found - *** need to add a timeout option here later
  107.                                                                           // READ A COMPLETE DATA STREAM PACKET
  108.     DataStreamIndex = 1;                                                  // Once a valid preamble has been found set the data stream index to the first byte
  109.     while (DataStreamIndex < 65)                                          // and read data up to byte #63 + 1 byte Checksum = 64 Bytes total
  110.       {
  111.           if (Serial1.available() > 0)                                    // Check for available data on the serial port
  112.             {
  113.               DataBytes[DataStreamIndex] = Serial1.read();                // And read bytes into the array as they come
  114.               DataStreamIndex++;                                          // update the index
  115.             }                                                             // end of read if
  116.       }                                                                   // End of datastream read while - reads 63 bytes of data and skips the checksum byte for new...
  117.    
  118.     // Checksum Calculation  - Checksum Byte = 0x200 - Sum of all bytes transmitted including the Preamble
  119.     i=1;                                                                  // use bytecounter as an index
  120.     CheckTotal = 0x80+0x95+0x01;                                          // First start by summing the preamble bytes
  121.     while (i< (ByteCount ))                                               // Add recived bytes to the Checksum
  122.       {                                                                   // except the Checksum byte itself
  123.         CheckTotal = CheckTotal + DataBytes[i];                           // add a byte
  124.         i++;
  125.       }  
  126.     CheckSum = 0x200 - CheckTotal;                                        // Two's complement the checksum and cast it to a byte
  127.     // Send data over Bluetooth to Android app
  128.     BluetoothSerial.print("Data: ");
  129.     for (int j=1; j<=ByteCount; j++) {
  130.       BluetoothSerial.print(DataBytes[j], HEX);
  131.       BluetoothSerial.print(" ");
  132.     }
  133.     BluetoothSerial.println();
  134.  
  135.     // now proceed with the original code for checksum verification and data processing
  136.     if (digitalRead(DecodeDataOutputPin) == LOW) {
  137.       // existing code for decoded data output
  138.     } else if (digitalRead(HexDataOutputPin) == LOW) {
  139.       // existing code for hex data output
  140.     } else {
  141.       // existing code for raw binary data output
  142.     }
  143.   }
  144. }
  145.  
  146. // Keep the T_interpolate function as is
  147. float T_interpolate(byte DS_Temp)                                         // Subroutine to interpolate MAT temperature from data stream
  148. {                                                                         // Input data is one byte of AD from the temperature thermistor (Very Non Linear)
  149. //Temperature scale for interpolating air temperature taken from the ADS file There are 38 values in the table ranging from -40C for a value of 1 to 200 C for a value of 256
  150.   const float TempScale[38] = {1,5,6,9,11,15,19,25,31,38,47,57,67,79,91,104,117,130,142,154,164,175,184,192,200,206,212,217,222,226,230,233,235,238,240,242,244,256};  // Data Values (38)
  151.   const float TempValue[38] = {-40,-30,-25,-20,-15,-10,-5,0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100,105,110,115,120,125,130,135,140,145,200}; // Temp Values (38)
  152.   float T_Range;                                                          // Interpolation range
  153.   float T_Diff;                                                           // Difference between input value and the bottom of the interpolation range
  154.   float TempRange;                                                        // Difference between points on the output value scale
  155.   float Temperature;                                                      // Interpolated Temperature value
  156.   int i = 0;
  157.   while (i<38)                                                            // Loop through increasing values to find start of the interpolation
  158.     {
  159.       if  (TempScale[i]> DS_Temp) break;                                  // Until a higher value is found - exit with i pointing to the higher value for interpolation
  160.       i++;
  161.     }
  162.   if (i>0)                                                                // Figure out the linear interpolation range and difference along the scale
  163.     {
  164.       T_Range = TempScale[i] - TempScale[i-1];                            // Range between these points along the input scale (all calculated as a floating point)
  165.       T_Diff =  DS_Temp - TempScale[i-1];                                 // Difference between data and the lower point
  166.       TempRange = TempValue[i] - TempValue[i-1];                          // Difference between points along the output value scale  
  167.       Temperature =  TempValue[i-1] + (T_Diff/T_Range)*TempRange;         // Interpolated Temperature
  168.     }
  169.   else Temperature = TempValue[0];                                        // unless the input data is <= to the bottom of the scale and the minimum value is used
  170.  
  171.   return Temperature;                                                     // Return the interpolated temperature
  172. }
  173.  
Advertisement
Add Comment
Please, Sign In to add comment