Здравствуйте!
Требуется помощь по лабораторной работе.
Проблема с реализацией весов на Ардуино. Задача устройства таже, что и в заголовке. То есть надо задать начальный вес и сравнивать его со взвешиваемым, выводя значения на дисплей и производя сигнал при отклонении от заданного веса. В качестве эмулятора использовал сайт wokwi.com. Прошу помочь поправить код и указать на ошибки.
Срок до сдачи отчета: две недели.
Основной код выглядит так: (прошу не закидывать гнилыми помидорами, так как опыта в С++ и с Ардуино вообще нет)
Схема, которую я сделал на том сайте:
Также, если интересно, код этой схемы для того же wokwi.com:
В общем подсказали тут, что HX711 не к тем пинам подключил. Вроде заработал, но все равно заместо веса нули выдает и пищалка бесконечно пищит. Еще нажатые кнопки с клавиатуры только по одной на дисплей печатает.
Требуется помощь по лабораторной работе.
Проблема с реализацией весов на Ардуино. Задача устройства таже, что и в заголовке. То есть надо задать начальный вес и сравнивать его со взвешиваемым, выводя значения на дисплей и производя сигнал при отклонении от заданного веса. В качестве эмулятора использовал сайт wokwi.com. Прошу помочь поправить код и указать на ошибки.
Срок до сдачи отчета: две недели.
Основной код выглядит так: (прошу не закидывать гнилыми помидорами, так как опыта в С++ и с Ардуино вообще нет)
C++:
#include <Arduino.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#include <HX711.h>
#define buzzer 2 //пин пищалки
#define DT 0 //пин датчика веса
#define SCK 1 //пин датчика веса
HX711 scale;
float calibration_factor = -0.15;
float gramm; //переменная для граммов
float delta; //переменная для погрешности измерения веса, относительно введенных данных и фактических
LiquidCrystal_I2C lcd(0x27, 20, 4); //адрес с пинами жкд
const byte ROWS = 4; //ряды клавиатуры
const byte COLS = 4; //колонки клавиатуры
char keys[ROWS][COLS] = //массивы кнопок
{
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {14, 15, 16, 17}; //пины кнопок по рядам
byte colPins[COLS] = {18, 19, 20, 21}; //пины кнопок по колонкам
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
void setup()
{
Serial.begin(9600);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Enter weight:"); //с помощью курсора на первой строке задается фраза "ввести вес"
lcd.setCursor(0, 2);
lcd.print("Weight:"); //с помощью курсора на третьей строке задается фраза "вес"
scale.begin(DT, SCK); //пины датчика веса
scale.set_scale();
scale.tare();
scale.set_scale(calibration_factor); //для калибровочного значения
}
void loop()
{
char key = keypad.getKey(); //получение значения нажатой кнопки
if (key){
lcd.setCursor(0, 1);
lcd.print(key); //вывод нажатых кнопок на второй строке дисплея
}
Serial.print("Reading: ");
gramm *= 0.035274; //перевод полученного значения с датчика HX711 в граммы
Serial.print(gramm); //вывод граммов в порт
Serial.println(" grams");
lcd.setCursor(0, 3);
lcd.print(gramm); //вывод граммов на дисплей 4 строкой
delta = key - gramm; //отклонение веса
if(delta + 1 > 0)
{
tone(2, 1000, 3000); //если вес больше заданного, то такая частота выводимого звука с длительностью
}
else if(delta - 1 < 0)
{
tone(2, 500, 3000); //если вес меньше заданного, то такая частота
}
else
{
noTone(2); //в противном случае нет никаких звуков с пищалки
}
}
Также, если интересно, код этой схемы для того же wokwi.com:
C++:
{
"version": 1,
"author": "Anonymous maker",
"editor": "wokwi",
"parts": [
{ "type": "wokwi-arduino-mega", "id": "mega", "top": 154.2, "left": -70.8, "attrs": {} },
{
"type": "wokwi-membrane-keypad",
"id": "keypad1",
"top": -126.8,
"left": 418.4,
"attrs": {}
},
{ "type": "wokwi-hx711", "id": "cell1", "top": 329, "left": 377, "attrs": { "type": "5kg" } },
{
"type": "wokwi-buzzer",
"id": "bz1",
"top": -84,
"left": 299.4,
"attrs": { "volume": "0.1" }
},
{
"type": "wokwi-lcd2004",
"id": "lcd1",
"top": -137.6,
"left": -109.6,
"attrs": { "pins": "i2c" }
}
],
"connections": [
[ "cell1:VCC", "mega:5V", "red", [ "h-288", "v0", "h-2.3" ] ],
[ "keypad1:R1", "mega:14", "green", [ "v9.6", "h-105.6", "v-153.6", "h-213.1" ] ],
[ "keypad1:R2", "mega:15", "green", [ "v19.2", "h-125.2", "v-153.6", "h-194" ] ],
[ "keypad1:R3", "mega:16", "green", [ "v28.8", "h-144.3", "v-153.6", "h-174.9" ] ],
[ "keypad1:R4", "mega:17", "green", [ "v38.4", "h-163.4", "v-153.6", "h-155.8" ] ],
[ "keypad1:C1", "mega:18", "green", [ "v48", "h-182.5", "v-153.6", "h-136.7" ] ],
[ "keypad1:C2", "mega:19", "green", [ "v57.6", "h-201.6", "v-153.6", "h-117.1" ] ],
[ "keypad1:C4", "mega:21", "green", [ "v76.8", "h-240.3", "v-153.6", "h-78.9" ] ],
[ "mega:20", "keypad1:C3", "green", [ "v-38.4", "h98", "v153.6", "h220.95" ] ],
[ "cell1:DT", "mega:0", "green", [ "h-19.2", "v-0.5", "h-182.4", "v-201.6" ] ],
[ "cell1:SCK", "mega:1", "gold", [ "h0" ] ],
[ "cell1:GND", "mega:GND.3", "black", [ "v-0.3", "h-268.8", "v-16.5" ] ],
[ "lcd1:VCC", "mega:5V", "red", [ "h-19.2", "v451.3", "h218.5" ] ],
[ "lcd1:SDA", "mega:SDA", "#8f4814", [ "h-28.8", "v221", "h163.6" ] ],
[ "lcd1:SCL", "mega:SCL", "gold", [ "h-38.4", "v221.1", "h163.2" ] ],
[ "lcd1:GND", "mega:GND.1", "black", [ "h-9.6", "v230.4", "h163.4" ] ],
[ "bz1:1", "mega:GND.1", "black", [ "v48", "h-172.8" ] ],
[ "bz1:2", "mega:2", "red", [ "v57.6", "h-173.2" ] ]
],
"dependencies": {}
}
В общем подсказали тут, что HX711 не к тем пинам подключил. Вроде заработал, но все равно заместо веса нули выдает и пищалка бесконечно пищит. Еще нажатые кнопки с клавиатуры только по одной на дисплей печатает.
Изменено: