Go Down

Topic: Serial.readBytesUntil() (Read 3135 times) previous topic - next topic

Robin2

Likely I didn't ask the question using the correct lingo, which is very important on this site (if the words in the question are not just right, people fly off in every direction with their responses).
I don't think we impose a standard of accuracy that is as high as that required by the compiler.


I still have no idea why you object to using the straightforward non-blocking code in Serial Input Basics. It works.

...R
Two or three hours spent thinking and reading documentation solves most programming problems.

adwsystems

I was heading down the serialEvent() road as I had previous been informed it was interrupt driven.

As for Serial Input Basics, I'm working to reverse engineer it now to understand how to incorporate in the PLX-DAQ program to then incorporate it into the main program.

This is my first pass. It is not optimized but functional and seems to be working with PLX-DAQ. There's too much code in loop(), but it is a start.

Code: [Select]

int i = 0;

String inputString = "";         // a String to hold incoming data
boolean stringComplete = false;  // whether the string is complete

void setup()
 {
  // open serial connection
   Serial.begin(9600);
   pinMode(3, INPUT_PULLUP);
   inputString.reserve(200);
 }

void StartTransfer()
 {
    //Serial.println("CLEARDATA"); // clears sheet starting at row 2
    Serial.println("CLEARSHEET"); // clears sheet starting at row 1
   
  // define 5 columns named "Date", "Time", "Timer", "Counter" and "millis"
    Serial.println("LABEL,Date,Time,Timer,Counter,millis");

  // set the names for the 3 checkboxes
    Serial.println("CUSTOMBOX1,LABEL,Stop logging at 250?");
    Serial.println("CUSTOMBOX2,LABEL,Resume log at 350?");
    Serial.println("CUSTOMBOX3,LABEL,Quit at 450?");

  // check 2 of the 3 checkboxes (first two to true, third to false)
    Serial.println("CUSTOMBOX1,SET,1");
    Serial.println("CUSTOMBOX2,SET,1");
    Serial.println("CUSTOMBOX3,SET,0");

    i=0;
 }
 
void SendData()
 {
  static boolean wait_for_response = false;
 
 // simple print out of number and millis. Output e.g.,: "DATA,DATE,TIME,TIMER,4711,13374,AUTOSCROLL_20"
  if (!wait_for_response)
   { Serial.println( (String) "DATA,DATE,TIME,TIMER," + i++ + "," + millis() + ",AUTOSCROLL_20" ); }

    // clear some cells in Excel (rectangle range from B10 to D20)
  if (i==100)
   { Serial.println("ClearRange,B,10,D,20"); }

    // do a simple beep in Excel on PC
  if (i==150)
   { Serial.println("BEEP"); }

    // read a value (in this case integer) from Excel (from a sheet by name)
  if (i==200)
   {
    if (!wait_for_response)
     {
      Serial.println("CELL,GET,FROMSHEET,Simple Data,E,4");  // ==> request value from sheet
      wait_for_response = true;
     }
     else
      {
       if (stringComplete == true)
        {
         Serial.println( (String) "Value of cell E4 is: " + inputString.toInt()); // result displayed in Excel DirectDebugWindow to double check
         stringComplete = false;
         inputString = "";
         wait_for_response = false;
        }
      } 
   }

    // check value of custombox1 on PLX DAQ in Excel and if
    // checkbox is checked then send the command to pause logging
  if (i==250)
   {
    if (!wait_for_response)
     {
      Serial.println("CUSTOMBOX1,GET");  // ==> request value from sheet
      wait_for_response = true;
     }
     else
      {
       if (stringComplete == true)
        {
         int stoplogging =  inputString.toInt();
         Serial.println( (String) "Value of stoplogging/checkbox is: " + stoplogging); // result displayed in Excel DirectDebugWindow to double check
         if(stoplogging)
           Serial.println("PAUSELOGGING");
         stringComplete = false;
         inputString = "";
         wait_for_response = false;
        }
      } 
   }

    // get a true random number from the computer
  if (i==300)
   {
    if (!wait_for_response)
     {
      Serial.println("GETRANDOM,-4321,12345"); // between -4321 to 12345
      wait_for_response = true;
     }
     else
      {
       if (stringComplete == true)
        {
         int rndseed = inputString.toInt();
         Serial.println( (String) "Got random value '" + rndseed + "' from Excel" );
         // Note: this information is not posted to the Excel sheet because "DATA" is missing
         // instead this information can be seen in the direct debug window
         stringComplete = false;
         inputString = "";
         wait_for_response = false;
        }
      } 
   }

    // and now resume logging
  if (i==350)
   {
    if (!wait_for_response)
     {
      Serial.println("CUSTOMBOX2,GET");
      wait_for_response = true;
     }
     else
      {
       if (stringComplete == true)
        {
         int resumelogging = inputString.toInt();
         if(resumelogging)
           Serial.println("RESUMELOGGING");
         stringComplete = false;
         inputString = "";
         wait_for_response = false;
        }
      } 
   }

    // post to specific cells on default sheet as well as named sheet
  if (i==400)
   {
    Serial.println("CELL,SET,G10,400 test 1 string"); // default sheet active in PLX DAQ Excel
    Serial.println("CELL,SET,ONSHEET,Simple Data,G,11,400 test 2 string"); // named sheet available in PLX DAQ Excel
   }
       
  // and for forced quit of Excel with saving the file first
  if (i==123)
   {
    if (!wait_for_response)
     {
      Serial.println("CUSTOMBOX3,GET");
      wait_for_response = true;
     }
     else
      {
       if (stringComplete == true)
        {
         if (inputString.toInt())
          {
           Serial.println("SAVEWORKBOOKAS,450-Lines-File");
           Serial.println("FORCEEXCELQUIT");
          }
          else
           {
            Serial.println("No forced Excel quit requested!");
           }
         stringComplete = false;
         inputString = "";
         wait_for_response = false;
        }
      } 
   }
 
 }

