problem: inconsistent microphone reading.

Here is this piece in action:

#include <stdio.h>
#include <stdlib.h>

#define THRESHOLD_BLOWN 	100 //threshold when mic is blown
#define MEMORY_MIC 			4 //moving average memory
#define COUNT_BLOWN 		4 //number of consecutive material deviations

#define DAT_COUNT	52
unsigned short analogRead(unsigned char adc_ch) {
    const unsigned short dat[DAT_COUNT]= {
        539,
        535,
        533,
        533,
        533,
        530,
        535,
        539,
        535,
        533,
        533,
        533,
        530,
        535,
        539,
        535,
        533,
        533,
        533,
        530,
        535,
        539,
        535,
        533,
        533,
        533,
        530,
        535,
        672,  //i give a continuous input to the mic fro here to..
        252,
        757,
        136,
        757,
        758, //..here
        533,
        532,
        536,
        536,
        546,
        562,
        170, //aslo from here to..
        487,
        758,
        310,
        758,
        758,
        707,  //..here
        547,
        548,
        542,
        545,
        546
    };
    static unsigned char index=0;

    index=(index==DAT_COUNT-1)? 0: (index+1);
    return dat[index];
}

unsigned char isblown(unsigned char mic) {
    unsigned short tmp_adc; //temp variable for adc
    static unsigned short mav_mic=0; //moving average
    static unsigned short mdev_mic=0; //moving deviation
    static unsigned char count_mic=0; //consequetive reads when mic is outside of THRESHOLD_BLOWN

    tmp_adc = analogRead(mic); //read the mic
    mav_mic += (tmp_adc - mav_mic) / MEMORY_MIC; //calculat the moving average
    mdev_mic += (((tmp_adc > mav_mic)?(tmp_adc - mav_mic):(mav_mic-tmp_adc)) - mdev_mic) / MEMORY_MIC; //calculate the moving average of deviations
    if (mdev_mic > THRESHOLD_BLOWN) count_mic+=1; //increment mic
    else count_mic = 0; //otherwise, reset

    printf("count_mic=%4d, tmp_adc = %5d, mav_mic=%5d, mdev_mic=%5d\n", count_mic, tmp_adc, mav_mic, mdev_mic);
    return (count_mic>COUNT_BLOWN)?1:0;
}

int main(void) {
    unsigned char i=0;

    printf("Hello world!\n");
    for (i=0; i<DAT_COUNT; i++) {
    	//if (isblown(0)) printf("isblown() = 1\n");
    	//else printf("isblown() = 0\n");
    	isblown(0);
    }
    return 0;
}

It ran on Turbo C (my favorite tool to write code for mcus). I wrote the analogRead() piece to replicate the data you got from your microphone - you will need to eliminate it from your code.

