PiezoresistiveArray / Sensor2Reading_Final_YK_v4.ino
Sensor2Reading_Final_YK_v4.ino
Raw
#include <digitalWriteFast.h>
// Pins Analog + digital
const int num_pins = 8;
const int analog_pins[num_pins] = {A0, A1, A2, A3, A4, A5, A6, A7};
const int digital_pins[num_pins] = {2, 3, 4, 5, 6, 7, 8, 9};

// Arrays for values
const int num_values = 64;
float valArray[num_values];
float valInitArray[num_values];
int booArray[num_values];
int bArray[num_values];
int sum = 0;
void Sensor_calibrate(float InitArray[]);

void setup() {
  Serial.begin(19200); // 115200
  for (int i = 0; i < num_pins; i++) {
    pinMode(digital_pins[i], OUTPUT);
    digitalWrite(digital_pins[i], LOW);
  }
  // INITIAL calibration
  Sensor_calibrate(valInitArray);
}
void loop() {
  // read the sensor values for each pin and subtract the initial values
  for (int i = 0; i < 8; i++) {
    digitalWrite(digital_pins[i] , HIGH); // select pin
    for (int j = 0; j < 8; j++) {
      int k = i * 8 + j;
      int val = analogRead(analog_pins[j]);
      valArray[k] = val;
    }
    digitalWrite(digital_pins[i] , LOW); // deselect pin
  }

  //  // detect if a sensor value is above the threshold
    for (int k = 0; k < 64; k++) {
      if (valArray[k] > valInitArray[k] +   30) { //30 success//50
        bArray[k] = 255;
        //sum++;
      } else {
        bArray[k] = 0;
      }
    }
  
// detect if a sensor value is above the threshold and map values
//  for (int k = 0; k < 64; k++) {
//    if (valArray[k] > valInitArray[k] + 25 ) { //30 success//50
//      float final_v = valArray[k] - valInitArray[k];
//      if (final_v < 600 && final_v > 50) {
//        booArray[k] = 1;
//      } else if(final_v > 600){
//        booArray[k] = 0;
//      }
//      int value = map(final_v, 0 , 200, 150, 255);
//      bArray[k] = value;
//
//    } else {
//      bArray[k] = 0;
//      booArray[k] = 2;
//    }
//  }
  //
  //Processing input
  for (int i = 0; i < 8; i++) {
    for (int j = 0; j < 8; j++) {
      Serial.print(bArray[8 * i + j]);
      Serial.print("\t");
    }
    //Serial.println(); // no processing
  }
  //Serial.println();

  for (int i = 0; i < 8; i++) {
    for (int j = 0; j < 8; j++) {
      Serial.print(booArray[8 * i + j]);
      Serial.print("\t");
    }
    //Serial.println(); // no processing
  }
  Serial.println();
}
//ARIK'S TESTING LOOP
//      for (int i = 0; i < 1; i++) {
//        Serial.print(valArray[i] - valInitArray[i]);
//        Serial.print(",");
//      }
//      Serial.println(valArray[0] - valInitArray[0]);
//}
void Sensor_calibrate(float InitArray[])
{
  // INITIAL VAL
  for (int i = 1;  i < 31 ; i++)
  {
    for (int i = 0; i < num_pins; i++) {
      digitalWrite(digital_pins[i], HIGH);
      for (int j = 0; j < num_pins; j++) {
        int index = i * num_pins + j;
        InitArray[index] = InitArray[index] + analogRead(analog_pins[j]);
      }
      digitalWrite(digital_pins[i], LOW);
    }
  }
  for (int i = 0 ; i < 64 ; i++)
  {
    InitArray[i] = InitArray[i] / 30;
  }
}