void ReadSerial()
 {
  char inChar = (char)Serial.read();
    // add it to the inputString:
  inputString += inChar;
    // if the incoming character is a newline, set a flag so the main loop can
    // do something about it:
  if (inChar == 10)
   { stringComplete = true; }
 }
 
void loop()
 {
  static boolean transfer_data = false;
  int start_transfer;
 
  start_transfer = digitalRead(3);
 
  if ((start_transfer==1) && (transfer_data == false))
   {
    transfer_data = true;
    StartTransfer();
   }
   else if ((start_transfer==0) && (transfer_data == true))
    {
     transfer_data = false;
    }

  if (transfer_data)
   {
    SendData();
   }
  if (Serial.available())
   { ReadSerial(); }
 }

Robin2

#32
Aug 07, 2017, 03:25 pm Last Edit: Aug 07, 2017, 03:26 pm by Robin2
This is my first pass.
You could replace these two lines in your loop() function
Code: [Select]
 if (Serial.available())
   { ReadSerial(); }

with
Code: [Select]
recvWithEndMarker();
if you include my function in your program.

It is not a good idea to use the String (capital S) class on an Arduino as it can cause memory corruption in the small memory on an Arduino. Just use cstrings - char arrays terminated with 0.

...R
Two or three hours spent thinking and reading documentation solves most programming problems.

adwsystems

#33
Aug 07, 2017, 10:01 pm Last Edit: Aug 07, 2017, 10:03 pm by adwsystems
You could replace these two lines in your loop() function
Code: [Select]
if (Serial.available())
   { ReadSerial(); }

with
Code: [Select]
recvWithEndMarker();
if you include my function in your program.

It is not a good idea to use the String (capital S) class on an Arduino as it can cause memory corruption in the small memory on an Arduino. Just use cstrings - char arrays terminated with 0.

...R
First option didn't work so well as it wasn't compatible with anything except the example. On a leap of faith, I did take you second suggestion. I have never used the String class before, but it was in the example and worked the first try. I am more familiar with cstrings anyhow.

Code: [Select]

int i = 0;

char inputString[200];         // a String to hold incoming data
boolean stringComplete = false;  // whether the string is complete

void setup()
 {
  // open serial connection
   Serial.begin(9600);
   pinMode(3, INPUT_PULLUP);
 }

void StartTransfer()
 {
    //Serial.println("CLEARDATA"); // clears sheet starting at row 2
    Serial.println("CLEARSHEET"); // clears sheet starting at row 1
   
  // define 5 columns named "Date", "Time", "Timer", "Counter" and "millis"
    Serial.println("LABEL,Date,Time,Timer,Counter,millis");

  // set the names for the 3 checkboxes
    Serial.println("CUSTOMBOX1,LABEL,Stop logging at 250?");
    Serial.println("CUSTOMBOX2,LABEL,Resume log at 350?");
    Serial.println("CUSTOMBOX3,LABEL,Quit at 450?");

  // check 2 of the 3 checkboxes (first two to true, third to false)
    Serial.println("CUSTOMBOX1,SET,1");
    Serial.println("CUSTOMBOX2,SET,1");
    Serial.println("CUSTOMBOX3,SET,0");

    i=0;
 }
 