count_mic=   0, tmp_adc =   535, mav_mic=  133, mdev_mic=  100
count_mic=   1, tmp_adc =   533, mav_mic=  233, mdev_mic=  150
count_mic=   2, tmp_adc =   533, mav_mic=  308, mdev_mic=  168
count_mic=   3, tmp_adc =   533, mav_mic=  364, mdev_mic=  168
count_mic=   4, tmp_adc =   530, mav_mic=  405, mdev_mic=  158
count_mic=   5, tmp_adc =   535, mav_mic=  437, mdev_mic=  143
count_mic=   6, tmp_adc =   539, mav_mic=  462, mdev_mic=  127
count_mic=   7, tmp_adc =   535, mav_mic=  480, mdev_mic=  109
count_mic=   0, tmp_adc =   533, mav_mic=  493, mdev_mic=   92
count_mic=   0, tmp_adc =   533, mav_mic=  503, mdev_mic=   77
count_mic=   0, tmp_adc =   533, mav_mic=  510, mdev_mic=   64
count_mic=   0, tmp_adc =   530, mav_mic=  515, mdev_mic=   52
count_mic=   0, tmp_adc =   535, mav_mic=  520, mdev_mic=   43
count_mic=   0, tmp_adc =   539, mav_mic=  524, mdev_mic=   36
count_mic=   0, tmp_adc =   535, mav_mic=  526, mdev_mic=   30
count_mic=   0, tmp_adc =   533, mav_mic=  527, mdev_mic=   24
count_mic=   0, tmp_adc =   533, mav_mic=  528, mdev_mic=   20
count_mic=   0, tmp_adc =   533, mav_mic=  529, mdev_mic=   16
count_mic=   0, tmp_adc =   530, mav_mic=  529, mdev_mic=   13
count_mic=   0, tmp_adc =   535, mav_mic=  530, mdev_mic=   11
count_mic=   0, tmp_adc =   539, mav_mic=  532, mdev_mic=   10
count_mic=   0, tmp_adc =   535, mav_mic=  532, mdev_mic=    9
count_mic=   0, tmp_adc =   533, mav_mic=  532, mdev_mic=    7
count_mic=   0, tmp_adc =   533, mav_mic=  532, mdev_mic=    6
count_mic=   0, tmp_adc =   533, mav_mic=  532, mdev_mic=    5
count_mic=   0, tmp_adc =   530, mav_mic=  532, mdev_mic=    5
count_mic=   0, tmp_adc =   535, mav_mic=  532, mdev_mic=    5
count_mic=   0, tmp_adc =   672, mav_mic=  567, mdev_mic=   30
count_mic=   0, tmp_adc =   252, mav_mic=  489, mdev_mic=   81
count_mic=   1, tmp_adc =   757, mav_mic=  556, mdev_mic=  111
count_mic=   2, tmp_adc =   136, mav_mic=  451, mdev_mic=  162
count_mic=   3, tmp_adc =   757, mav_mic=  527, mdev_mic=  179
count_mic=   4, tmp_adc =   758, mav_mic=  584, mdev_mic=  178
count_mic=   5, tmp_adc =   533, mav_mic=  572, mdev_mic=  144
count_mic=   6, tmp_adc =   532, mav_mic=  562, mdev_mic=  116
count_mic=   0, tmp_adc =   536, mav_mic=  556, mdev_mic=   92
count_mic=   0, tmp_adc =   536, mav_mic=  551, mdev_mic=   73
count_mic=   0, tmp_adc =   546, mav_mic=  550, mdev_mic=   56
count_mic=   0, tmp_adc =   562, mav_mic=  553, mdev_mic=   45
count_mic=   1, tmp_adc =   170, mav_mic=  458, mdev_mic=  105
count_mic=   0, tmp_adc =   487, mav_mic=  465, mdev_mic=   85
count_mic=   1, tmp_adc =   758, mav_mic=  538, mdev_mic=  118
count_mic=   2, tmp_adc =   310, mav_mic=  481, mdev_mic=  131
count_mic=   3, tmp_adc =   758, mav_mic=  550, mdev_mic=  150
count_mic=   4, tmp_adc =   758, mav_mic=  602, mdev_mic=  151
count_mic=   5, tmp_adc =   707, mav_mic=  628, mdev_mic=  133
count_mic=   6, tmp_adc =   547, mav_mic=  608, mdev_mic=  115
count_mic=   0, tmp_adc =   548, mav_mic=  593, mdev_mic=   98
count_mic=   0, tmp_adc =   542, mav_mic=  581, mdev_mic=   84
count_mic=   0, tmp_adc =   545, mav_mic=  572, mdev_mic=   70
count_mic=   0, tmp_adc =   546, mav_mic=  566, mdev_mic=   58
count_mic=   0, tmp_adc =   539, mav_mic=  560, mdev_mic=   49

The code falsely returned a "blown" signal initially, very similar to a capacitor that's being charged up. Once mav_mic has been correctly established, it triggered reliably, as you can see that the count_mic variable goes up / down with the ac portion of the signal.

The code is a copy-and-paste back to your arduino development, minus the printf() piece in isblown().