Diferencia entre revisiones de «Vibrómetro»

Sin resumen de edición
Sin resumen de edición
Línea 20: Línea 20:
const int amplitude = 255;
const int amplitude = 255;
const int neutral = 127;
const int neutral = 127;
int control_dac_val = neutral;


void setup() {  
void setup() {  
// pinMode(34, INPUT);
  pinMode(34, INPUT);
// analogSetAttenuation(ADC_0db);
  analogSetAttenuation(ADC_0db);
 
  // Cuando control está 127, Vout = 0.
   dacWrite(bias_pin, 118);
   dacWrite(bias_pin, 118);
   dacWrite(control_pin, neutral);
   dacWrite(control_pin, control_dac_val);
}
}


void loop() {
  #define BUFELEMS 32
  #define SAMP_PERIOD_MS 32


  int buf[BUFELEMS];
  for (int i = 0; i < BUFELEMS; i++) {
    buf[i] = analogRead(34);
    delay(SAMP_PERIOD_MS);
  }
 
  int sum = 0;
  for (int i = 0; i < BUFELEMS; i++) {
    sum += buf[i];
  }
  const int adc_avg = sum / BUFELEMS;


void loop() {
  const int adc_target = 2047;
   /*
    
   for (int i = 0; i <= amplitude; i+=10) {
   int error = adc_avg - adc_target;
    dacWrite(control_pin, i);
  if (error >  100) error =  10;
    delayMicroseconds(10000);
  if (error < -100) error = -10;
   }
   control_dac_val -= error;


   for (int i = amplitude; i >= 0; i-=10) {     
   if (control_dac_val <= 0)  control_dac_val = 0;
    dacWrite(control_pin, i);
  if (control_dac_val >= 255) control_dac_val = 255;
    delayMicroseconds(10000);
  dacWrite(control_pin, control_dac_val);
  }
  */
}
}
/*
    int adc = analogRead(34);                // 0..4095
    int level = map(adc, 0, 4095, 0, 255);      // 0..255 for DAC
    dacWrite(25, level);
    delayMicroseconds(100);
*/
</syntaxhighlight>
</syntaxhighlight>