SRAM overflow

Hi,

dc42:
If it's sensitive to the length of time spent doing the calibration then I think you are only just running out of memory. Did you try the suggestions I made in reply #4 ? They are all very easy to implement.

thanks. Yes, it seems it's time sensitive. Regarding "good practices" about programming, I'm a totally newbie... But trying it. There's lot of errors, but now the code works:

// First multiplexer CD4067 for rows
// where analogRead (3) collects signals
// Mux reader signal
int s0 = 8;
int s1 = 9;
int s2 = 10;
int s3 = 11;
int SIG_pin = A0;

// Second mux CD4067 for columns
// where voltage is applied
// Mux apply voltage
int v1 = 4;
int v2 = 5;
int v3 = 6;
int v4 = 7;
int VOL_pin = 3;

//Counting for digital select pins of mux
int r0 = 0;      
int r1 = 0;      
int r2 = 0;    
int r3 = 0;

int rowCount = 0;
int colCount = 0;

//there are 16x16 intersections, so 256 sensors
int matrixValues[16];
int matrixSize = 1*16;

int val [16][16]; //declare array for a 16x16 analog matrix calibration 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);
 
    
// Starts minim calibration

      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);
                        
         Serial.print ("Calibrating min sensor ");
         Serial.print (colCount);
         Serial.print(",");
         Serial.print (rowCount);  
         Serial.println("");
         
           for (int i=0; i< 5; i++) {
             digitalWrite(ledPin, HIGH); //to ensure that every cycle runs
             delay (1);
             digitalWrite(ledPin, LOW);
             val [colCount][rowCount]= analogRead (SIG_pin);
             if (val [colCount][rowCount] < minVal [colCount][rowCount]){
            minVal [colCount][rowCount] = val [colCount][rowCount];}
           }     
        }
      }
 while(Serial.available() == 0); {
    if (Serial.available()) {
    
    int ser = Serial.read();
    
    if(ser == 'c') {
    int rowCount = 0;
    int colCount = 0;
      
      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);
                        
         Serial.print ("Calibrating max sensor ");
         Serial.print (colCount);
         Serial.print(",");
         Serial.print (rowCount);  
         Serial.println("");
         
         while(Serial.available() == 0); {
    if (Serial.available()) {
             int ser2 = Serial.read();   
            if(ser2 == 'n') {
              
             for (int i=0; i< 5; i++) {
             digitalWrite(ledPin, HIGH); //to ensure that every cycle runs
             delay (1);
             digitalWrite(ledPin, LOW);
             val [colCount][rowCount]= analogRead (SIG_pin);
             if (val [colCount][rowCount] < maxVal [colCount][rowCount]){
            maxVal [colCount][rowCount] = val [colCount][rowCount];}
           }     
        }
       }
      }
    }
    }
}
 }
}
}


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[i]);
            if (i < matrixSize - 1) Serial.print(",");
        }  
    
      Serial.println();
    delay(20);
  }
}

In this way I solve the overflow. Anyway, there's a lot of things I'm learning now that will require different code, so I hope to make some progress while trying it. And at least this code is just one concept. Now I'm working with another code with some different aproach.

Thanks a lot,

toni