Контур счетчика на датчиках давления arduino

Я использую четыре датчика давления fsr в параллельном соединении друг с другом. Ниже приведены кодировки для моего проекта.

У меня есть проблема со значениями счетчика, где он отображает четыре добавленных значения счетчика для каждого датчика.

Мне нужно получить значения счетчика, где он добавляется каждый раз, когда давление обнаружено, и если давления больше нет, он останется предыдущим значением счетчика.

int fsrPin[] = {0, 1, 2, 3};    
int fsrReading;     
int fsrVoltage;     

unsigned long fsrResistance;  
unsigned long fsrConductance; 
long fsrForce;   
int pinCount = 4;
int counter = 0;

 
void setup(void) {
  for(int thisPin = 0; thisPin < pinCount; thisPin++) {
    pinMode(fsrPin[thisPin], OUTPUT);
  }
  Serial.begin(9600);
}
 
void loop(void) {
  
  for(int thisPin = 0; thisPin < pinCount; thisPin++) {
    fsrReading = analogRead(fsrPin[thisPin]);
    Serial.print("Analog reading ");
    Serial.print(fsrPin[thisPin]); 
    Serial.print("=> ");
    Serial.println(fsrReading);
    fsrVoltage = map(fsrReading, 0, 1023, 0, 5000);
    Serial.print("Voltage reading in mV = ");
    Serial.println(fsrVoltage);
    
  if (fsrVoltage == 0) {
    Serial.println("No pressure");  
  } else {
    // The voltage = Vcc * R / (R + FSR) where R = 10K and Vcc = 5V
    // so FSR = ((Vcc - V) * R) / V
    fsrResistance = 5000 - fsrVoltage;     
    fsrResistance *= 10000;                
    fsrResistance /= fsrVoltage;
    Serial.print("FSR resistance in ohms = ");
    Serial.println(fsrResistance);
 
    fsrConductance = 1000000;           
    fsrConductance /= fsrResistance;
    Serial.print("Conductance in microMhos: ");
    Serial.println(fsrConductance);
 
    if (fsrConductance <= 1000) {
      fsrForce = fsrConductance / 80;
      Serial.print("Force in Newtons: ");
      Serial.println(fsrForce);      
    } else {
      fsrForce = fsrConductance - 1000;
      fsrForce /= 30;
      Serial.print("Force in Newtons: ");
      Serial.println(fsrForce);            
    }
  }

  for(int thisPin=0; thisPin < pinCount; thisPin++){
  if (fsrForce != 0) {    
    counter++;
    Serial.print("Counter = ");
    Serial.println(counter);
  } else {
    counter;
    Serial.print("Counter = ");
    Serial.println(counter);
  }
  }
  Serial.println("--------------------");
  }
  delay(3000);
}

Фактическая проблема, как показано ниже, где мне нужно найти правильное условие для циклического значения счетчика:

 for(int thisPin=0; thisPin < pinCount; thisPin++){
  if (fsrForce != 0) {    
    counter++;
    Serial.print("Counter = ");
    Serial.println(counter);
  } else {
    counter;
    Serial.print("Counter = ");
    Serial.println(counter);
  }
  }

4 ЗНАЧЕНИЯ СЧЕТЧИКА В КАЖДОМ СЕТНООМ-АНАЛОГОВ ЧТЕНИИ

1 ответ

  1. Я считаю, что основная проблема заключается в том , что вы проверяете iffsrForce != 0, однако fsrForce на самом деле не имеет шансов добраться до нуля, потому что он зависит от fsrVoltage и устанавливается только в том случае, если fsrVoltage положителен.

    Просто установитеfsrForce = 0, когда fsrVoltage < VOLTAGE_THRESHOLDи вы должны получить ожидаемое поведение.

    Попробовать это:

    int fsrPin[] = {
        0,
        1,
        2,
        3
    };
    int fsrReading;
    int fsrVoltage;
    
    unsigned long fsrResistance;
    unsigned long fsrConductance;
    long fsrForce;
    int pinCount = 4;
    int counter = 0;
    
    // add threshold
    const float VOLTAGE_THRESHOLD = 0.2;
    
    void setup(void) {
        for (int thisPin = 0; thisPin < pinCount; thisPin++) {
            pinMode(fsrPin[thisPin], OUTPUT);
        }
        Serial.begin(9600);
    }
    
    void loop(void) {
    
        for (int thisPin = 0; thisPin < pinCount; thisPin++) {
            fsrReading = analogRead(fsrPin[thisPin]);
            Serial.print("Analog reading ");
            Serial.print(fsrPin[thisPin]);
            Serial.print("=> ");
            Serial.println(fsrReading);
            fsrVoltage = map(fsrReading, 0, 1023, 0, 5000);
            Serial.print("Voltage reading in mV = ");
            Serial.println(fsrVoltage);
    
            if (fsrVoltage < VOLTAGE_THRESHOLD) {
    
                // reset the fsrForce when there is no pressure
                fsrForce = 0
    
                Serial.println("No pressure");
            } else {
                // The voltage = Vcc * R / (R + FSR) where R = 10K and Vcc = 5V
                // so FSR = ((Vcc - V) * R) / V
                fsrResistance = 5000 - fsrVoltage;
                fsrResistance *= 10000;
                fsrResistance /= fsrVoltage;
                Serial.print("FSR resistance in ohms = ");
                Serial.println(fsrResistance);
    
                fsrConductance = 1000000;
                fsrConductance /= fsrResistance;
                Serial.print("Conductance in microMhos: ");
                Serial.println(fsrConductance);
    
                if (fsrConductance <= 1000) {
                    fsrForce = fsrConductance / 80;
                    Serial.print("Force in Newtons: ");
                    Serial.println(fsrForce);
                } else {
                    fsrForce = fsrConductance - 1000;
                    fsrForce /= 30;
                    Serial.print("Force in Newtons: ");
                    Serial.println(fsrForce);
                }
            }
    
            for (int thisPin = 0; thisPin < pinCount; thisPin++) {
                if (fsrForce != 0) {
                    counter++;
                }
                Serial.print("Counter = ");
                Serial.println(counter);
            }
            Serial.println("--------------------");
        }
        delay(3000);
    }