Hi all!
my name is Toni. Long time reading here but this is my first post, so hello to all.
I'm working on a pressure sensor matrix based on Hannah's work:
and since few months I'm playing with my first arduino project, a 16x16 sensor pressure matrix. To simplificate, please consider int SIG_pin as a variable potientiometer, it is velostat.
The code I'm working:
//Mux reader signal
int s0 = 8;
int s1 = 9;
int s2 = 10;
int s3 = 11;
int SIG_pin = A0;
//Mux apply voltage
int v1 = 4;
int v2 = 5;
int v3 = 6;
int v4 = 7;
int VOL_pin = 3;
int r0 = 0;
int r1 = 0;
int r2 = 0;
int r3 = 0;
int rowCount = 0;
int colCount = 0;
int matrixValues[16];
int matrixSize = 1*16;
int val [16][16]; //declare array for a 16x16 analog matrix sensor
int ledPin = 13; //to check that all runs
int maxVal [16][16]; // needs to declare = 0, but done by default
int minVal [16][16]; // needs to be declared as 1023, still don't know how
// so ensure good pressure when calibrating !!!
void setup(){
pinMode(s0, OUTPUT);
pinMode(s1, OUTPUT);
pinMode(s2, OUTPUT);
pinMode(s3, OUTPUT);
pinMode (SIG_pin, INPUT);
digitalWrite(s0, LOW);
digitalWrite(s1, LOW);
digitalWrite(s2, LOW);
digitalWrite(s3, LOW);
pinMode(v1, OUTPUT);
pinMode(v2, OUTPUT);
pinMode(v3, OUTPUT);
pinMode(v4, OUTPUT);
pinMode (VOL_pin, OUTPUT);
digitalWrite(v1, LOW);
digitalWrite(v2, LOW);
digitalWrite(v3, LOW);
digitalWrite(v4, LOW);
analogWrite (VOL_pin, LOW);
pinMode (ledPin, OUTPUT);
Serial.begin(57600);
for (rowCount=0; rowCount<16; rowCount++) {
r0 = bitRead(rowCount,0);
r1 = bitRead(rowCount,1);
r2 = bitRead(rowCount,2);
r3 = bitRead(rowCount,3);
digitalWrite(v1, r0);
digitalWrite(v2, r1);
digitalWrite(v3, r2);
digitalWrite(v4, r3);
analogWrite (VOL_pin, HIGH);
for (colCount=0; colCount<16; colCount++) {
// select the bit
r0 = bitRead(colCount,0);
r1 = bitRead(colCount,1);
r2 = bitRead(colCount,2);
r3 = bitRead(colCount,3);
digitalWrite(s0, r0);
digitalWrite(s1, r1);
digitalWrite(s2, r2);
digitalWrite(s3, r3);
digitalWrite(ledPin, HIGH);
Serial.print ("Calibrating sensor ");
Serial.print (colCount);
Serial.print(",");
Serial.print (rowCount);
Serial.println("");
int time = millis ();
while (millis () < time + 50) {
val [colCount][rowCount]= analogRead (SIG_pin);
if (val [colCount][rowCount] > maxVal [colCount][rowCount]) {
maxVal [colCount][rowCount] = val [colCount][rowCount];
}
if (val [colCount][rowCount] < minVal [colCount][rowCount]){
minVal [colCount][rowCount] = val [colCount][rowCount];
}
}
digitalWrite (ledPin, LOW);
delay (10);
}
}
}
void loop () {
for (rowCount=0; rowCount<16; rowCount++) {
// select the bit
r0 = bitRead(rowCount,0);
r1 = bitRead(rowCount,1);
r2 = bitRead(rowCount,2);
r3 = bitRead(rowCount,3);
digitalWrite(v1, r0);
digitalWrite(v2, r1);
digitalWrite(v3, r2);
digitalWrite(v4, r3);
digitalWrite (ledPin, LOW);
analogWrite (VOL_pin, HIGH);
Serial.print(rowCount);
Serial.print(",");
for (colCount=0; colCount<16; colCount++) {
r0 = bitRead(colCount,0);
r1 = bitRead(colCount,1);
r2 = bitRead(colCount,2);
r3 = bitRead(colCount,3);
digitalWrite(s0, r0);
digitalWrite(s1, r1);
digitalWrite(s2, r2);
digitalWrite(s3, r3);
val [colCount][rowCount]= analogRead (SIG_pin);
matrixValues [colCount]= map(val [colCount][rowCount], minVal [colCount][rowCount], maxVal [colCount][rowCount], 0, 255);
}
for (int i=0; i<16; i++){
Serial.print(matrixValues*);*
-
if (i < matrixSize - 1) Serial.print(",");*
-
} *
-
Serial.println();*
-
delay(20);*
-
}*
}
/#
(hope to posted it correct!)
BTW, million of thanks to Hannah Parker, Tom Igoe, and all open community.
As is, the code runs smoothly.
The problem: when you rise time during calibrating (ie. <time + 5000), seems to overflow SRAM. This should be need when real calibration process.
The solution: do calibration with a for function. Also for other reasons, the way I'm looking on now.
but also I'm reading this:
http://arduino.cc/forum/index.php/topic,95914
because I'm asking for a solution to work with the first calibration approach.
Also I'm asking how many times a sensor is calibrated during while function.
Any idea or direction is welcome.
Thanks a lot.
Toni Ventura