void SendData()
 {
  static boolean wait_for_response = false;
 
 // simple print out of number and millis. Output e.g.,: "DATA,DATE,TIME,TIMER,4711,13374,AUTOSCROLL_20"
  if (!wait_for_response)
   { Serial.println( (String) "DATA,DATE,TIME,TIMER," + i++ + "," + millis() + ",AUTOSCROLL_20" ); }

    // clear some cells in Excel (rectangle range from B10 to D20)
  if (i==100)
   { Serial.println("ClearRange,B,10,D,20"); }

    // do a simple beep in Excel on PC
  if (i==150)
   { Serial.println("BEEP"); }

    // read a value (in this case integer) from Excel (from a sheet by name)
  if (i==200)
   {
    if (!wait_for_response)
     {
      Serial.println("CELL,GET,FROMSHEET,Simple Data,E,4");  // ==> request value from sheet
      wait_for_response = true;
     }
     else
      {
       if (stringComplete == true)
        {
         Serial.println( (String) "Value of cell E4 is: " + atoi(inputString)); // result displayed in Excel DirectDebugWindow to double check
         stringComplete = false;
         ClearInputString();
         wait_for_response = false;
        }
      } 
   }

    // check value of custombox1 on PLX DAQ in Excel and if
    // checkbox is checked then send the command to pause logging
  if (i==250)
   {
    if (!wait_for_response)
     {
      Serial.println("CUSTOMBOX1,GET");  // ==> request value from sheet
      wait_for_response = true;
     }
     else
      {
       if (stringComplete == true)
        {
         int stoplogging =  atoi(inputString);
         Serial.println( (String) "Value of stoplogging/checkbox is: " + stoplogging); // result displayed in Excel DirectDebugWindow to double check
         if(stoplogging)
           Serial.println("PAUSELOGGING");
         stringComplete = false;
         ClearInputString();
         wait_for_response = false;
        }
      } 
   }

    // get a true random number from the computer
  if (i==300)
   {
    if (!wait_for_response)
     {
      Serial.println("GETRANDOM,-4321,12345"); // between -4321 to 12345
      wait_for_response = true;
     }
     else
      {
       if (stringComplete == true)
        {
         int rndseed = atoi(inputString);
         Serial.println( (String) "Got random value '" + rndseed + "' from Excel" );
         // Note: this information is not posted to the Excel sheet because "DATA" is missing
         // instead this information can be seen in the direct debug window
         stringComplete = false;
         ClearInputString();
         wait_for_response = false;
        }
      } 
   }

    // and now resume logging
  if (i==350)
   {
    if (!wait_for_response)
     {
      Serial.println("CUSTOMBOX2,GET");
      wait_for_response = true;
     }
     else
      {
       if (stringComplete == true)
        {
         int resumelogging = atoi(inputString);
         if(resumelogging)
           Serial.println("RESUMELOGGING");
         stringComplete = false;
         ClearInputString();
         wait_for_response = false;
        }
      } 
   }

    // post to specific cells on default sheet as well as named sheet
  if (i==400)
   {
    Serial.println("CELL,SET,G10,400 test 1 string"); // default sheet active in PLX DAQ Excel
    Serial.println("CELL,SET,ONSHEET,Simple Data,G,11,400 test 2 string"); // named sheet available in PLX DAQ Excel
   }
       
  // and for forced quit of Excel with saving the file first
  if (i==123)
   {
    if (!wait_for_response)
     {
      Serial.println("CUSTOMBOX3,GET");
      wait_for_response = true;
     }
     else
      {
       if (stringComplete == true)
        {
         if (atoi(inputString))
          {
           Serial.println("SAVEWORKBOOKAS,450-Lines-File");
           Serial.println("FORCEEXCELQUIT");
          }
          else
           {
            Serial.println("No forced Excel quit requested!");
           }
         stringComplete = false;
         ClearInputString();
         wait_for_response = false;
        }
      } 
   }
 }

void ClearInputString()
 {
  int x;
  for (x=-0; x++; x<sizeof(inputString))
   { inputString[x]='\0'; }
 }
 
void ReadSerial()
 {
  static byte inputStringIDX = 0;
 
  char inChar = Serial.read();
  if (inputStringIDX < (sizeof(inputString) -1))
   {
    if (inChar == 10)
     {
      inputString[inputStringIDX] = '\0';
      inputStringIDX=0;
      stringComplete = true;
     }
     else
      {
       inputString[inputStringIDX] = inChar;
       inputStringIDX+=1;
      }
   }
 }
 
