Go Down

Topic: Duvida Serial.Print (Read 288 times) previous topic - next topic

pricardo81

Pessoal, uma duvida de inciante.
Tenho um potenciômetro ligado na Porta A0 e ele envia ao computador os valores de 0 á 100, o problema que ele envia constantemente os valores, mesmo sem girar o potenciômetro, oque queria é apenas quando girar o potenciômetro fosse enviado o valor.

Código :

const int POT = A0;
int POTValue = 0;
int POTOUTValue = 0;

void setup() {
  Serial.begin(115200);
}

void loop() {
  POTValue = analogRead(POT);
  POTOUTValue = map(POTValue, 0, 1023, 0, 100);
  Serial.print("C56");
  Serial.println(POTOUTValue);
  delay(2);

bubulindo

O que tu pretendes é bastante difícil pois precisas de ter uma redução de ruído bastante boa no Arduino... mas o código seria algo assim:

Code: [Select]

int anterior = 0;
void loop() {
  POTValue = analogRead(POT);
  POTOUTValue = map(POTValue, 0, 1023, 0, 100);
  if(anterior != POTOUTValue) {
    Serial.print("C56");
    Serial.println(POTOUTValue);
  }
  anterior = POTOUTValue;
  delay(100); //isto era muito rápido


This... is a hobby.

pricardo81

@bubuindo.

Obrigado, funcionou perfeitamente .

tecdiego

Oi amigo eu sugiro que você trabalhe com uma média de medições, assim você "reduz" o ruído, como o amigo bubulindo informou, o ruído é o maior problema.

Exemplo:
Code: [Select]

const int POT = A0;
int POTValue = 0;
int POTOUTValue = 0;
int POTi = 0;
int POTj = 0;

void setup() {
  Serial.begin(115200);
}

void loop() {

  for(int i=0; i<10;i++) {
 
     for (int j=0; j<10;j++){
     
       POTj += analogRead(POT);

     }
     POTi += POTj/10;
     POTJ = 0;
  }
  POTValue = POTi/10;
  POTOUTValue = map(POTValue, 0, 1023, 0, 100);
  Serial.print("C56");
  Serial.println(POTOUTValue);
  delay(2);
  POTi = 0;
}





Porque eu usei dois comandos for, para tirar a média de 100 medições, pois se fizermos a soma das 100 medições em um int, ele pode não suporta o valor.

Mas isso não resolverá seu problema, só vai minimizar o ruído.
Você pode reduzir as amostragens.

WeiderAju

Uma pequena sugestão,

   Utilize resistores de pull up ou pull down pra estabilizar a leitura,  algumas vezes a solução esta no codigo, outras esta na montagem.
   Comece utilizando resistores de 10k, se perceber que ainda assim esta havendo oscilações,  vá baixando.
   No geral, colocando resistores de pull down de 10k na leitura de potenciometros é o suficiente pra uma boa estabilização.

Go Up