[Dprglist] Arduino Code Troubles

Pat Caron patcaron at mail.com
Fri Dec 17 15:40:15 PST 2021


OK, I will test again tomorrow.
...Pat C.

On Fri, Dec 17, 2021 at 5:35 PM Rud Merriam via DPRGlist <
dprglist at lists.dprg.org> wrote:

> Okay, so we know it is happening in the handling of the conditional. Run
> it twice. Once with the test for maxDistance removed and once with the test
> for equality removed. Also, add a print out of *maxDistance*. Need to
> make sure it is not being changed although the test with '200' there should
> show it isn't.
>
> If you get the same results I'm going to start drinking.
>
> Actually, I'll start wondering about the build process. I'm not familiar
> with PlatformIO. The Arduino IDE takes all the files, rearranges them, and
> then compiles the resulting file. That's unlike most C++ build systems. The
> "rearranging" can lead to some strange issues.
>
> -73 -
> *Rud Merriam K5RUD*
> *Mystic Lake Software* <http://mysticlakesoftware.com/>
>
> On 12/17/21 3:18 PM, Pat Caron via DPRGlist wrote:
>
> Here is the output from Rud's changes:
>
> --- Miniterm on /dev/ttyUSB-sensors  115200,8,N,1 ---
> --- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
> cm[0] = 0 0 999 999
> cm[1] = 95 95 999 999
> cm[2] = 91 91 999 999
> cm[3] = 84 84 999 999
> cm[4] = 251 251 999 999
> cm[0] = 0 0 999 999
> ...Pat C.
>
> On Fri, Dec 17, 2021 at 4:04 PM John Swindle via DPRGlist <
> dprglist at lists.dprg.org> wrote:
>
>>
>> From: Rud Merriam via DPRGlist <dprglist at lists.dprg.org>
>> To: dprglist at lists.dprg.org
>> Cc: Rud Merriam <rudmerriam at gmail.com>
>> Sent: Fri, Dec 17, 2021 2:35 pm
>> Subject: Re: [Dprglist] Arduino Code Troubles
>>
>> Obviously somethine strange happening. Grasping at a straw try replacing
>> the 'or' in the conditional with '||'. It shouldn't make a difference
>> but....
>> Started to make othere suggestions to localize the problem but to much
>> verbiage. Here is what I would try:
>>
>>   for (uint8_t x = 0; x < (SONAR_NUM + IR_NUM); x++) {
>>     Serial.print("cm[");
>>     Serial.print(x);
>>     Serial.print("] = ");
>>     Serial.print(cm[x]);
>>     Serial.print(" ");
>>
>>     if ((cm[x] == 0) || (cm[x] > maxDistance)) {
>>       Serial.print(cm[x]);	//
>>       Serial.print(" ");
>>
>>       cm[x] = 999;
>>
>>       Serial.print(cm[x]);	//
>>       Serial.print(" ");
>>
>>     }
>>
>>     Serial.println(cm[x]);
>>   }
>>
>>
>>
>> -73 -
>> *Rud Merriam K5RUD*
>> *Mystic Lake Software* <http://mysticlakesoftware.com/>
>>
>> On 12/17/21 10:13 AM, Pat Caron via DPRGlist wrote:
>>
>>
>> What I meant to say last night is the array size is cm[8].  The values
>> for SONAR_NUM == 3 and IR_NUM == 2
>> This should not be overrunning the array as it only loops through 5 times.
>> I have tried setting maxDistance as uint32_t without any difference.
>> I have commented out the sendData() function and added some Serial.print
>> statements prior to reassigning the values. (shown in output)
>>
>> #define SONAR_NUM 3
>> #define IR_NUM 2
>> uint32_t cm[8] = {0,0,0,0,0,0,0,0}; // Create array
>> uint16_t maxDistance = 200; // Also used with NewPing.h libraray
>> char *position[] = {"us_Left", "us_Mid", "us_Right", "ir_Left",
>> "ir_Right", "cm[5]", "cm[6]", "cm[7]"};
>> .
>> . // Other code here
>> .
>>
>> void oneSensorCycle() { // Sensor ping cycle complete, do something with
>> the results.
>>   for (uint8_t x = 0; x < (SONAR_NUM + IR_NUM); x++) {
>>     Serial.print("cm[");
>>     Serial.print(x);
>>     Serial.print("] = ");
>>     Serial.println(cm[x]);
>>     if ((cm[x] == 0) or (cm[x] > maxDistance)) {
>>       cm[x] = 999;
>>     }
>>   }
>>   if (troubleshoot) {
>>     for (uint8_t i = 0; i < (SONAR_NUM + IR_NUM); i++) {
>>       Serial.print("| ");
>>       Serial.print(position[i]);
>>       Serial.print(" = ");
>>       Serial.print(cm[i]);
>>       Serial.print("cm ");
>>     }
>>     Serial.print("| ");
>>     Serial.print("Time = ");
>>     Serial.print(elapsedMillis);
>>     Serial.print("mS");
>>     Serial.println();
>>   }
>>   //else {
>>   //  sendData();
>>   //}
>> }
>>
>>
>> Loop() {
>>   .// other code
>>   oneSensorCycle()
>>   . // more code
>> }
>>
>> Serial output:
>>
>> -- Miniterm on /dev/ttyUSB-sensors  115200,8,N,1 ---
>> --- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
>> cm[0] = 0
>> cm[1] = 95
>> cm[2] = 91
>> cm[3] = 85
>> cm[4] = 246
>> | us_Left = 999cm | us_Mid = 999cm | us_Right = 999cm | ir_Left = 999cm |
>> ir_Right = 999cm | Time = 44mS
>>
>> ...Pat C
>>
>>
>> On Fri, Dec 17, 2021 at 10:07 AM Chris Netter <netterchris at gmail.com>
>> wrote:
>>
>> The for loop stops at x < 8, so it won’t overrun.
>>
>> What if you remove the sendData() call?  Does that help?
>>
>> Also,  make sure you have declared any global variables which are
>> modified by interrupts or other tasks as “volatile”, otherwise the compile
>> may decide to optimize away parts of your code.
>>
>> Chris
>>
>> *From: *Doug Paradis <paradug at gmail.com>
>> *Sent: *Thursday, December 16, 2021 11:46 PM
>> *To: *Chris Netter <netterchris at gmail.com>
>> *Cc: *Pat Caron <patcaron at mail.com>; dprglist at lists.dprg.org
>> *Subject: *Re: [Dprglist] Arduino Code Troubles
>>
>> Pat,
>>     for (uint8_t x = 0; x < (SONAR_NUM + IR_NUM); x++) {
>>
>>     If  SONAR_NUM _ IR_NUM = 8 then you are overrunning the array which
>> goes 0 to 7.
>>
>> Regards,
>> Doug P.
>>
>> On Thu, Dec 16, 2021 at 8:53 PM Chris Netter via DPRGlist <
>> dprglist at lists.dprg.org> wrote:
>>
>> So Markus and Karim already pointed out that the original code snipped
>> works as designed.
>>
>> It’s also been pointed out already that you are mixing data types. I
>> don’t think that’s the issue, but worth trying to make both the array and
>> maxDistance uint16_t
>>
>> As for this new code snippet:
>>
>> I don’t see any obvious issue with the for loop.  Are you positive that SONAR_NUM
>> + IR_NUM == 8 ?   if not, you are overshooting the array and that can cause
>> all kinds of non-obvious issues.
>>
>> Also, what does sendData() do?  Could it have some side-effects?   Maybe
>> its causing a stack overflow, array bounds overflow, or similar, which in
>> turn causes non-obvious issues?
>>
>>
>>
>> *From: *Pat Caron via DPRGlist <dprglist at lists.dprg.org>
>> *Sent: *Thursday, December 16, 2021 9:04 PM
>> *To: *dprglist at lists.dprg.org
>> *Subject: *Re: [Dprglist] Arduino Code Troubles
>>
>> Hi guys, here is a better example to show what is happening taken from
>> actual code:
>>
>> .... other code
>>   for (uint8_t x = 0; x < (SONAR_NUM + IR_NUM); x++) {  // SONAR_NUM +
>> IR_NUM = 8
>>     if ((cm[x] == 0) || (cm[x] > maxDistance)) {
>>       cm[x] = 999;
>>     }
>>   sendData();
>>   }
>>
>> Printed values cm[0] to cm[5] (us_Left to ir_Right) without the above if
>> statement
>> | us_Left = 0cm | us_Mid = 95cm | us_Right = 51cm | ir_Left = 84cm |
>> ir_Right = 252cm | Time = 45mS
>>
>> Printed values cm[0] to cm[5] with the above if statement
>> \| us_Left = 999cm | us_Mid = 999cm | us_Right = 999cm | ir_Left = 999cm
>> | ir_Right = 999cm | Time = 44mS
>>
>> ...Pat C
>>
>> On Thu, Dec 16, 2021 at 8:45 PM Karim Virani <pondersome64 at gmail.com>
>> wrote:
>>
>> It's doing what it's coded to do
>>
>> On Thu, Dec 16, 2021 at 7:42 PM Pat Caron via DPRGlist <
>> dprglist at lists.dprg.org> wrote:
>>
>> Hi Murray, I did try that with the same results.  NewPing.h library is
>> looking for a uint16_t although it didn't complain when I tried that.
>>
>> ...Pat C
>>
>> On Thu, Dec 16, 2021 at 8:35 PM Murray Altheim via DPRGlist <
>> dprglist at lists.dprg.org> wrote:
>>
>> Hi Pat,
>>
>> What if you define maxDistance as uint32_t?
>>
>> Cheers,
>>
>> Murray
>>
>> On 17/12/21 2:27 pm, Pat Caron via DPRGlist wrote:
>> > Hi guys, I'm looking for help with the following Arduino code.
>> >
>> >      uint32_t cm[8] = {0,0,0,0,0,0,0,0}; // Create array
>> >      uint16_t maxDistance = 200; // Also used with NewPing.h library
>> >      .
>> >      . // Other code here
>> >      .
>> >      irSensorL.read(); // Read IR sensor... This is working!
>> >      cm[3] = irSensorL.ranging_data.range_mm/10; // This returns 268
>> >      if (cm[3] > maxDistance) {
>> >        cm[3] = 999;                 /
>> >      }
>> >      Serial.println(cm[3]);  / cm[3] value is always = 999
>> >      sendData();
>> >
>> > The cm[3] value is always 999 when I run this.
>> > If I comment out the if cm[3]... statement cm[3] value is then 268.
>> >
>> > ...Pat C
>> >
>> > _______________________________________________
>> > DPRGlist mailing list
>> > DPRGlist at lists.dprg.org
>> > http://lists.dprg.org/listinfo.cgi/dprglist-dprg.org
>> >
>>
>> --
>>
>> .........................................................................
>> Murray Altheim <murray18 at altheim dot com>                       = =
>> ===
>> http://www.altheim.com/murray/                                     ===
>> ===
>>                                                                     = =
>> ===
>>      In the evening
>>      The rice leaves in the garden
>>      Rustle in the autumn wind
>>      That blows through my reed hut.
>>             -- Minamoto no Tsunenobu
>>
>> _______________________________________________
>> DPRGlist mailing list
>> DPRGlist at lists.dprg.org
>> http://lists.dprg.org/listinfo.cgi/dprglist-dprg.org
>>
>> _______________________________________________
>> DPRGlist mailing list
>> DPRGlist at lists.dprg.org
>> http://lists.dprg.org/listinfo.cgi/dprglist-dprg.org
>>
>>
>> _______________________________________________
>> DPRGlist mailing list
>> DPRGlist at lists.dprg.org
>> http://lists.dprg.org/listinfo.cgi/dprglist-dprg.org
>>
>>
>>
>> _______________________________________________
>> DPRGlist mailing listDPRGlist at lists.dprg.orghttp://lists.dprg.org/listinfo.cgi/dprglist-dprg.org
>>
>> _______________________________________________
>> DPRGlist mailing list
>> DPRGlist at lists.dprg.org
>> http://lists.dprg.org/listinfo.cgi/dprglist-dprg.org
>> _______________________________________________
>> DPRGlist mailing list
>> DPRGlist at lists.dprg.org
>> http://lists.dprg.org/listinfo.cgi/dprglist-dprg.org
>>
>
> _______________________________________________
> DPRGlist mailing listDPRGlist at lists.dprg.orghttp://lists.dprg.org/listinfo.cgi/dprglist-dprg.org
>
> _______________________________________________
> DPRGlist mailing list
> DPRGlist at lists.dprg.org
> http://lists.dprg.org/listinfo.cgi/dprglist-dprg.org
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.dprg.org/pipermail/dprglist-dprg.org/attachments/20211217/84c290c4/attachment.html>


More information about the DPRGlist mailing list