#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; } }