void loop()
 {
  static boolean transfer_data = false;
  int start_transfer;
 
  start_transfer = digitalRead(3);
 
  if ((start_transfer==1) && (transfer_data == false))
   {
    transfer_data = true;
    StartTransfer();
   }
   else if ((start_transfer==0) && (transfer_data == true))
    {
     transfer_data = false;
    }

  if (transfer_data)
   {
    SendData();
   }
  if (Serial.available())
   { ReadSerial(); }
 }

Robin2

First option didn't work so well as it wasn't compatible with anything except the example.
As you have not posted the program in which you tried it I have no idea why it did not work for you. It does work for me and for other Forum members.

...R
Two or three hours spent thinking and reading documentation solves most programming problems.

adwsystems

#35
Aug 07, 2017, 11:39 pm Last Edit: Aug 08, 2017, 12:12 am by adwsystems
As you have not posted the program in which you tried it I have no idea why it did not work for you. It does work for me and for other Forum members.

...R
Why would I post broke code? Your suggestion was to copy and paste the Serial Basics into the previously posted code and replace the if statement with the function call. I did. I pasted in Example 3 (a more complete system) It didn't work. The example was written for a very specific format and structure which is wrong for my application. By the time I removed what didn't apply I wasn't left with much, including a compilable (is that word?) sketch.

As you suggest, it isn't that difficult, please feel free to move ahead. I already spent more than 4 hours reverse engineering the sketch to the basic the tactics and then to adapt it to create the working program posted.

Your example are nice but very specific. I don't see any time I could or would have been able to use them without extensive heavy modifications.

Do you see anything wrong with the posted sketch? Any gaps or improvements you suggest while you are critiquing it?

Robin2

#36
Aug 08, 2017, 12:15 am Last Edit: Aug 08, 2017, 12:17 am by Robin2
Why would I post broke code?
WTF would be the point of posting working code?

If you post the broken code we may be able to tell you how to fix it.

...R
Two or three hours spent thinking and reading documentation solves most programming problems.

adwsystems

#37
Aug 08, 2017, 01:10 am Last Edit: Aug 08, 2017, 12:52 pm by adwsystems
WTF would be the point of posting working code?
For the same reason you posted working code. As an example of how to do something, or as a solution to a problem, or to show you have solved someone else's problem.

As you have not posted the program in which you tried it I have no idea why it did not work for you. It does work for me and for other Forum members.

...R
OK. Here is exactly what you wanted. The original program with your function substituted for the if (Serial.available()) statement.

Code: [Select]

int i = 0;

String inputString = "";         // a String to hold incoming data
boolean stringComplete = false;  // whether the string is complete

void setup()
 {
  // open serial connection
   Serial.begin(9600);
   pinMode(3, INPUT_PULLUP);
   inputString.reserve(200);
 }

void StartTransfer()
 {
    //Serial.println("CLEARDATA"); // clears sheet starting at row 2
    Serial.println("CLEARSHEET"); // clears sheet starting at row 1
   
  // define 5 columns named "Date", "Time", "Timer", "Counter" and "millis"
    Serial.println("LABEL,Date,Time,Timer,Counter,millis");

  // set the names for the 3 checkboxes
    Serial.println("CUSTOMBOX1,LABEL,Stop logging at 250?");
    Serial.println("CUSTOMBOX2,LABEL,Resume log at 350?");
    Serial.println("CUSTOMBOX3,LABEL,Quit at 450?");

  // check 2 of the 3 checkboxes (first two to true, third to false)
    Serial.println("CUSTOMBOX1,SET,1");
    Serial.println("CUSTOMBOX2,SET,1");
    Serial.println("CUSTOMBOX3,SET,0");

    i=0;
 }
 
