Fala pessoal!

Seguinte: preciso ligar 8 potenciometros e 8 piezos em um Garagino.

To começando os testes usando um multiplexador CD4051E, utilizando o firmata standard no arduino e fazendo o código pelo processing (pois ainda vou gerar uma interface gráfica para esse hardware).

O que acontece é que ainda sou um pouco iniciante nessa área e estou com alguns probleminhas no código.

Quando coloco para printar os valores dos potenciometros no serial, os valores ficam alterando mesmo com o potenciometro parado.

O que está errado?

E depois para acrescentar os 8 piezos? É só repetir a montagem usando mais um CD4051?

Segue imagem da montagem (por enquanto só dos potenciometros):

e o código usado no processing:

import org.firmata.*;
import cc.arduino.*;
import processing.serial.*;
Arduino arduino;

void setup() {
arduino = new Arduino(this, Arduino.list()[2], 57600);
//4051 digital control pins

arduino.pinMode(8, arduino.OUTPUT); // s0
arduino.pinMode(9, arduino.OUTPUT); // s1
arduino.pinMode(10, arduino.OUTPUT); // s2
}

void draw() {
arduino.digitalWrite(8, arduino.LOW);
arduino.digitalWrite(9, arduino.LOW);
arduino.digitalWrite(10, arduino.LOW);
int readInZero = arduino.analogRead(0);

//Read Value of 4051 analog-in 1 by setting the values of s0,s1 and s2
arduino.digitalWrite(8, arduino.HIGH);
arduino.digitalWrite(9, arduino.LOW);
arduino.digitalWrite(10, arduino.LOW);
int readInOne = arduino.analogRead(0);

//Read Value of 4051 analog-in 2 by setting the values of s0,s1 and s2
arduino.digitalWrite(8, arduino.LOW);
arduino.digitalWrite(9, arduino.HIGH);
arduino.digitalWrite(10, arduino.LOW);
int readInTwo = arduino.analogRead(0);

//Read Value of 4051 analog-in 3 by setting the values of s0,s1 and s2
arduino.digitalWrite(8, arduino.HIGH);
arduino.digitalWrite(9, arduino.HIGH);
arduino.digitalWrite(10, arduino.LOW);
int readInThree = arduino.analogRead(0);

//Read Value of 4051 analog-in 4 by setting the values of s0,s1 and s2
arduino.digitalWrite(8, arduino.LOW);
arduino.digitalWrite(9, arduino.LOW);
arduino.digitalWrite(10, arduino.HIGH);
int readInFour = arduino.analogRead(0);

//Read Value of 4051 analog-in 5 by setting the values of s0,s1 and s2
arduino.digitalWrite(8, arduino.HIGH);
arduino.digitalWrite(9, arduino.LOW);
arduino.digitalWrite(10, arduino.HIGH);
int readInFive = arduino.analogRead(0);

//Read Value of 4051 analog-in 6 by setting the values of s0,s1 and s2
arduino.digitalWrite(8, arduino.LOW);
arduino.digitalWrite(9, arduino.HIGH);
arduino.digitalWrite(10, arduino.HIGH);
int readInSix = arduino.analogRead(0);

//Read Value of 4051 analog-in 7 by setting the values of s0,s1 and s2
arduino.digitalWrite(8, arduino.HIGH);
arduino.digitalWrite(9, arduino.HIGH);
arduino.digitalWrite(10, arduino.HIGH);
int readInSeven = arduino.analogRead(0);

println("0",readInZero,"1",readInOne,"2",readInTwo,"3",readInThree,"4",readInFour,"5",readInFive,"6",readInSix,"7",readInSeven); //use the result
}

 

código arduino referencia: http://miscellanea.com/how-to-get-more-arduino-analog-inputs/

Obrigado desde já!

Exibições: 453

Responder esta

Respostas a este tópico

Henrique, bom dia.

Na plataforma PIC, existe a necessidade de um delay entre uma medida e outra do ADC, por causa do 

"acquisition time".

Eu não encontrei ainda a informação se existe ou não esta necessidade no Arduino,

mas pela lógica acho que ela é necessaria.

Portanto sugiro voce colocar um delay de pelo menos 1 ms entre uma coleta e outra de dados nos "analog input", e testar os resultados.

Rui

Esse delay é necessário mesmo, são necessários alguns microsegundos, do jeito que está, ele "pira" e não lê as entradas corretamente.

Obrigado Rui e Marcelo pelo feedback!

Então eu coloco delay(1); após os int arduino.analogRead?

Vou tentar assim que chegar em casa!

E para ligar os piezos é só repetir a montagem com o CD4051, certo?

obrigado pela ajuda pessoal!

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço