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á!
Tags:
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!
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por