Bem povo vou presumir que você ja é um pouco familiarizado com o processing e sabe linkar ele com o arduino. Ahh não sabe? então reveja meu tutorial aqui
Bom povo, antes de tudo queria dizer que, quando eu começei eu copiava projetos de sites e outros fóruns, acho que quase todo principiante faz isso.Estudando um pouco mais aprendi a adaptar projetos parecidos para as minhas necessidades e , por fim, a criar projetos, de modo que este projeto, assim como alguns aqui no blog, é 100% de minha autoria, escrevi o código linha por linha^^.
Outra coisa que gostaria de falar é que, pra quem quiser sair das fronteiras do monitor serial, o processing acaba sendo bastante atrativo, pois ele é quase uma ide Arduino para java, aqui reina o mundo java, se voce já programou ou sabe fazer algumas paradas, vai se sentir em casa com ele.
Antes de tudo devo dizer que o código no arduino e relativamente simples, vamos a ele:
-----------------------
char valor;
int sensor1=A0;
int sensor2=A1;
int ledcinza = 4;
int ledVerde = 5;
int ledAmarelo = 6;
int ledVermelho = 7;
int converte1;
int converte2;
void setup() {
// Definir LEDs como OUTPUTs
pinMode(ledVerde, OUTPUT);
pinMode(ledAmarelo, OUTPUT);
pinMode(ledVermelho, OUTPUT);
pinMode(ledcinza,OUTPUT);
pinMode(sensor1,INPUT);
pinMode(sensor2,INPUT);
// Iniciar comunicacao serie
Serial.begin(9600);
}
void loop() {
converte1=analogRead(sensor1);
converte2=analogRead(sensor2);
converte1=map(converte1,0,1023,0,9);
converte2=map(converte2,0,1023,0,9);
Serial.println(converte1);
Serial.print(converte2);
delay(40);
// Guardar valor lido e recebido do Processing
valor = Serial.read();
// Se o valor recebido for igual a 1, acender o LED verde
if (valor == '1')
{
digitalWrite(ledVerde, HIGH);
}
// Se o valor recebido for igual a 2, desligar o LED verde
else if (valor == '2')
{
digitalWrite(ledVerde, LOW);
}
// Se o valor recebido for igual a 3, acender o LED amarelo
else if (valor == '3')
{
digitalWrite(ledAmarelo, HIGH);
}
// Se o valor recebido for igual a 4, desligar o LED amarelo
else if (valor == '4')
{
digitalWrite(ledAmarelo, LOW);
}
// Se o valor recebido for igual a 5, ligar o LED vermelho
else if (valor == '5')
{
digitalWrite(ledVermelho, HIGH);
}
// Se o valor recebido for igual a 6, desligar o LED vermelho
else if (valor == '6')
{
digitalWrite(ledVermelho, LOW);
}
else if(valor=='7')
{
digitalWrite(ledcinza,HIGH);
}
else if (valor== '8')
{
digitalWrite(ledcinza,LOW);
}
}
-------------------
Esse codigo pessoal se comunica como se fosse falar com o monitor serial, recebe os dados dos sensores em variaveis, os converte usando a função map("que nada mais eh que uma regra de 3") e os joga na serial. E também criamos um char numa váriavel qualquer, incubida de ler o que acontece na serial e dependendo do valor aciona os comandos.
Agora vem o processing^^. Antes de tudo baixem este arquivo zipado e o descompactemna mesma pasta que forem salvar o arquivo do processing:
ficando assim
ótimo agora copie no processing o seguinte código:
----------------
import processing.serial.*;
Serial port;
PImage LAMP;
PImage LAMP1;
PImage LAMP2;
PImage LAMP3;
int x=0;
int co=0;
int coi=0;
int coa=0;
int cou=0;
String leitura;
String dados;
String divisao;
String conversao1;
String conversao2;
int sensor1;
int sensor2;
void setup(){
size(600,600);
background(0);
fill(124,45,65);
rect(100,20,400,50);
LAMP=loadImage("LAMP.png");
LAMP1=loadImage("LAMP1.png");
LAMP2=loadImage("LAMP2.png");
LAMP3=loadImage("LAMP3.png");
textSize(24);
textAlign(CENTER);
fill(255);
text("Eletronica e utilidades",280,52);
port = new Serial(this,"com5", 9600);
}
void draw(){
while (port.available() > 0){
leitura=port.readString();
dados=leitura.substring(0,leitura.length());
String index1=dados.substring(0,1);
String index2=dados.substring(1);
index2=trim(index2);
sensor1= int(index1);
sensor2=int(index2);
print(sensor1);
print(" ");
println(sensor2);
sensor1 +=1;
sensor2 +=1;
int x=sensor1;
int y=sensor2;
fill(0);
arc(300, 200, 150,140, PI, TWO_PI);
fill(30,200,130);
arc(300, 200, 150,140, PI, TWO_PI-(y*TWO_PI/18));
fill(255);
textSize(20);
text("0",200,200);
text("15",215,160);
text("30",245,135);
text("50",295,120);
text("65",355,135);
text("80",385,160);
text("100",400,200);
fill(0);
arc(300, 400, 150,140, PI, TWO_PI);
fill(110,98,230);
arc(300, 400, 150,140, PI, (TWO_PI- (x*TWO_PI/18)));
fill(255);
textSize(20);
text("0",200,400);
text("15",215,360);
text("30",245,335);
text("50",295,320);
text("65",355,335);
text("80",385,360);
text("100",400,400);
fill(0,coa,0);
strokeWeight(3);
stroke(98,245,31);
rect(30,430,100,130);
fill(255);
textSize(24);
textAlign(CENTER);
image(LAMP,45,470);
text("SALA",85,460);
fill(0,cou,0);
strokeWeight(3);
stroke(98,245,31);
rect(150,430,100,130);
fill(255);
textSize(24);
textAlign(CENTER);
image(LAMP1,165,470);
text("QUART",205,460);
fill(0,coi,0);
strokeWeight(3);
stroke(98,245,31);
rect(270,430,100,130);
fill(255);
textSize(24);
textAlign(CENTER);
image(LAMP2,285,470);
text("BANH",325,460);
fill(0,co,0);
strokeWeight(3);
stroke(98,245,31);
rect(390,430,100,130);
fill(255);
textSize(24);
textAlign(CENTER);
image(LAMP3,405,470);
text("CORR",445,460);
}
if (mousePressed && mouseX > 30 && mouseX < 130 && mouseY >430 && mouseY < 560)
{
// Desligar LED roxo
if (coa == 80)
{
port.write("2");
}
// Ligar cinza verde
else
{
port.write("1");
}
}
if (mousePressed && mouseX > 150 && mouseX < 250 && mouseY >430 && mouseY < 560)
{
// Desligar LED roxo
if (cou == 80)
{
port.write("4");
}
// Ligar cinza verde
else
{
port.write("3");
}
}
if (mousePressed && mouseX > 390 && mouseX < 490 && mouseY >430 && mouseY < 560)
{
// Desligar LED roxo
if (co == 80)
{
port.write("6");
}
// Ligar cinza verde
else
{
port.write("5");
}
}
if (mousePressed && mouseX > 270 && mouseX < 370 && mouseY >430 && mouseY < 560)
{
// Desligar LED roxo
if (coi == 80)
{
port.write("8");
}
// Ligar cinza verde
else
{
port.write("7");
}
}
}
void mouseClicked(){
if(mouseX>270&& mouseX<370 &&mouseY>430 && mouseY<560)
{
if(coi==0)
{
coi=80;
}
else{
coi=0;
}
}
if(mouseX>390&& mouseX<490 &&mouseY>430 && mouseY<560){
if(co==0)
{
co=80;
}
else{
co=0;
}
}
if(mouseX>150&& mouseX<250 &&mouseY>430 && mouseY<560){
if(cou==0)
{
cou=80;
}
else{
cou=0;
}
}
if(mouseX>30&& mouseX<130 &&mouseY>430 && mouseY<560){
if(coa==0)
{
coa=80;
}
else{
coa=0;
}
}
}
-------------
Depois 1° compile o do arduino, quando ele tiver ok com a serial compile posteriormente o do processing. Se tudo der certo voce estará vendo uma tela assim:
Essa é a versão 1.0. Na que eu fiz e adaptei ele le 2 sensores e faz 4 acionamentos.
Bem pessoal comentando o código no processing: Antes do void setup voce declara as variáveis que irá precisar, no void setup voce declara o tamanho da tela e a cor de fundo, e a comunicação com o serial do arduino, setando a porta e os bla bla blas.
No void loop voce configura para receber a string do arduino e converter ela para inteiro, pos ela vem na tabela ASCII e faz uma ligeira conversão. Como vem 2 sensores, dividimos a string em 2 com a fórmula de substring, ja implementada em processing e determinados o começo dela e seu tamanho(substring.(0,1)).
apos essa divisão da String é que convertemos a mesma.
int x= int(trim(nomedastring));
E depois a inserimos numa imagem qualquer feito no processing.
Para se fazer um grafico devemos espelha-lo no processing.Assim se formos fazer um retangulo, devemos fazer 1° um com a cor de fundo:
x+=1;
fill(fundo);
rect(distanciax,distanciay,comprimento,altura);
e outro com uma cor que se destaca:
fill(destaca);
rect(distanciax,distanciay,comprimento,altura-x)
Em que x seria o valor recebido pela serial.
Se seu gráfico precisa de uma "encorpada", antes de jogar no gráfico voce pode fazer uma conversão:x=x*10 ou algo que melhor se adeque ao seu projeto.
E de resto pra acender leds foi usado a função void MouseClicked(){
if(mousex<começodex&& finaldex>mousex &&mouseY<começodey && finaldey>mouseY){
if(cor==0){
cor=80;
}
else{
cor=0;
}
}
--------------
para implementar isso basta criar um retangulo com uma cor linkada a uma variável:
fill(0,cor,0);
rect(coordenadax,coordenaday,valorx,valory);
e assim voce faz tentativa e erro até conseguir fazer o retangulo mudar de cor.
E é isso ahé pessoal, em breve postarei o vídeo.
E como prometido eis o vídeo
Nenhum comentário:
Postar um comentário