element14 Community
element14 Community
    Register Log In
  • Site
  • Search
  • Log In Register
  • About Us
  • Community Hub
    Community Hub
    • What's New on element14
    • Feedback and Support
    • Benefits of Membership
    • Personal Blogs
    • Members Area
    • Achievement Levels
  • Learn
    Learn
    • Ask an Expert
    • eBooks
    • element14 presents
    • Learning Center
    • Tech Spotlight
    • STEM Academy
    • Webinars, Training and Events
    • Learning Groups
  • Technologies
    Technologies
    • 3D Printing
    • FPGA
    • Industrial Automation
    • Internet of Things
    • Power & Energy
    • Sensors
    • Technology Groups
  • Challenges & Projects
    Challenges & Projects
    • Design Challenges
    • element14 presents Projects
    • Project14
    • Arduino Projects
    • Raspberry Pi Projects
    • Project Groups
  • Products
    Products
    • Arduino
    • Avnet Boards Community
    • Dev Tools
    • Manufacturers
    • Multicomp Pro
    • Product Groups
    • Raspberry Pi
    • RoadTests & Reviews
  • Store
    Store
    • Visit Your Store
    • Choose another store...
      • Europe
      •  Austria (German)
      •  Belgium (Dutch, French)
      •  Bulgaria (Bulgarian)
      •  Czech Republic (Czech)
      •  Denmark (Danish)
      •  Estonia (Estonian)
      •  Finland (Finnish)
      •  France (French)
      •  Germany (German)
      •  Hungary (Hungarian)
      •  Ireland
      •  Israel
      •  Italy (Italian)
      •  Latvia (Latvian)
      •  
      •  Lithuania (Lithuanian)
      •  Netherlands (Dutch)
      •  Norway (Norwegian)
      •  Poland (Polish)
      •  Portugal (Portuguese)
      •  Romania (Romanian)
      •  Russia (Russian)
      •  Slovakia (Slovak)
      •  Slovenia (Slovenian)
      •  Spain (Spanish)
      •  Sweden (Swedish)
      •  Switzerland(German, French)
      •  Turkey (Turkish)
      •  United Kingdom
      • Asia Pacific
      •  Australia
      •  China
      •  Hong Kong
      •  India
      •  Korea (Korean)
      •  Malaysia
      •  New Zealand
      •  Philippines
      •  Singapore
      •  Taiwan
      •  Thailand (Thai)
      • Americas
      •  Brazil (Portuguese)
      •  Canada
      •  Mexico (Spanish)
      •  United States
      Can't find the country/region you're looking for? Visit our export site or find a local distributor.
  • Translate
  • Profile
  • Settings
Arduino
  • Products
  • More
Arduino
Arduino Forum Help with WiFi web server analog input code
  • Blog
  • Forum
  • Documents
  • Quiz
  • Events
  • Polls
  • Files
  • Members
  • Mentions
  • Sub-Groups
  • Tags
  • More
  • Cancel
  • New
Join Arduino to participate - click to join for free!
Actions
  • Share
  • More
  • Cancel
Forum Thread Details
  • State Not Answered
  • Replies 14 replies
  • Subscribers 393 subscribers
  • Views 1284 views
  • Users 0 members are here
  • wifi
  • web
  • scale
  • cell
  • load
  • weight
  • server
  • arduino
  • analog
Related

Help with WiFi web server analog input code

Former Member
Former Member over 11 years ago

Hi all,

 

I have written some code to display readings from an analog input (load cell from a digital scale) in my browser through a web server. However, when I have nothing on my load cell, the browser displays a weight value of -500 rather than 0. I know that the code I'm using for the load cell works, so the problem arises from how I've combined the load cell code with the WiFi web server code. I have tried to correct the issue, but I haven't been able to figure it out at all. Any help or ideas would be much appreciated. Thank you!

 

My Code


http://pastebin.com/embed_js.php?i=FsyCGy9Y

 

Sources


WiFi Web Server code: Tutorial: Arduino wi-fi server to Google Drive storage | Daviom

 

Load Cell code: https://github.com/Airtripper/load-cell-test/blob/master/load_cell_test.ino

 


The WiFi Web Server code uses a temperature sensor as the analog input and includes code for that purpose. I replaced the temperature sensor code with the Load Cell code.



