[RESOLVIDO] Serial.print() falha no setup()

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

Todas as questões são respondidas com isto:

O pino 0 e 1 faz parte da transmissão de dados para o computador. Se ligares algo lá, ou não usas a porta série ou ela não funciona direito.

Se mudares o teu pino do botão para o pino 2 ou 3 ou 4 ou 5 ou 6.... tudo deve funcionar direito. No 0 e 1... ou funciona uma coisa ou funciona a outra.

Altera o pino do botão e testa de novo.

bubulindo:
Altera o pino do botão e testa de novo.

bubulindo,

Muito obrigado. Mudei o botão e resolveu 99% dos meus problemas.

Entretanto, o problema do Serial.print() dentro do void setup() continua.
Somente o último caractere do último Serial.print() aparece no Serial Monitor.
Alguma idéia?

Grato,
Cleber.

Normalmente inicia-se o objecto antes de o usar...

Tu estás a fazer print() antes de begin()... isso é bem provável que seja o teu problema.

bubulindo:
Tu estás a fazer print() antes de begin()... isso é bem provável que seja o teu problema.

bubulindo,

Mais uma vez agradeço pela ajuda.
Era exatamente este o problema.

Grato!