void SendData()
 {
  static boolean wait_for_response = false;
 
 // simple print out of number and millis. Output e.g.,: "DATA,DATE,TIME,TIMER,4711,13374,AUTOSCROLL_20"
  if (!wait_for_response)
   { Serial.println( (String) "DATA,DATE,TIME,TIMER," + i++ + "," + millis() + ",AUTOSCROLL_20" ); }

    // clear some cells in Excel (rectangle range from B10 to D20)
  if (i==100)
   { Serial.println("ClearRange,B,10,D,20"); }

    // do a simple beep in Excel on PC
  if (i==150)
   { Serial.println("BEEP"); }

    // read a value (in this case integer) from Excel (from a sheet by name)
  if (i==200)
   {
    if (!wait_for_response)
     {
      Serial.println("CELL,GET,FROMSHEET,Simple Data,E,4");  // ==> request value from sheet
      wait_for_response = true;
     }
     else
      {
       if (stringComplete == true)
        {
         Serial.println( (String) "Value of cell E4 is: " + inputString.toInt()); // result displayed in Excel DirectDebugWindow to double check
         stringComplete = false;
         inputString = "";
         wait_for_response = false;
        }
      } 
   }

    // check value of custombox1 on PLX DAQ in Excel and if
    // checkbox is checked then send the command to pause logging
  if (i==250)
   {
    if (!wait_for_response)
     {
      Serial.println("CUSTOMBOX1,GET");  // ==> request value from sheet
      wait_for_response = true;
     }
     else
      {
       if (stringComplete == true)
        {
         int stoplogging =  inputString.toInt();
         Serial.println( (String) "Value of stoplogging/checkbox is: " + stoplogging); // result displayed in Excel DirectDebugWindow to double check
         if(stoplogging)
           Serial.println("PAUSELOGGING");
         stringComplete = false;
         inputString = "";
         wait_for_response = false;
        }
      } 
   }

    // get a true random number from the computer
  if (i==300)
   {
    if (!wait_for_response)
     {
      Serial.println("GETRANDOM,-4321,12345"); // between -4321 to 12345
      wait_for_response = true;
     }
     else
      {
       if (stringComplete == true)
        {
         int rndseed = inputString.toInt();
         Serial.println( (String) "Got random value '" + rndseed + "' from Excel" );
         // Note: this information is not posted to the Excel sheet because "DATA" is missing
         // instead this information can be seen in the direct debug window
         stringComplete = false;
         inputString = "";
         wait_for_response = false;
        }
      } 
   }

    // and now resume logging
  if (i==350)
   {
    if (!wait_for_response)
     {
      Serial.println("CUSTOMBOX2,GET");
      wait_for_response = true;
     }
     else
      {
       if (stringComplete == true)
        {
         int resumelogging = inputString.toInt();
         if(resumelogging)
           Serial.println("RESUMELOGGING");
         stringComplete = false;
         inputString = "";
         wait_for_response = false;
        }
      } 
   }

    // post to specific cells on default sheet as well as named sheet
  if (i==400)
   {
    Serial.println("CELL,SET,G10,400 test 1 string"); // default sheet active in PLX DAQ Excel
    Serial.println("CELL,SET,ONSHEET,Simple Data,G,11,400 test 2 string"); // named sheet available in PLX DAQ Excel
   }
       
  // and for forced quit of Excel with saving the file first
  if (i==123)
   {
    if (!wait_for_response)
     {
      Serial.println("CUSTOMBOX3,GET");
      wait_for_response = true;
     }
     else
      {
       if (stringComplete == true)
        {
         if (inputString.toInt())
          {
           Serial.println("SAVEWORKBOOKAS,450-Lines-File");
           Serial.println("FORCEEXCELQUIT");
          }
          else
           {
            Serial.println("No forced Excel quit requested!");
           }
         stringComplete = false;
         inputString = "";
         wait_for_response = false;
        }
      } 
   }
 
 }

const byte numChars = 32;
char receivedChars[numChars];   // an array to store the received data

boolean newData = false;

void recvWithEndMarker()
 {
    static byte ndx = 0;
    char endMarker = '\n';
    char rc;
   
    while (Serial.available() > 0 && newData == false) {
        rc = Serial.read();

        if (rc != endMarker) {
            receivedChars[ndx] = rc;
            ndx++;
            if (ndx >= numChars) {
                ndx = numChars - 1;
            }
        }
        else {
            receivedChars[ndx] = '\0'; // terminate the string
            ndx = 0;
            newData = true;
        }
    }
}

void loop()
 {
  static boolean transfer_data = false;
  int start_transfer;
 
  start_transfer = digitalRead(3);
 
  if ((start_transfer==1) && (transfer_data == false))
   {
    transfer_data = true;
    StartTransfer();
   }
   else if ((start_transfer==0) && (transfer_data == true))
    {
     transfer_data = false;
    }

  if (transfer_data)
   {
    SendData();
   }
  recvWithEndMarker();
 }

Robin2

OK. Here is exactly what you wanted. The original program with your function substituted for the if (Serial.available()) statement.
Thank you. However you have not told me what happens when you tried to run it.

