25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.

3 ay önce
12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. #include "scale.h"
  2. void Scale::init() {
  3. scaled_weight = EEPROM.readDouble(e_scale);
  4. int gain = EEPROM.readInt(e_gain);
  5. hx711.begin(out, clck, gain);
  6. offset = init_reading();
  7. }
  8. long Scale::init_reading() {
  9. hx711.read_average(20);
  10. return hx711.read_average(NUMBER_OF_READINGS);
  11. }
  12. void Scale::read() {
  13. raw = hx711.read();
  14. actual_gram = (raw - offset) / scaled_weight;
  15. if (abs(actual_gram - average_gram) > EPSILON) {
  16. sum = 0;
  17. count = 0;
  18. sum_raw = 0;
  19. average_raw = raw;
  20. average_gram = actual_gram;
  21. }
  22. else {
  23. sum += actual_gram;
  24. sum_raw += raw;
  25. count++;
  26. average_gram = sum / count;
  27. average_raw = sum_raw / count;
  28. }
  29. }
  30. void Scale::tare() {
  31. offset = average_raw;
  32. }
  33. void Scale::calibrate() {
  34. scaled_weight = (raw - offset) / get_calibration_weight();
  35. EEPROM.updateDouble(e_scale, scaled_weight);
  36. }