Я работаю над проектом, использующим Arduino для управления испытательной машиной на сжатие/растяжение. Смещение рассчитывается на основе импульсов датчика, подключенного к цифровому входу. Логика расчета смещения работает отлично, когда тест не активен, но как только тест запускается, значение смещения фиксируется на 0 и не обновляется.
Вот упрощенный цикл код:
cpp
Копировать код
void loop() {
// Verifica comandos recebidos via Serial
if (Serial.available() > 0) {
String command = Serial.readStringUntil('\n');
command.trim();
if (command == "C") {
calibrateScale();
} else if (command == "N") {
resetCalibration();
} else if (command == "IC") {
contagemRegressiva();
x = 0; // Reseta o contador
displacement = 0; // Reseta o deslocamento
ensaioAtivo = true; // Inicia o ensaio
TEnsaio = "COMPRESSAO...";
} else if (command == "IT") {
contagemRegressiva();
x = 0; // Reseta o contador
displacement = 0; // Reseta o deslocamento
ensaioAtivo = true; // Inicia o ensaio
TEnsaio = "TRACAO...";
} else if (command == "P") {
pararMotor();
ensaioAtivo = false;
lcd.setCursor(0, 0);
lcd.print("STOP S.O.S");
}
}
// Atualiza deslocamento independentemente do ensaio
if (digitalRead(input) == HIGH && state == 0) {
state = 1; // Define o estado para 1
x = x + 1; // Incrementa o contador de pulsos
displacement = x * 2; // Calcula o deslocamento
}
if (digitalRead(input) == LOW) {
state = 0; // Redefine o estado
}
// Lógica do ensaio ativo
if (ensaioAtivo) {
float cargaAtual = abs(scale.get_units());
if (cargaAtual >= MAX_LOAD) {
ensaioAtivo = false;
pararMotor();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("CARGA MAX");
lcd.setCursor(0, 1);
lcd.print("P:");
lcd.print(cargaAtual, 2);
lcd.print("N");
} else if (ultimaCarga > 2 && (ultimaCarga - cargaAtual) / ultimaCarga >= LOAD_DROP_THRESHOLD) {
ensaioAtivo = false;
pararMotor();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("RUPTURA OK!");
lcd.setCursor(0, 1);
lcd.print("P:");
lcd.print(ultimaCarga, 2);
lcd.print("N");
} else {
// Exibe informações do ensaio durante a execução
lcd.setCursor(0, 0);
lcd.print(TEnsaio);
lcd.setCursor(0, 1);
lcd.print("d:");
lcd.print(displacement, 0); // Exibe deslocamento
lcd.print("mm ");
lcd.print("P:");
lcd.print(cargaAtual, 2);
lcd.print("N");
}
ultimaCarga = cargaAtual;
delay(200);
}
// Exibe deslocamento no monitor Serial
Serial.print("Deslocamento: ");
Serial.print(displacement);
Serial.println(" mm");
}
Подробнее здесь: https://stackoverflow.com/questions/792 ... no-project
Переменная смещения не обновляется во время теста в проекте Arduino ⇐ C++
Программы на C++. Форум разработчиков
-
Anonymous
1733731166
Anonymous
Я работаю над проектом, использующим Arduino для управления испытательной машиной на сжатие/растяжение. Смещение рассчитывается на основе импульсов датчика, подключенного к цифровому входу. Логика расчета смещения работает отлично, когда тест не активен, но как только тест запускается, значение смещения фиксируется на 0 и не обновляется.
Вот упрощенный цикл код:
cpp
Копировать код
void loop() {
// Verifica comandos recebidos via Serial
if (Serial.available() > 0) {
String command = Serial.readStringUntil('\n');
command.trim();
if (command == "C") {
calibrateScale();
} else if (command == "N") {
resetCalibration();
} else if (command == "IC") {
contagemRegressiva();
x = 0; // Reseta o contador
displacement = 0; // Reseta o deslocamento
ensaioAtivo = true; // Inicia o ensaio
TEnsaio = "COMPRESSAO...";
} else if (command == "IT") {
contagemRegressiva();
x = 0; // Reseta o contador
displacement = 0; // Reseta o deslocamento
ensaioAtivo = true; // Inicia o ensaio
TEnsaio = "TRACAO...";
} else if (command == "P") {
pararMotor();
ensaioAtivo = false;
lcd.setCursor(0, 0);
lcd.print("STOP S.O.S");
}
}
// Atualiza deslocamento independentemente do ensaio
if (digitalRead(input) == HIGH && state == 0) {
state = 1; // Define o estado para 1
x = x + 1; // Incrementa o contador de pulsos
displacement = x * 2; // Calcula o deslocamento
}
if (digitalRead(input) == LOW) {
state = 0; // Redefine o estado
}
// Lógica do ensaio ativo
if (ensaioAtivo) {
float cargaAtual = abs(scale.get_units());
if (cargaAtual >= MAX_LOAD) {
ensaioAtivo = false;
pararMotor();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("CARGA MAX");
lcd.setCursor(0, 1);
lcd.print("P:");
lcd.print(cargaAtual, 2);
lcd.print("N");
} else if (ultimaCarga > 2 && (ultimaCarga - cargaAtual) / ultimaCarga >= LOAD_DROP_THRESHOLD) {
ensaioAtivo = false;
pararMotor();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("RUPTURA OK!");
lcd.setCursor(0, 1);
lcd.print("P:");
lcd.print(ultimaCarga, 2);
lcd.print("N");
} else {
// Exibe informações do ensaio durante a execução
lcd.setCursor(0, 0);
lcd.print(TEnsaio);
lcd.setCursor(0, 1);
lcd.print("d:");
lcd.print(displacement, 0); // Exibe deslocamento
lcd.print("mm ");
lcd.print("P:");
lcd.print(cargaAtual, 2);
lcd.print("N");
}
ultimaCarga = cargaAtual;
delay(200);
}
// Exibe deslocamento no monitor Serial
Serial.print("Deslocamento: ");
Serial.print(displacement);
Serial.println(" mm");
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79264213/displacement-variable-not-updating-during-test-in-arduino-project[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия