Переменная смещения не обновляется во время теста в проекте ArduinoC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Переменная смещения не обновляется во время теста в проекте Arduino

Сообщение 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");
}


Подробнее здесь: https://stackoverflow.com/questions/792 ... no-project
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»