You don't seem to have included the necessary variable declarations. And I don't see any code in the rest of your program that responds to the variable newData.

...R
Two or three hours spent thinking and reading documentation solves most programming problems.

adwsystems

#39
Aug 08, 2017, 12:51 pm Last Edit: Aug 08, 2017, 12:52 pm by adwsystems
Your instructions were to include your function and replace the if statement with the function call. I did. It compiles but doesn't respond or send anything. SO there is more to it than just adding your function and calling it. After I go through and rework it to include one variable set or the other (mine or yours), then it works. You asked to use your function, I did. You asked for the broken code to be posted. I did. I have not followed you on most of your posts, so I figured you wanted the broken code to fix it yourself. After several hours work, I have the working program I posted. Why did you want to walk through this exercise?


Delta_G

#40
Aug 08, 2017, 05:31 pm Last Edit: Aug 08, 2017, 05:31 pm by Delta_G
Man this guy is awfully combative.  Why don't you just leave him alone and let him learn by himself and with Google.  He obviously doesn't want to be taught anything here.

OP:  why do you keep posting here if you don't want to learn anything?  There's another section called gigs and collaborations where you can pay someone to just fix your code without worrying about people trying to help you learn to do it on your own.
|| | ||| | || | ||  ~Woodstock

Please do not PM with technical questions or comments.  Keep Arduino stuff out on the boards where it belongs.

PaulS

Quote
There's another section called gigs and collaborations where you can pay someone to just fix your code without worrying about people trying to help you learn to do it on your own.
Even in Gigs and Collaboration, I tend to try to get people to learn to do it (whatever it is) themselves, so the worry that someone would want OP to learn something is not unfounded.

Delta_G

#42
Aug 08, 2017, 05:49 pm Last Edit: Aug 08, 2017, 05:51 pm by Delta_G
Yeah but at least there he can preface his post with something like, "I have no interest in learning to do this myself please just fix me code" and then he doesn't have to worry that someone might try to teach him something.  Or he could even add, "If you try to help me learn I'll be overly literal with your direction and then get combative when you try to figure out what part I don't understand because it makes me feel dumb and I can't handle being confronted with anything where someone else knows more than me" and then folks like you and I would just avoid him. At least that would help to eliminate the combative attitude.
|| | ||| | || | ||  ~Woodstock

Please do not PM with technical questions or comments.  Keep Arduino stuff out on the boards where it belongs.

Robin2

Your instructions were to include your function and replace the if statement with the function call. I did. It compiles but doesn't respond or send anything. SO there is more to it than just adding your function and calling it.
As you had not told me that you did not understand my examples I assumed that you did and would know how to incorporate one of them.

Code: [Select]
Why did you want to walk through this exercise?
Because I wanted to ensure that you had not found a problem in my example code that I would need to fix.

...R
Two or three hours spent thinking and reading documentation solves most programming problems.

adwsystems

#44
Aug 08, 2017, 09:50 pm Last Edit: Aug 08, 2017, 10:08 pm by adwsystems
If you all recall, the original post was if Serial.readBytesUntil() and/or readStringUntil() was blocking or non-blocking. We have ventured three or more degrees away from the original post. Questions has been asked an some answers given. It has been quite a meandering conversation. I'm fine with it all and even revealed some additional items about the "Arduino IDE" that weren't readily available.

Quote
He obviously doesn't want to be taught anything here.

OP:  why do you keep posting here if you don't want to learn anything?  There's another section called gigs and collaborations where you can pay someone to just fix your code without worrying about people trying to help you learn to do it on your own.
Though I appreciate the conversation, there are 44 posts and only 4 of which are useful or provide any information or teaching. I am here to learn, but there are 40 posts that are a lot of "do this." No explanation as to how or why; ie., no teaching. (I have a pet peeve about taking classes at $$$$$$$$ per credit, only to sit for 3 hours per week and listen to the professor read from the textbook. I want to be taught, not read to.)

Code: [Select]
Why did you want to walk through this exercise?
Because I wanted to ensure that you had not found a problem in my example code that I would need to fix.
...R
I can't tell if it works or not as it was not a module I could use verbatim. So I guess its a no win-no lose.

I thank you all for the information on serialEvent(), Serial.readxxxxuntil(), and the "Arduino IDE". All the information that I did not see (might have been there and I didn't see it), but needed to know.

I would not mind a few folks that are using PLX-DAQ to trying the resultant and post your thoughts. NetDevil, have you seen the post? Do you have any feedback?[quote author=Delta_G

Go Up