Olá.
Estou fazendo um estudo sobre sensores capacitivos, mas estou esbarrando em alguns desafios, que talvez sejam limitações do Arduino.
Vou postar algumas dúvidas, agradeço a quem puder me ajudar.
Este código faz a leitura de um sensor capacitivo, e faz smoothing através da média de várias leituras.
As médias ainda variavam muito, então resolvi ainda tirar a média entre as duas últimas médias.
Dúvidas:
**1)**Porque somente o último Serial.print() usado dentro do void setup() funciona? Porque só sai o último caractere?
**2)**Porque quando o botão é pressionado, o Arduino fica travado até que eu solte o botão? O digitalRead() não deveria fazer a leitura e continuar a execução do código?
**3)**Porque o botao = digitalRead(1) falha se eu removo a linha delay(100) do while? (a variável botao continua zerada mas não obedece ao while )
**4)**Porque o primeiro Serial.print() após soltar o botão fica com caracteres estranhos? A frase do if nem sempre aparece no Serial Monitor.
#include <CapacitiveSensor.h>
CapacitiveSensor cs_4_2 = CapacitiveSensor(4,2);
boolean firstRun = true;
const int numReadings = 20;
long readings[numReadings];
long sum;
long previousAverage;
long newAverage;
long counter;
long reading;
String str;
int botao = 1;
void setup()
{
Serial.print("SETUP");
Serial.print("linha2");
pinMode(1, INPUT);
digitalWrite(1,HIGH);
cs_4_2.set_CS_AutocaL_Millis(0xFFFFFFFF); // turn off autocalibrate on channel 1 - just as an example
Serial.begin(9600);
while(reading == 0)
reading = cs_4_2.capacitiveSensor(30);
str = "\nprimeira leitura = ";
str = str + reading + "\n";
Serial.print(str);
for( counter = 0; counter < numReadings; counter++)
{
readings[counter] = reading;
}
previousAverage = reading;
newAverage = reading;
sum = newAverage * numReadings;
counter = 0;
}
void loop()
{
if (firstRun)
{
firstRun = false;
Serial.print("primeira execucao!\t valor botao = ");
Serial.print(botao);
Serial.println("");
}
while(botao == 1)
{
delay(100);
botao = digitalRead(1);
if (botao == 0)
Serial.print("do-while - botao = 0\n");
}
if (counter == numReadings)
{
previousAverage = newAverage;
newAverage = sum/numReadings;
newAverage = (newAverage + previousAverage)/2;
Serial.print(newAverage);
Serial.print("\n");
counter = 0;
botao = 1;
}
else
{
reading = cs_4_2.capacitiveSensor(30);
if (reading < 0)
{
reading = 0;
}
sum = sum - readings[counter];
readings[counter] = reading;
sum = sum + reading;
Serial.print("counter = ");
Serial.print(counter);
Serial.print("\treading = ");
Serial.print(reading);
Serial.print("\tsum = ");
Serial.print(sum);
Serial.print("\tbotao = ");
Serial.print(botao);
Serial.print("\n");
counter++;
}
}
Serial Monitor:
2
primeira leitura = 22
primeira execucao! valor botao = 1
ê?Jreading = 35 sum = 453 botao = 0
counter = 1 reading = 21 sum = 452 botao = 0
counter = 2 reading = 25 sum = 455 botao = 0
counter = 3 reading = 2 sum = 435 botao = 0
counter = 4 reading = 22 sum = 435 botao = 0
counter = 5 reading = 2 sum = 415 botao = 0
counter = 6 reading = 25 sum = 418 botao = 0
counter = 7 reading = 22 sum = 418 botao = 0
counter = 8 reading = 1 sum = 397 botao = 0
counter = 9 reading = 22 sum = 397 botao = 0
counter = 10 reading = 5 sum = 380 botao = 0
counter = 11 reading = 45 sum = 403 botao = 0
counter = 12 reading = 28 sum = 409 botao = 0
counter = 13 reading = 20 sum = 407 botao = 0
counter = 14 reading = 21 sum = 406 botao = 0
counter = 15 reading = 25 sum = 409 botao = 0
counter = 16 reading = 24 sum = 411 botao = 0
counter = 17 reading = 23 sum = 412 botao = 0
counter = 18 reading = 26 sum = 416 botao = 0
counter = 19 reading = 50 sum = 444 botao = 0
22
RJ
P,e % " @
a` 4e 0 R" Jj "S½= 0
c unte* 1 reading = 14 sum = 447 botao = 0
counter = 2 reading = 27 sum = 449 botao = 0
counter = 3 reading = 2 sum = 449 botao = 0
counter = 4 reading = 24 sum = 451 botao = 0
counter = 5 reading = 4 sum = 453 botao = 0
counter = 6 reading = 25 sum = 453 botao = 0
counter = 7 reading = 5 sum = 436 botao = 0
counter = 8 reading = 44 sum = 479 botao = 0
counter = 9 reading = 3 sum = 460 botao = 0
counter = 10 reading = 24 sum = 479 botao = 0
counter = 11 reading = 53 sum = 487 botao = 0
counter = 12 reading = 25 sum = 484 botao = 0
counter = 13 reading = 20 sum = 484 botao = 0
counter = 14 reading = 21 sum = 484 botao = 0
counter = 15 reading = 19 sum = 478 botao = 0
counter = 16 reading = 21 sum = 475 botao = 0
counter = 17 reading = 25 sum = 477 botao = 0
counter = 18 reading = 25 sum = 476 botao = 0
counter = 19 reading = 25 sum = 451 botao = 0
22