Attachments:
Arduino_to_Google_Spreadsheet_7_14.ino.zip
  • Sign in to reply
  • Cancel
  • neilk
    0 neilk over 11 years ago

    Hi Michele

    A very nice project!

     

    The issue may be with your use of the dtostrf function, although I admit I am not familiar with it, but I've googled around and had a look.

     

    In the original example that you worked from, I observe that the code is:

     

       char temp[10];

       dtostrf(temperature, 2, 1, temp);


    so the char array temp is declared as 10 chars long, and the minimum width of the converted string is expected to be 2 chars (2nd Parameter)


    In your code you have used:

    1. char weight[4];
    2. dtostrf(loadGrams, 5, 0, weight);


    Thus your minimum converted string width is actually 1 character MORE than your char array weight.


    Whether or not this relevant, I don't know, but it looks suspicious. How about a couple of prints to serial monitor to show the values of loadGrams and string weight after the call to dtostr  and also to confirm that the value of loadGrams really is 0 when the cell is unloaded.


    "If in doubt, print it out"


    Best wishes


    Neil


    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Former Member
    0 Former Member over 11 years ago in reply to neilk

    Hi Neil,

     

    Thank you for responding, I really appreciate it. Great point about my use of dtostrf. I'm very new to Arduino and programming, so I'm not surprised I made that mistake.

     

    Here are the changes I made to the code to print weight and loadGrams to the Serial Monitor:

    http://pastebin.com/embed_js.php?i=yy1nxj8j


    Here is what the Serial Monitor shows as the values of loadGrams and weight:

    http://pastebin.com/embed_js.php?i=hqZGcv4z


    As you can see, loadGrams is -500.00 before and after dtostrf is called and weight is -500, all when the scale is unloaded. (Note that I did not include the complete output from the Serial Monitor sine I don't want my network name and IP address shown.) So, this suggests that something is going wrong with the load cell code, correct?

     

    Thanks again for helping out, Neil.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Robert Peter Oakes
    0 Robert Peter Oakes over 11 years ago in reply to Former Member

    I have a tutorial that reads from the analog inputs and presents them on a web page

     

    look here for the series Fast Track to Arduino Programming  there are not too many yet, there is a list to help find what you need.

     

    I am using an Ethernet port but the principle is exactly the same when using the WIFI

     

    Regards

     

    Peter

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • vish
    0 vish over 11 years ago

    Hi,

    What is the value of 'loadAdjustment'? In github, it's set to 0. is it same in your case also?

    And one more point. You could print analogSamplesAverage and do a manual calculation of map function just to ensure that it is working fine.

    This is the formula for manual calculation :

         float loadGrams = map(analogSamplesAverage, analogLow, analogHigh, loadLow, loadHigh);

    wil become

         loadGrams = ( analogSamplesAverage - analogLow ) * ( loadHigh - loadLow) / ( analogHigh - analogLow ) + loadLow

    formula from here.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Former Member
    0 Former Member over 11 years ago in reply to vish

    Hi Vishnu,

     

    Thanks for the suggestion about checking out analogSamplesAverage to see if something is going wrong with that calculation. I will look into that later today when I get home.


    loadAdjustment
    is essentially a way to zero the scale if there is a container on the scale that you don't want to weigh (e.g. if I have a container that weighs 5 grams that holds items weighing 40 grams, and I just want to record the weight of the items, I would set loadAdjustment equal to 5 so loadGrams would be 40 and not 45). Since I'm not using a container of any kind, loadAdjustment should be set to 0.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • neilk
    0 neilk over 11 years ago in reply to Former Member

    Hi Michele

     

    It's a pleasure to be of assistance. Have you changed the code as I suggested you need to and checked the printed values again?

     

    If the print still shows -500.00 then I guess there is a problem with the load cell code - in the averaging perhaps. Maybe there is a hitch when the load cell reading is zero - an untrapped exception.

     

    Good luck

     

    Neil

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Former Member
    0 Former Member over 11 years ago in reply to neilk

    Hi Neil,

     

    I just tried changing the code to the following:

     

    char weight[10];

    dtostrf(loadGrams, 5, 0, weight);

     

    Unfortunately, the prints still show -500. I also tried char weight[20], but that didn't change the print. So, I believe there is something wrong with the load cell code, likely caused by the way I have combined the two sets of code.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Former Member
    0 Former Member over 11 years ago in reply to vish

    Hi Vishnu,

     

    As shown below, I printed out analogSamplesAverage twice to see what its value is in the Serial Monitor:

     

    http://pastebin.com/embed_js.php?i=1sGEeTY3

     

    Both times, analogSamplesAverage prints as 0. I also tried replacing the map function that I used with the formula manual calculation, as shown below, but analogSamplesAverage still prints as 0 both times:


    http://pastebin.com/embed_js.php?i=MHqGQpJz


    So, it seems that something is going wrong with the running average/smoothing functionality of the code. 

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • neilk
    0 neilk over 11 years ago in reply to Former Member

    Hi Michele

     

    Well that's one thing that isn't the problem then image.

     

    At least by printing things out, you are eliminating potential errors.

     

    Good luck with digging deeper into the load cell code - maybe by printing out each value and the running average as you collect a series of samples.....

     

    Neil

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Former Member
    0 Former Member over 11 years ago in reply to neilk

    Thanks, Neil.

     

    I've definitely learned a lot about how one diagnoses a coding problem. Very helpful.


    Michele

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
>
element14 Community

element14 is the first online community specifically for engineers. Connect with your peers and get expert answers to your questions.

  • Members
  • Learn
  • Technologies
  • Challenges & Projects
  • Products
  • Store
  • About Us
  • Feedback & Support
  • FAQs
  • Terms of Use
  • Privacy Policy
  • Legal and Copyright Notices
  • Sitemap
  • Cookies

An Avnet Company © 2025 Premier Farnell Limited. All Rights Reserved.

Premier Farnell Ltd, registered in England and Wales (no 00876412), registered office: Farnell House, Forge Lane, Leeds LS12 2NE.

ICP 备案号 10220084.

Follow element14

  • X
  • Facebook
  • linkedin
  • YouTube