Resultados da busca - %E6%9D%8F%E5%BD%A9%E5%B9%B3%E5%8F%B0170%E5%88%B01840%E5%88%86%E5%88%AB%E4%BB%A3%E8%A1%A8%E4%BB%80%E4%B9%88%E6%84%8F%E6%80%9D?%E3%80%90%E2%94%83%E8%81%94%E7%B3%BB%EF%BC%9217431(%E6%89%A3)%E3%80%91%E3%80%91
===========================================================================================char state=1; // variável que guarda posição atual do menuint sensorValue1, sensorValue2, sensorValue3, sensorValue4, sensorValue5, sensorValue6, sensorValue7, sensorValue8; // entradas analogica de A0 a A7// porta Analogicas// A0 sensorValue1 pressão combustivel// A1 sensorValue2 pressão oleo // A2 sensorValue3 temperatura motor// A3 temperaturafloat tensao = 0; // variaveis da tensão da bateriabyte detecta = 2; // porta de detecção de rpmint contador = 0; // contador de rpm// Dimensão do lcd (in pixels)...static const byte LCD_WIDTH = 84;static const byte LCD_HEIGHT = 48;// O número de linhas para o gráfico de temperatura...static const byte CHART_HEIGHT = 5;// Um símbolo de "graus" customizado...static const byte DEGREES_CHAR = 1;static const byte degrees_glyph[] = { 0x00, 0x07, 0x05, 0x07, 0x00 };// A bitmap graphic (10x2) of a thermometer...static const byte THERMO_WIDTH = 10;static const byte THERMO_HEIGHT = 2;static const byte thermometer[] = { 0x00, 0x00, 0x48, 0xfe, 0x01, 0xfe, 0x00, 0x02, 0x05, 0x02,0x00, 0x00, 0x62, 0xff, 0xfe, 0xff, 0x60, 0x00, 0x00, 0x00};
static PCD8544 lcd;void setup(){
// inicia o lcd nokia 5110lcd.begin(LCD_WIDTH, LCD_HEIGHT);Serial.begin(9600);mySerial.begin(9600);
// Registre o símbolo personalizado...lcd.createChar(DEGREES_CHAR, degrees_glyph);
// Botões
pinMode(13, OUTPUT);digitalWrite(13,HIGH);pinMode(detecta,INPUT);digitalWrite(detecta,HIGH);contador = 0;attachInterrupt(0, DETECTA, FALLING);noInterrupts();
lcd.clear();
}void loop() {
// processamento do contagirosunsigned long tempo = millis();while(tempo +300 > millis()){interrupts(); }digitalWrite(13,LOW);int rpm = contador;contador = contador * 100 ;
// faz a varredura das portas analogicas //==============================================================sensorValue1 = analogRead(0); // analog input 0sensorValue2 = analogRead(1); // analog input 1sensorValue3 = analogRead(2); // analog input 2sensorValue4 = analogRead(3); // analog input 3sensorValue5 = analogRead(4); // analog input 4sensorValue6 = analogRead(5); // analog input 5sensorValue7 = analogRead(6); // analog input 6sensorValue8 = analogRead(7); // analog input 7// local onde manda os valores para a serial para tratamento no processing que sera enviada pelo bluetooh
// tratamento da tensão da bateria para exibir no display//==============================================================tensao = sensorValue7 * 0.00488 ;tensao = tensao * 4 ;
//mySerial.print("ola");// porta serial bluetooth para enviar dados trocado pela serial
// exibi na tela os valores de tensão e nivel combustivel //==============================================================float Combustivel = (sensorValue3 * 0.25390625 * 100.0 / 1024 ) -1.0;if (Combustivel > 8){ Combustivel= 0;}// tratamento da tensão da bateria para exibir no display//===============================================================float temperaturaEmCelsius = ( 5 * sensorValue2 * 100.0 / 1024);if (temperaturaEmCelsius > 150){ temperaturaEmCelsius = 150.0;}//================================================================
lcd.setCursor(0, LCD_HEIGHT/8 - THERMO_HEIGHT);lcd.drawBitmap(thermometer, THERMO_WIDTH, THERMO_HEIGHT);lcd.setCursor(0, 0);lcd.print(" BAT: ");lcd.print(tensao); // tensão da baterialcd.print(" V ");lcd.setCursor(0, 2);lcd.print("TANQUE: ");lcd.print(contador); // tensão da baterialcd.print(" Lts");lcd.print(" ");lcd.setCursor(14, 4);lcd.print(" TEMP:");lcd.setCursor(14, 5);lcd.print(temperaturaEmCelsius, 1);lcd.print(" \001C ");
// local onde manda os valores para a serial para tratamento no processing// apenas para depuração na serialSerial.print(contador); // print rpmSerial.print(","); // print ','Serial.print(sensorValue1); // print sensor 1Serial.print(","); // print ','Serial.print(temperaturaEmCelsius); // print sensor 2Serial.print(","); // print ','Serial.print(Combustivel); // print sensor 3 Serial.print(",");Serial.print(sensorValue4); // print sensor 4 Serial.print(","); Serial.print(sensorValue5); // print sensor 5 Serial.print(",");Serial.print(sensorValue6); // print sensor 6 Serial.print(","); Serial.print(tensao); // print sensor 7 Serial.print(",");Serial.println(sensorValue8); // print sensor 8 (println)
//========================================================================}void DETECTA(){contador ++;Serial.print(contador);}
//codigo processing //===========================================================================// Importa bibliotecas para Serialimport processing.serial.*;Serial port; // Inicia instância de porta serialint Rpm, oleo, Nivel_combustivel, Ar, tensao;float temperatura;float combustivel;int end = 10; // tele número 10 é ASCII para linefeed (fim de Serial.println), mais tarde, vamos olhar para este para quebrar mensagens individuaisString serial; // declarar uma nova seqüência chamada "série". Uma string é uma sequência de caracteres (tipo de dados conhecida como "char")void setup(){frame.setTitle (" Monitor V4.0");// Define tamanho da janelasize(800,600);// Inicia porta serial na COM3 a 9600 bauds//port = new Serial(this, "COM3", 9600);port = new Serial(this, Serial.list()[0], 9600); // inicializar o objeto através da atribuição de uma taxa portuária e de transmissão (deve corresponder ao do Arduino)port.clear(); // função da biblioteca de série que joga para fora a primeira leitura, no caso que começou a ler no meio de uma seqüência de Arduinoserial = port.readStringUntil(end); // função que ler a cadeia da porta serial até que um println em seguida, atribui seqüência à nossa cadeia variável (chamado 'série')serial = null; // inicialmente, a seqüência será nulo (vazio)
textFont(createFont("ArialNarrow-Bold", 40));}void draw(){
textSize(13);
// Enquanto receber algo pela serialwhile (port.available() > 0) { //enquanto não há dados provenientes de porta serial, lê-lo e armazená-loserial = port.readStringUntil(end);}if (serial != null) { //se a cadeia não está vazia, imprima o seguinte
/* Nota: a função split usado a seguir não é necessário se o envio de uma única variável. No entanto, é útil para analisar (separação) mensagens quandoleitura de múltiplas entradas em Arduino. Abaixo é exemplo de código para um esboço Arduino*/
String[] a = split(serial, ','); //uma nova matriz (chamada de 'a') que armazena valores em células separadas (separados por vírgulas especificadas em seu programa Arduino)println(a[0]); // imprimir Value1 (na célula 1 de Array - lembre-se que as matrizes são zero-indexada)println(a[1]); //imprimir valor Value2println(a[2]);println(a[3]);println(a[4]);println(a[5]);println(a[6]);println(a[7]);println(a[8]);
oleo = parseInt (a[7]);Nivel_combustivel =parseInt (a[7]);
//tesao = a[1];
background(0); // Define o fundo branco
// BARRA DE CONTAGIROS//==========================================================================================================================================Rpm = parseInt (a[0]); // valor do contador// Preenche com preto fill(255,255,255); // brancorect(10, 20, 250, 40);//fill(0,0,255); // azultext("RPM", 20, 16);//rect(71, 50 , 60 - valorConvertido, 100); // posição (x,y,largura, comprimento); barra corre na horixontal
// Não altera o posicionamento da altura da barra (faça testes!)//rect(71, 0, 60 - 2, valorConvertido);// Gera Altera posicionamento da altura da barra de acordo com o valor recebido//rect(71, 50 + (100 - valorConvertido), 60 - 2, valorConvertido);//rect(71, 50 + (100 - valorConvertido), 60 - 2, valorConvertido);//rect(71, 50 + (100 - valorConvertido), 60 - 2, valorConvertido); // posição (x,y,largura, comprimento); barra corre na vertical//rect(71, 50 , 60 - valorConvertido, 100); // posição (x,y,largura, comprimento); barra corre na horixontal//text( valorConvertido, 90, 40);//==================================================================================================================================================// BARRA DE PRESSÃO DE AR//==================================================================================================================================================Ar = parseInt (a[1]); // valor da pressão do ARAr =Ar / 2;fill(255,255,255); // brancorect(280, 20, 50, 40); // VACUOrect(330, 20, 100, 40); // PRESSÃOtext("VACUO", 280, 16);text("PRESSÃO", 340, 16);// TRATAMENTO E ENCHEMENTO DAS BARRAS
fill(0,0,255); // azulrect(331, 20 ,100- Ar, 40); // posição (x,y,largura, comprimento); barra corre na horixontalfill(255,0,0); // brancotext(Ar, 280, 74);// Não altera o posicionamento da altura da barra (faça testes!)//rect(71, 0, 60 - 2, valorConvertido);// Gera Altera posicionamento da altura da barra de acordo com o valor recebido//rect(71, 50 + (100 - valorConvertido), 60 - 2, valorConvertido);//rect(71, 50 + (100 - valorConvertido), 60 - 2, valorConvertido);//rect(71, 50 + (100 - valorConvertido), 60 - 2, valorConvertido); // posição (x,y,largura, comprimento); barra corre na vertical//rect(71, 50 , 60 - valorConvertido, 100); // posição (x,y,largura, comprimento); barra corre na horixontal//text( valorConvertido, 90, 40);//==================================================================================
// TEMPERATURA DO MOTOR//==================================================================================// texto de temp motorfill(255,255,0); // brancotextSize(11);text("TEMPERATURA", 18, 90);temperatura = parseFloat (a[2]); // valor temperatura do motor//float temperaturaEmCelsius = ( 5 * temperatura * 100.0 / 1024);fill(255,255,255);// Cria um retângulo de 60 x 100. coordenada x = 70 e y = 50rect(30, 100, 50, 100); // motor
fill(255,0,0);textSize(12);text(temperatura+" ºC ", 35, 218); // text("AGUA>-", 7, !VARIAVEL TRATADA!);//fill(255,255,255);//line(30, 120, 740, 120); //line(200, 120, 200, 300); //line(30, 300, 740, 300);//line(200, 100, 200, 100);// Preenche com vermelhoif(temperatura <100){ fill(255,255,0); }if(temperatura <90){ fill(0,255,0); }if(temperatura <80){ fill(0,0,255); }// Prepara o valor para inserir no gráficotemperatura =temperatura/10;temperatura =temperatura* 7;rect(31, 100 + (100 - temperatura), 50 - 2, temperatura);//rect(31, 100 , 50 - temperatura, 100);//text( valorConvertido, 90, 40);//==================================================================================// PRESSAO DE COMBUSTIVEL//==================================================================================combustivel = parseFloat (a[3]);// Preenche com pretofill(255,255,255);// Cria um retângulo de 60 x 100. coordenada x = 70 e y = 50rect(130, 100, 50, 100);// pressaO de combustivelfill(255,255,0); // AMARELOtextSize(11);text("PRESSÃO", 130, 82);text("COMBUSTIVEL", 118, 93);// Preenche com vermelhofill(255,0,0);textSize(12);fill(255,255,0);if (combustivel < 3){ fill(255,255,0); }if ( combustivel < 2) { fill(255,0,0); }if ( combustivel < 0) { fill(0,0,255); }if(combustivel > 4){ fill(0,255,0); }text(combustivel+" Bar", 135, 218);combustivel =combustivel *11.1;rect(131, 90 + ((100 - combustivel) -1.0), 50 - 2,combustivel);// Prepara o valor para inserir no gráfico//rect(101, 50 , 100 - valorConvertido, 100);//text( valorConvertido, 90, 40);//==================================================================================
// BARRA DE VOLTS DA BATERIA//==================================================================================float volts = parseFloat (a[7]); //volts = volts * 0.00489;//volts = volts * 4;
fill(255,255,255);rect(220, 100, 40, 100);fill(255,255,0); // brancotextSize(11);text("BATERIA", 218, 90);textSize(12);if (volts < 12){ fill(255,255,0); }if ( volts < 10) { fill(255,0,0); }if(volts > 12){ fill(0,255,0); }text(volts + " V", 222, 218);volts = volts *6.5;rect(221, 100 + (100 - volts), 40 - 2, volts);//==================================================================================
}}…
meu codico fonte
e fazer rodar no android, antigamente tinha uma ide que ja rodava para android do processin, mais hoje isso eu não encontro mais.
gostaria de saber se alguem sabe exporta o programa para roda em android em forma de apk.
segue o codigo que envia os dados pela serial do arduino
===========================================================================
codigo arduino
===========================================================================
#include <PCD8544.h>#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX// criando as variaveis na global//======================================================================================================
char state=1; // variável que guarda posição atual do menu
int sensorValue1, sensorValue2, sensorValue3, sensorValue4, sensorValue5, sensorValue6, sensorValue7, sensorValue8; // entradas analogica de A0 a A7// porta Analogicas// A0 sensorValue1 pressão combustivel// A1 sensorValue2 pressão oleo // A2 sensorValue3 temperatura motor// A3 temperaturafloat tensao = 0; // variaveis da tensão da bateria
byte detecta = 2; // porta de detecção de rpmint contador = 0; // contador de rpm
// Dimensão do lcd (in pixels)...static const byte LCD_WIDTH = 84;static const byte LCD_HEIGHT = 48;
// O número de linhas para o gráfico de temperatura...static const byte CHART_HEIGHT = 5;
// Um símbolo de "graus" customizado...static const byte DEGREES_CHAR = 1;static const byte degrees_glyph[] = { 0x00, 0x07, 0x05, 0x07, 0x00 };
// A bitmap graphic (10x2) of a thermometer...static const byte THERMO_WIDTH = 10;static const byte THERMO_HEIGHT = 2;static const byte thermometer[] = { 0x00, 0x00, 0x48, 0xfe, 0x01, 0xfe, 0x00, 0x02, 0x05, 0x02, 0x00, 0x00, 0x62, 0xff, 0xfe, 0xff, 0x60, 0x00, 0x00, 0x00}; static PCD8544 lcd;
void setup(){ // inicia o lcd nokia 5110 lcd.begin(LCD_WIDTH, LCD_HEIGHT); Serial.begin(9600); mySerial.begin(9600); // Registre o símbolo personalizado... lcd.createChar(DEGREES_CHAR, degrees_glyph); // Botões pinMode(13, OUTPUT); digitalWrite(13,HIGH);
pinMode(detecta,INPUT); digitalWrite(detecta,HIGH); contador = 0; attachInterrupt(0, DETECTA, FALLING); noInterrupts(); lcd.clear(); }
void loop() { // processamento do contagiros unsigned long tempo = millis();while(tempo +300 > millis()){interrupts(); }
digitalWrite(13,LOW);int rpm = contador;contador = contador * 100 ; // faz a varredura das portas analogicas //============================================================== sensorValue1 = analogRead(0); // analog input 0 sensorValue2 = analogRead(1); // analog input 1 sensorValue3 = analogRead(2); // analog input 2 sensorValue4 = analogRead(3); // analog input 3 sensorValue5 = analogRead(4); // analog input 4 sensorValue6 = analogRead(5); // analog input 5 sensorValue7 = analogRead(6); // analog input 6 sensorValue8 = analogRead(7); // analog input 7 // local onde manda os valores para a serial para tratamento no processing que sera enviada pelo bluetooh
// tratamento da tensão da bateria para exibir no display //============================================================== tensao = sensorValue7 * 0.00488 ; tensao = tensao * 4 ; //mySerial.print("ola");// porta serial bluetooth para enviar dados trocado pela serial // exibi na tela os valores de tensão e nivel combustivel //============================================================== float Combustivel = (sensorValue3 * 0.25390625 * 100.0 / 1024 ) -1.0; if (Combustivel > 8){ Combustivel= 0;} // tratamento da tensão da bateria para exibir no display //=============================================================== float temperaturaEmCelsius = ( 5 * sensorValue2 * 100.0 / 1024); if (temperaturaEmCelsius > 150){ temperaturaEmCelsius = 150.0;} //================================================================ lcd.setCursor(0, LCD_HEIGHT/8 - THERMO_HEIGHT); lcd.drawBitmap(thermometer, THERMO_WIDTH, THERMO_HEIGHT);
lcd.setCursor(0, 0); lcd.print(" BAT: "); lcd.print(tensao); // tensão da bateria lcd.print(" V "); lcd.setCursor(0, 2); lcd.print("TANQUE: "); lcd.print(contador); // tensão da bateria lcd.print(" Lts"); lcd.print(" "); lcd.setCursor(14, 4); lcd.print(" TEMP:"); lcd.setCursor(14, 5); lcd.print(temperaturaEmCelsius, 1); lcd.print(" \001C "); // local onde manda os valores para a serial para tratamento no processing // apenas para depuração na serial Serial.print(contador); // print rpm Serial.print(","); // print ',' Serial.print(sensorValue1); // print sensor 1 Serial.print(","); // print ',' Serial.print(temperaturaEmCelsius); // print sensor 2 Serial.print(","); // print ',' Serial.print(Combustivel); // print sensor 3 Serial.print(","); Serial.print(sensorValue4); // print sensor 4 Serial.print(","); Serial.print(sensorValue5); // print sensor 5 Serial.print(","); Serial.print(sensorValue6); // print sensor 6 Serial.print(","); Serial.print(tensao); // print sensor 7 Serial.print(","); Serial.println(sensorValue8); // print sensor 8 (println) //========================================================================}void DETECTA(){contador ++;Serial.print(contador);}
===========================================================================
codigo processing
===========================================================================
// Importa bibliotecas para Serialimport processing.serial.*;Serial port; // Inicia instância de porta serial
int Rpm, oleo, Nivel_combustivel, Ar, tensao;float temperatura;float combustivel;int end = 10; // tele número 10 é ASCII para linefeed (fim de Serial.println), mais tarde, vamos olhar para este para quebrar mensagens individuaisString serial; // declarar uma nova seqüência chamada "série". Uma string é uma sequência de caracteres (tipo de dados conhecida como "char")
void setup(){ frame.setTitle (" Monitor V4.0");
// Define tamanho da janelasize(800,600);// Inicia porta serial na COM3 a 9600 bauds//port = new Serial(this, "COM3", 9600); port = new Serial(this, Serial.list()[0], 9600); // inicializar o objeto através da atribuição de uma taxa portuária e de transmissão (deve corresponder ao do Arduino) port.clear(); // função da biblioteca de série que joga para fora a primeira leitura, no caso que começou a ler no meio de uma seqüência de Arduino serial = port.readStringUntil(end); // função que ler a cadeia da porta serial até que um println em seguida, atribui seqüência à nossa cadeia variável (chamado 'série') serial = null; // inicialmente, a seqüência será nulo (vazio) textFont(createFont("ArialNarrow-Bold", 40));
}void draw(){ textSize(13); // Enquanto receber algo pela serial while (port.available() > 0) { //enquanto não há dados provenientes de porta serial, lê-lo e armazená-lo serial = port.readStringUntil(end); } if (serial != null) { //se a cadeia não está vazia, imprima o seguinte /* Nota: a função split usado a seguir não é necessário se o envio de uma única variável. No entanto, é útil para analisar (separação) mensagens quando leitura de múltiplas entradas em Arduino. Abaixo é exemplo de código para um esboço Arduino */ String[] a = split(serial, ','); //uma nova matriz (chamada de 'a') que armazena valores em células separadas (separados por vírgulas especificadas em seu programa Arduino) println(a[0]); // imprimir Value1 (na célula 1 de Array - lembre-se que as matrizes são zero-indexada) println(a[1]); //imprimir valor Value2 println(a[2]); println(a[3]); println(a[4]); println(a[5]); println(a[6]); println(a[7]); println(a[8]); oleo = parseInt (a[7]); Nivel_combustivel =parseInt (a[7]); //tesao = a[1]; background(0); // Define o fundo branco
// BARRA DE CONTAGIROS//==========================================================================================================================================Rpm = parseInt (a[0]); // valor do contador
// Preenche com preto fill(255,255,255); // brancorect(10, 20, 250, 40);//fill(0,0,255); // azultext("RPM", 20, 16);
//rect(71, 50 , 60 - valorConvertido, 100); // posição (x,y,largura, comprimento); barra corre na horixontal
// Não altera o posicionamento da altura da barra (faça testes!)//rect(71, 0, 60 - 2, valorConvertido);// Gera Altera posicionamento da altura da barra de acordo com o valor recebido//rect(71, 50 + (100 - valorConvertido), 60 - 2, valorConvertido);//rect(71, 50 + (100 - valorConvertido), 60 - 2, valorConvertido);//rect(71, 50 + (100 - valorConvertido), 60 - 2, valorConvertido); // posição (x,y,largura, comprimento); barra corre na vertical//rect(71, 50 , 60 - valorConvertido, 100); // posição (x,y,largura, comprimento); barra corre na horixontal//text( valorConvertido, 90, 40);//==================================================================================================================================================
// BARRA DE PRESSÃO DE AR//==================================================================================================================================================
Ar = parseInt (a[1]); // valor da pressão do ARAr =Ar / 2;
fill(255,255,255); // brancorect(280, 20, 50, 40); // VACUOrect(330, 20, 100, 40); // PRESSÃOtext("VACUO", 280, 16);text("PRESSÃO", 340, 16);// TRATAMENTO E ENCHEMENTO DAS BARRAS
fill(0,0,255); // azulrect(331, 20 ,100- Ar, 40); // posição (x,y,largura, comprimento); barra corre na horixontalfill(255,0,0); // brancotext(Ar, 280, 74);// Não altera o posicionamento da altura da barra (faça testes!)//rect(71, 0, 60 - 2, valorConvertido);// Gera Altera posicionamento da altura da barra de acordo com o valor recebido//rect(71, 50 + (100 - valorConvertido), 60 - 2, valorConvertido);//rect(71, 50 + (100 - valorConvertido), 60 - 2, valorConvertido);//rect(71, 50 + (100 - valorConvertido), 60 - 2, valorConvertido); // posição (x,y,largura, comprimento); barra corre na vertical//rect(71, 50 , 60 - valorConvertido, 100); // posição (x,y,largura, comprimento); barra corre na horixontal//text( valorConvertido, 90, 40);//==================================================================================
// TEMPERATURA DO MOTOR//==================================================================================
// texto de temp motorfill(255,255,0); // brancotextSize(11);text("TEMPERATURA", 18, 90);
temperatura = parseFloat (a[2]); // valor temperatura do motor //float temperaturaEmCelsius = ( 5 * temperatura * 100.0 / 1024);
fill(255,255,255);// Cria um retângulo de 60 x 100. coordenada x = 70 e y = 50rect(30, 100, 50, 100); // motor
fill(255,0,0);textSize(12);text(temperatura+" ºC ", 35, 218); // text("AGUA>-", 7, !VARIAVEL TRATADA!);//fill(255,255,255);//line(30, 120, 740, 120); //line(200, 120, 200, 300); //line(30, 300, 740, 300);//line(200, 100, 200, 100);
// Preenche com vermelhoif(temperatura <100){ fill(255,255,0); }if(temperatura <90){ fill(0,255,0); }if(temperatura <80){ fill(0,0,255); }
// Prepara o valor para inserir no gráficotemperatura =temperatura/10;temperatura =temperatura* 7;rect(31, 100 + (100 - temperatura), 50 - 2, temperatura);//rect(31, 100 , 50 - temperatura, 100);//text( valorConvertido, 90, 40);//==================================================================================
// PRESSAO DE COMBUSTIVEL//==================================================================================
combustivel = parseFloat (a[3]);
// Preenche com pretofill(255,255,255);// Cria um retângulo de 60 x 100. coordenada x = 70 e y = 50rect(130, 100, 50, 100);// pressaO de combustivelfill(255,255,0); // AMARELOtextSize(11);text("PRESSÃO", 130, 82);text("COMBUSTIVEL", 118, 93);// Preenche com vermelhofill(255,0,0);
textSize(12);fill(255,255,0);if (combustivel < 3){ fill(255,255,0); }if ( combustivel < 2) { fill(255,0,0); }if ( combustivel < 0) { fill(0,0,255); }if(combustivel > 4){ fill(0,255,0); }text(combustivel+" Bar", 135, 218);
combustivel =combustivel *11.1;
rect(131, 90 + ((100 - combustivel) -1.0), 50 - 2,combustivel);
// Prepara o valor para inserir no gráfico
//rect(101, 50 , 100 - valorConvertido, 100);//text( valorConvertido, 90, 40);//==================================================================================
// BARRA DE VOLTS DA BATERIA//================================================================================== float volts = parseFloat (a[7]); //volts = volts * 0.00489; //volts = volts * 4; fill(255,255,255);rect(220, 100, 40, 100);fill(255,255,0); // brancotextSize(11);text("BATERIA", 218, 90);
textSize(12);if (volts < 12){ fill(255,255,0); }if ( volts < 10) { fill(255,0,0); }if(volts > 12){ fill(0,255,0); }text(volts + " V", 222, 218);volts = volts *6.5;
rect(221, 100 + (100 - volts), 40 - 2, volts);
//==================================================================================
}}
ta meio zoneado, mais to limpando o codigo. qm poder me ajudar agradeço.…
Modificado: 20/01/2013// Version : 1.0// Notes : // : //*************************************************************************
int t1[7]= { //Timer do motor de 3cv0,0,0,0,0,0,0};int dd=1000; // used for delay in show timer data
// Bibliotecas#include <LiquidCrystal.h> #include <Wire.h>#include <EEPROM.h>#include "RTClib.h"RTC_DS1307 RTC;
// Definição dos pinos dos botões#define bMenu A2 // Os pinos analógicos podem ser#define bChange A3 // usados como digitais, bastando#define bUp A0 // referenciá-los por A0, A1..#define bDown A1#define benter 8#define bMenu0 90 // Valor de referência que a #define bChange0 91 // função CheckButton() passa#define bUp0 92 // indicando que um botão foi#define bDown0 93 // solto#define benter0 94boolean aMenu, aChange, aUp, aDown, aenter; // Grava o ultimo valor lidos nos botões. // Utilizado pela função Checkbutton p/ identificar quando há uma alteração no estado do pino dos botõesint horini=EEPROM.read(0); // variavel a ser alterada pelo menuint minini=EEPROM.read(1);int horfim=EEPROM.read(2);int minfim=EEPROM.read(3);char state=1; // variável que guarda posição atual do menuLiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Declaração do objeto tipo lcdString ArrumaZero(int i){String ret;if (i < 10) ret += "0";ret += i;return ret;}//******************************** SETUP *********************************void setup(){Wire.begin();lcd.begin(16, 2); // Iniciando a biblioteca do LCDRTC.begin();
pinMode(bMenu, INPUT); // BotõespinMode(bChange,INPUT);pinMode(bUp, INPUT);pinMode(bDown, INPUT);pinMode(benter, INPUT);pinMode(1, OUTPUT); // USADO PARA VALVULA 5pinMode(13, OUTPUT); // USADO PARA VALVULA 4pinMode(10, OUTPUT); // USADO PARA VALVULA 3pinMode(6, OUTPUT); // USADO PARA VALVULA 2pinMode(7, OUTPUT); // USADO PARA VALVULA 1pinMode(9, OUTPUT); // USADO PARA CONTROLAR A BOMBA
digitalWrite(bMenu, HIGH); // Aciona o pull-up internodigitalWrite(bChange,HIGH); // dos botõesdigitalWrite(bUp, HIGH);digitalWrite(bDown, HIGH);digitalWrite(benter, HIGH);
if (!RTC.isrunning()){RTC.adjust(DateTime(__DATE__, __TIME__));}
t1[0]= EEPROM.read(0);t1[1]= EEPROM.read(1);t1[2]= EEPROM.read(2);t1[3]= EEPROM.read(3);t1[4]= 8;t1[5]= 1;}
//**************************************** LOOP **************************void loop(){switch (state) { // Define checa qual tela atualcase 1: // executado quando na TELA 1switch (CheckButton()) {case bUp:lcd.clear(); Set_state(7); // antes de mudar de tela, é necessário limpar o break; // display com a função lcd.clear()case bDown:lcd.clear(); Set_state(2);break;default: // Caso nenhum botão tenha sido apertado, ela executa a set_stateSet_state(1); // mesmo assim para atualizar o display.}break;
case 2: // executado quando na TELA 2switch (CheckButton()) {case bMenu:lcd.clear(); horini--;break;case bChange:lcd.clear(); horini++;break;case bUp: lcd.clear(); Set_state(1);break;case bDown:lcd.clear(); Set_state(3);break;case benter:EEPROM.write(0, horini);default: Set_state(2);}break;
case 3: // executado quando na TELA 3switch (CheckButton()) {case bMenu:lcd.clear(); minini--;break;case bChange:lcd.clear(); minini++;break;case bUp: lcd.clear(); Set_state(2);break;case bDown:lcd.clear(); Set_state(4);break;case benter:EEPROM.write(1, minini);default: Set_state(3);}break;
case 4: // executado quando na TELA 4switch (CheckButton()) {case bMenu:lcd.clear(); horfim--;break;case bChange:lcd.clear(); horfim++;break;case bUp: lcd.clear(); Set_state(3);break;case bDown:lcd.clear(); Set_state(5);break;case benter:EEPROM.write(2, horfim);default: Set_state(4);}break;
case 5: // executado quando na TELA 5switch (CheckButton()) {case bMenu:lcd.clear(); minfim--;break;case bChange:lcd.clear(); minfim++;break;case bUp: lcd.clear(); Set_state(4);break;case bDown:lcd.clear(); Set_state(6);break;case benter:EEPROM.write(3, minfim);default: Set_state(5);}break;
case 6: // executado quando na TELA 6switch (CheckButton()) {case bUp: lcd.clear(); Set_state(5);break;case bDown:lcd.clear(); Set_state(7);break;default: Set_state(6);}break;
case 7: // executado quando na TELA 7switch (CheckButton()) {case bUp:lcd.clear(); Set_state(6);break;case bDown:lcd.clear(); Set_state(1);break;default: Set_state(7);}break;
default: ;}checktimer1();delay(200); // to stop screen flicker}//******************************* FIM da função LOOP *******************
// checa o horário para saber se irá ligar o motorvoid checktimer1(){DateTime agora = RTC.now();
int hora = agora.hour();int minuto = agora.minute();int segundo = agora.second();
if (t1[4]==8);{if (hora==t1[0] && minuto==t1[1]){digitalWrite(7, HIGH);delay(5000);digitalWrite(9,HIGH);delay(3600000);digitalWrite(6,HIGH);delay(5000);digitalWrite(7,LOW);delay(3600000);digitalWrite(9,LOW);digitalWrite(6,LOW);t1[6]=1;}if (hora==t1[2] && minuto==t1[3]){digitalWrite(9, LOW);digitalWrite(6,LOW);digitalWrite(7,LOW);t1[6]=0;}}}
//******************************** CheckButton ***********************char CheckButton() {if (aMenu!=digitalRead(bMenu)) {aMenu=!aMenu;if (aMenu) return bMenu0; else return bMenu;} elseif (aChange!=digitalRead(bChange)) {aChange=!aChange;if (aChange) return bChange0; else return bChange;} elseif (aUp!=digitalRead(bUp)) {aUp=!aUp;if (aUp) return bUp0; else return bUp;} elseif (aDown!=digitalRead(bDown)) {aDown=!aDown;if (aDown) return bDown0; else return bDown;} elseif (aenter!=digitalRead(benter)) {aenter=!aenter;if (aenter) return benter0; else return benter;} elsereturn 0;}
//****************************** Set_state *****************************void Set_state(char index) {state = index; // Atualiza a variável state para a nova tela
DateTime agora = RTC.now();
String relogio_data = "DT: ";String relogio_hora = "HR: ";
int dia = agora.day();int mes = agora.month();int ano = agora.year();
relogio_data += ArrumaZero(dia);relogio_data += "/";relogio_data += ArrumaZero(mes);relogio_data += "/";relogio_data += ano;
int hora = agora.hour();int minuto = agora.minute();int segundo = agora.second();
relogio_hora += ArrumaZero(hora);relogio_hora += ":";relogio_hora += ArrumaZero(minuto);relogio_hora += ":";relogio_hora += ArrumaZero(segundo);switch (state) { // verifica qual a tela atual e exibe o conteúdo correspondente
case 1: //==================== state 1lcd.setCursor(0, 0);lcd.print(relogio_data);lcd.setCursor(0, 1);lcd.print(relogio_hora);break;case 2: //==================== state 2lcd.setCursor(0,0);lcd.print("Hor. Inicio");lcd.setCursor(0,1);lcd.print(horini);break;case 3: //==================== state 3lcd.setCursor(0,0);lcd.print("Min. Inicio");lcd.setCursor(0,1);lcd.print(minini);break;case 4: //==================== state 4lcd.setCursor(0,0);lcd.print("Hor. Fim");lcd.setCursor(0,1);lcd.print(horfim);break;case 5: //==================== state 5lcd.setCursor(0,0);lcd.print("Min. Fim");lcd.setCursor(0,1);lcd.print(minfim);break;case 6: //==================== state 6lcd.setCursor(0,0);lcd.print("Alarme:");break;case 7: //==================== state 7lcd.setCursor(0,0);lcd.print("Segundos:");lcd.setCursor(0,1);lcd.print( millis()/1000 , DEC); // mostra os segundos na telalcd.print(" s");lcd.print(" ");lcd.print(millis()/86400000, DEC); // mostra os dias na telalcd.print(" dias");
break;default: ;}}…
do arduino.
abaixo segue o codigo que tenho ate agora. essa sensores de umidade e temperatura podem ignora-los. o intuito desse projeto é criar um controlador de umidade e temperatura. e programa-lo para acionar uma bomba ou uma contatora em determinada hora do dia
#include <LiquidCrystal_I2C.h>#include <DS1307RTC.h>#include <Wire.h>#include <Time.h>#include <dht.h>#include <OneWire.h>#include <LiquidCrystal_I2C.h>#include <DallasTemperature.h> // Clock set command pins#define clockSet 7#define clockUp 9#define clockDown 8 //Clock states#define stClockRunning 0#define stSetHour 1#define stSetMinute 2#define stSetSecond 3
// Conectar o pino central dos sensores ao pino 10 do Arduino#define ONE_WIRE_BUS 10
// entradas analogiacas para DHT#define dht1_dpin A1 //Pino DATA do Sensor ligado na porta Analogica A1#define dht2_dpin A3 // pino data ligado na porta A0#define dht3_dpin A2 // pino data ligado na porta A2
// Setup a oneWire instance to communicate with any OneWire devicesOneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature.//local onde se nomeia os sensores e se apresenta seu codigo de fabricaDallasTemperature sensors(&oneWire);DeviceAddress insideThermometer = { 0x28, 0xFF, 0xC6, 0x33, 0x70, 0x16, 0x04, 0xFE };DeviceAddress outsideThermometer = { 0x28, 0xFF, 0xFC, 0x04, 0x70, 0x16, 0x04, 0x09 };DeviceAddress dogHouseThermometer = { 0x28, 0x4B, 0x64, 0x03, 0x00, 0x00, 0x80, 0x99 };
dht DHT; //Inicializa o sensordht DHT1; //Inicializa o sensordht DHT2; //Inicializa o sensor
//float mediatemp = 0;float mediaumidade = 0;float media_temp = 0;
int stat = stClockRunning;
// Modulo RTC no endereco 0x68#define DS1307_ADDRESS 0x68
// Modulo I2C display no endereco 0x27LiquidCrystal_I2C lcd(0x3F,2,1,0,4,5,6,7,3, POSITIVE);void Print(int number){ lcd.print(number/10); lcd.print(number%10);} // Fill lcd displayvoid printTime(){ lcd.setCursor(4,0); Print(hour()); lcd.print(":"); Print(minute()); lcd.print(":"); Print(second());
// parte do DHT lcd.setCursor(8,1); lcd.print("U:"); lcd.print(media_umidade()); lcd.print("%");
//parte ds18b20 lcd.setCursor(0,1); lcd.print("T:"); lcd.print(mediatemp()); lcd.write(223);
lcd.setCursor(0,0); if (stat != stClockRunning) lcd.print("*"); else lcd.print(" "); switch(stat) { case stSetHour: lcd.print("H"); break; case stSetMinute: lcd.print("M"); break; case stSetSecond: lcd.print("s"); break; }} // Read pin using threshold, as a switch, that is,// first time pressed switch on, second time switch offint readPinSwitch(int pin, int threshold){ if (digitalRead(pin)) { unsigned long tt = millis(); while (digitalRead(pin)); if ((millis() - tt) > threshold) return 1; else return 0; } else return 0;} //Read pin using thresholdint readPin(int pin, int threshold){ if (digitalRead(pin)) { unsigned long tt = millis(); while ((digitalRead(pin) && (millis() - tt) <= threshold)); if (digitalRead(pin)) return 1; else return 0; } else return 0;} // Get new status, if anyint getStat(){ if (readPinSwitch(clockSet,100)) if (stat == stSetSecond) return stClockRunning; else return stat+1; else return stat; } // set Arduino and RTC time
void setRTCTime(int hour, int minute, int second, int day, int month, int year){// set Arduino time
setTime(hour,minute,second,day,month,year); time_t t = now(); // set RTC time RTC.set(t);} void setup(){ pinMode(clockUp,INPUT); pinMode(clockDown,INPUT); pinMode(clockSet,INPUT);
// start serial port Serial.begin(9600); // Start up the library sensors.begin(); // esses sensores serao renomeados // set the resolution to 10 bit (good enough?) sensors.setResolution(insideThermometer, 10); sensors.setResolution(outsideThermometer, 10); sensors.setResolution(dogHouseThermometer, 10); Wire.begin();
//pinMode(22,OUTPUT);// define pino 22 como saida lcd.begin(16, 2); // Set the display to 16 columns and 2 rows setSyncProvider(RTC.get); // the function to get the time from the RTC if(timeStatus()!= timeSet) { lcd.setCursor(0,0); lcd.print("Erro RTC"); }}
float media_umidade(){ DHT.read11(dht1_dpin); //Lê as informações do sensor DHT1.read11(dht2_dpin); //Lê as informações do sensor DHT2.read11(dht3_dpin); //Lê as informações do sensor
mediaumidade =((DHT.humidity + DHT1.humidity + DHT2.humidity )/3); //mostra a media da temperatura n da umidade //delay(2000); return mediaumidade;}
float mediatemp(){ sensors.requestTemperatures(); media_temp = (sensors.getTempC(insideThermometer)+sensors.getTempC(outsideThermometer)+sensors.getTempC(dogHouseThermometer))/3; return media_temp;} int oldStat = stat;unsigned long t=millis(); void loop(){
int value = 0; printTime(); delay(80); stat=getStat(); if (stat != oldStat) { t=millis(); oldStat = stat; } else if ((stat != stClockRunning) && ((millis() - t) > 60000)) stat=stClockRunning; switch(stat) { case stClockRunning: break;
case stSetHour: value=hour(); while(readPin(clockUp,80)) { value++; if (value > 23) value=0; setRTCTime(value,minute(),second(),day(),month(),year()); printTime(); } while(readPin(clockDown,80)) { value--; if (value < 1) value=24; setRTCTime(value,minute(),second(),day(),month(),year()); printTime(); } break; case stSetMinute: value=minute(); while(readPin(clockUp,80)) { value++; if (value > 59) value=0; setRTCTime(hour(),value,second(),day(),month(),year()); printTime(); } while(readPin(clockDown,80)) { value--; if (value < 0) value=59; setRTCTime(hour(),value,second(),day(),month(),year()); printTime(); } break; case stSetSecond: value=minute(); while(readPin(clockUp,80)) { value++; if (value > 59) value=0; setRTCTime(hour(),minute(),value,day(),month(),year()); printTime(); } while(readPin(clockDown,80)) { value--; if (value < 0) value=59; setRTCTime(hour(),minute(),value,day(),month(),year()); printTime(); } } }
…
controlo por potenciômetro e quando chego no angulo q eu quero aperto um botão na placa shield e ele grava na eprom esse valor e vou fazendo ate pegar o objeto e levar para outro lugar, quando termino aperto outro botão que repeti os movimentos que gravei e tá funcionando só que ele repeti 4x de boa depois ele perde um movimento e começa a fazer movimentos que não havia gravado, gostaria de saber pq acontece depois da quarta repetição! alguem pode me ajudar não manjo de programação e não sei se o código esta correto,!
Placa Shield
Programação do Braço Robótico
#include <Servo.h> #include <EEPROM.h> // Biblioteca
Servo Garra; Servo Ggarra; Servo Lgarra; Servo Cotovelo; Servo Ombro; Servo Base; int buzzer = 7; int state = LOW; int state1 = LOW; int button = 3; int button1 = 2; int potgarra = 0; //Canal Analógico A0 int potggarra = 1; //Canal Analógico A1 int potlgarra = 2; //Canal Analógico A2 int potombro = 3; //Canal Analógico A3 int potcot = 4; //Canal Analógico A4 int potbase = 5; //Canal Analógico A5 int valbase; // Constante p/ valor do ângulo servomotor Base int valombro; // Constante p/ valor do ângulo servomotor Ombro int valcot; // Constante p/ valor do ângulo servomotor Cotovelo int valgarra; // Constante p/ valor do ângulo servomotor Garra int valggarra; // Constante p/ valor do ângulo servomotor Giro da Garra int vallgarra; // Constante p/ valor do ângulo servomotor Levantar Garra int addr = 0; // Endereço de escrita na memória int cont; int address = 0; // endereço de leitura na memória byte value; // valor lido da EEPROM
void setup() { pinMode(button, INPUT); pinMode(button1, INPUT); pinMode(buzzer, OUTPUT); Garra.attach(13); Ggarra.attach(12); Lgarra.attach(11); Ombro.attach(10); Cotovelo.attach(9); Base.attach(8); Serial.begin(9600); } void loop(){ state=digitalRead(button); // Se o botão for pressionado grava a posição dos servos if(state==HIGH){ digitalWrite(buzzer, HIGH); //Liga sinal de aviso do buzzer delay(100); digitalWrite(buzzer, LOW); //desliga sinal de aviso do buzzer delay(100); valbase= analogRead(potbase); // Lê e o valor do potenciometro valbase= map(valbase, 0, 1023, 0, 179); // Converte o valor lido p/ respetiva referência entre (0° a 180°) EEPROM.write(addr, valbase); // Grava o valor lido na EEPROM Serial.print(addr); //Printa o endereço e os respectivos ângulos para cada servomotor Serial.println(" - Endereço"); Serial.println("Base"); Serial.println(valbase); addr = addr + 1; //Incremento p/ o proximo endereço delay(100);
valombro= analogRead(potombro); // valombro= map(valombro, 0, 1023, 53, 90); EEPROM.write(addr, valombro); Serial.print(addr); Serial.println(" - Endereço"); Serial.println("Ombro"); Serial.println(valombro); addr = addr + 1; delay(100);
valcot = analogRead(potcot); valcot = map(valcot, 0, 1023, 48, 158); EEPROM.write(addr, valcot); Serial.print(addr); Serial.println(" - Endereço"); Serial.println("Cotovelo"); Serial.println(valcot); addr = addr + 1; delay(100);
valgarra= analogRead(potgarra); valgarra= map(valgarra, 0, 1023, 34, 110); EEPROM.write(addr, valgarra); Serial.print(addr); Serial.println(" - Endereço"); Serial.println("Garra"); Serial.println(valgarra); addr = addr + 1; delay(100); valggarra= analogRead(potggarra); // valggarra= map(valgarra, 0, 1023, 0, 179); EEPROM.write(addr, valggarra); Serial.print(addr); Serial.println(" - Endereço"); Serial.println("Ggarra"); Serial.println(valggarra); addr = addr + 1; delay(100);
vallgarra= analogRead(potlgarra); // vallgarra= map(valgarra, 0, 1023, 5, 90); EEPROM.write(addr, vallgarra); Serial.print(addr); Serial.println(" - Endereço"); Serial.println("Lgarra"); Serial.println(vallgarra); addr = addr + 1; delay(100);
if (addr == 1024){ // Aviso para limite de posições salvas na EEPROM delay(10); digitalWrite(buzzer, HIGH); delay(10); digitalWrite(buzzer, LOW); delay(10); digitalWrite(buzzer, HIGH); delay(10); digitalWrite(buzzer, LOW); delay(10); } } else { //leitura do analogico valbase= analogRead(potbase); //Lê o valor do potenciometro de ( 0 - 1023) valbase= map(valbase, 0, 1023, 0, 179); //converte o valor lido de ( 0 - 1023) p/ (0 °– 180°) Base.write(valbase);
valombro = analogRead(potombro); valombro = map(valombro, 0, 1023, 53, 90); Ombro.write(valombro);
valcot = analogRead(potcot); valcot = map(valcot, 0, 1023, 48, 158); Cotovelo.write(valcot);
valgarra = analogRead(potgarra); valgarra = map(valgarra, 0, 1023, 34, 110); Garra.write(valggarra);
valggarra = analogRead(potggarra); valggarra = map(valggarra, 0, 1023, 0, 179); Ggarra.write(valggarra);
vallgarra = analogRead(potlgarra); vallgarra = map(vallgarra, 0, 1023, 5, 90); Lgarra.write(vallgarra);
} state1=digitalRead(button1); // Botão p/ acionamento das movimentações gravadas if(state1==HIGH){ digitalWrite(buzzer, HIGH); delay(100); digitalWrite(buzzer, LOW); delay(100); digitalWrite(buzzer, HIGH); delay(100); digitalWrite(buzzer, LOW); delay(100); Play(); //Chamada da função p/ movimentar } } void movServo(Servo &s, int ANGfinal, int veloc){ int ANGinicial = s.read(); // lê a posição atual do servo e o coloca como o angulo inicial de movimento if(ANGinicial > ANGfinal){ for(int i= ANGinicial; i > ANGfinal; i--){ //decremanta 1º grau s.write(i); // 'escreve' o valor 'i' no servo selecionado delay(veloc); // tempo de espera. } } else{ for(int i= ANGinicial; i <= ANGfinal; i++){ //incremanta 1º grau s.write(i); // 'escreve' o valor 'i' no servo selecionado delay(veloc); // tempo de espera. } } } void Play(){ // Função de movimento automático dos servos delay(1000); state1=digitalRead(button1); while(state1==LOW){ state1=digitalRead(button1); if(state1==HIGH){ zerar(); delay(100); } int l; LDR=0; //Zera a variável LDR for(l=0;l<10;l++){ //Faz 10 vezes a leitura do sensor cont=analogRead(sensor); //Lê o valor do sensor e guarda na variável LDR LDR = LDR+cont; //Armazenamento na varíavel LDR o valor lido + o valor anterior delay(10); //Delay se 10 milissegundos } LDR=LDR/10; //Divide o valor armazenado por 10 Serial.println(LDR); //Imprime o valor do LDR
if(LDR > 80){ // Se o valor do LDR for maior ou igual a 400 movServo(Base, valbase, 15); movServo(Ombro, valombro, 15); movServo(Cotovelo, valcot, 15); movServo(Garra, valgarra, 15); Serial.println("Home Position"); delay(100); } if(LDR < 400){ int j; address=0; addr=addr-1; Serial.println("addr"); Serial.println(addr); for(j=0; j<addr; j+=4){ value = EEPROM.read(address); // Leitura da EEPROM movServo(Base, value, 15); delay(100); Serial.print(address); Serial.println(" - Posicao Base"); Serial.print(value, DEC); Serial.println(); address = address + 1; delay(100); value = EEPROM.read(address); movServo(Ombro, value, 15); delay(100); Serial.print(address); Serial.println(" - Posicao Ombro"); Serial.print(value, DEC); Serial.println(); address = address + 1; delay(100); value = EEPROM.read(address); movServo(Cotovelo, value, 15); delay(100); Serial.print(address); Serial.println(" - Posicao Cotovelo"); Serial.print(value, DEC); Serial.println(); address = address + 1; delay(100); value = EEPROM.read(address); movServo(Garra, value, 15); delay(100); Serial.print(address); Serial.println(" - Posicao Garra"); Serial.print(value, DEC); Serial.println(); delay(100); address = address + 1; value = EEPROM.read(address); movServo(Ggarra, value, 15); delay(100); Serial.print(address); Serial.println(" - Posicao Giro da Garra"); Serial.print(value, DEC); Serial.println(); delay(100); address = address + 1; value = EEPROM.read(address); movServo(Lgarra, value, 15); delay(100); Serial.print(address); Serial.println(" - Posicao Levanta Garra"); Serial.print(value, DEC); Serial.println(); delay(100); address = address + 1; } } } } void zerar(){ // Zera o endereço da EEPROM p/ realizar novas gravações digitalWrite(buzzer, HIGH); // Aviso p/ realizar novas gravações delay(100); digitalWrite(buzzer, LOW); delay(100); digitalWrite(buzzer, HIGH); delay(100); digitalWrite(buzzer, LOW); delay(100); addr=0; Serial.print("Modo Gravar");…
iona, este é o codigo:
/* Twitter Client Esse sketch conecta ao Twitter usando um Ethernet shield. Ele vasculha o XML retornado, e procura por <text>esse é um tweet</text> Circuito: * Ethernet shield ligado nos pinos 10, 11, 12, 13 Esse codigo é de dominio publico. */// Incliur as bibliotecas#include <SPI.h>#include <Ethernet.h>#include <Twitter.h>// Declarar as variáveisint ArCasal = 7;int ArLuiza = 6;int RedeEletrica = 5;int LuzExterna = 4;int TemperaturaCasal = A0;int TemperaturaLuiza = A1;int SensorExterno = A2;int SensorSala = A3;int SensorQuarto = A4;// leitura de temperaturasint analogPin = 0; // lm35 está ligado ao a entrada analogica 0int valAnalog ; // variavel para armazenar o valor analogico lidofloat temperatura ;int tmp;float tempControle = 26.0; // temperatura ideialfloat ttp = 0.5; // intervalo entre on off// entre com MAC e IP para seu controlador.// O IP vai depender da sua rede:byte mac[] = {0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x01};IPAddress ip(192,168,2,20);// Your Token to Tweet (get it from http://arduino-tweet.appspot.com/)Twitter twitter("MEU_TOKEN");// Message to postchar msg[] = "Ar Condicionado Casal DESLIGADO";char msg1[] = "Ar Condicionado Casal LIGADO";char msg2[] = "Ar Condicionado Luiza LIGADO";char msg3[] = "Ar Condicionado Luiza DESLIGADO";char msg4[] = "Energia Elétrica LIGADA";char msg5[] = "Energia Elétrica DESLIGADA";char msg6[] = "Iluminação Externa LIGADA";char msg7[] = "Iluminação Externa DESLIGADA";// inicia a biblioteca:EthernetClient client;const unsigned long requestInterval = 20000; // delay entre pedidoschar serverName[] = "api.twitter.com"; // pagina do twitter URLboolean requested; // se vc fez um pedido des de quando conectouunsigned long lastAttemptTime = 0; // ultima vez que vc estava conectado em milesegundosString currentLine = ""; // string para guardar texto de servidorString tweet = ""; // string para guardar o tweetboolean readingTweet = false; // se vc está atualmente lendo o tweetvoid setup() { pinMode (ArCasal, OUTPUT); pinMode (RedeEletrica, OUTPUT); pinMode (ArLuiza, OUTPUT); pinMode (LuzExterna, OUTPUT); pinMode (TemperaturaLuiza, INPUT); pinMode (TemperaturaCasal, INPUT); pinMode (SensorSala, INPUT_PULLUP); pinMode (SensorExterno, INPUT_PULLUP); pinMode (SensorQuarto, INPUT_PULLUP); // reserva espaço para as strings: currentLine.reserve(256); tweet.reserve(150); // abre comunicação serial e espera a porta abrir: Serial.begin(9600); analogReference(INTERNAL); // 1,1vots // tenta conexão DHCP: Serial.println("Tentando pegar um IP usando DHCP:"); if (!Ethernet.begin(mac)) { // se o DHCP falhar, começa tentar manualmente: Serial.println("não foi possivel pegar um IP usando DHCP, tentando manualmente"); Ethernet.begin(mac, ip); } Serial.print("Meu IP:"); Serial.println(Ethernet.localIP()); // Conecta no Twitter: connectToServer();}void loop(){ // Leitura de temperatura tmp = 0;for(int x = 0; x <100; x++){ // o loop faz 100 leituras para diminuir os errosvalAnalog = analogRead(analogPin); // Le o pino de entrada analogica 5tmp = tmp + valAnalog;}temperatura= (( 1.1 * tmp * 100.00) / 1024.00) / 100 ; // calcula a temperaturaSerial.println(temperatura,1); // Envia os dados pela porta serial // Converter int para char int graus = digitalRead(A0); String temperatura = "Temperatura quarto: "; temperatura += graus; char temperaturaquarto[50]; temperatura.toCharArray(temperaturaquarto, 50); //Escrever post Serial.println("connecting ..."); int sensorsala = digitalRead(SensorSala); if (sensorsala == HIGH){ if (twitter.post(temperaturaquarto)) { // Specify &Serial to output received response to Serial. // If no output is required, you can just omit the argument, e.g. // int status = twitter.wait(); int status = twitter.wait(&Serial); if (status == 200) { Serial.println("OK."); } else { Serial.print("failed : code "); Serial.println(status); } } else { Serial.println("connection failed.");}} //Leitor de post if (client.connected()) { if (client.available()) { // ler os bytes de entrada: char inChar = client.read(); // adiciona os bytes de entrada ao final da linha: currentLine += inChar; // se vc receber "newline" nova linha, limpa a linha: if (inChar == '\n') { currentLine = ""; } // se a linha atual terminar com <text>, vai ser seguida do tweet: if ( currentLine.endsWith("<text>")) { // o tweet esta começando. Limpa a string tweet: readingTweet = true; tweet = ""; } // se vc esta atualmente lendo os bytes do tweet, adicona eles a String do tweet, if (readingTweet) { if (inChar != '<') { tweet += inChar; } else { // se vc receber um caracter "<", chegou ao final do tweet: readingTweet = false; Serial.println(tweet); if(tweet==">liga") { digitalWrite(ArCasal, HIGH); Serial.println("Computador .215 LIGADO"); } if(tweet==">desliga") { digitalWrite(ArCasal, LOW); Serial.println("Computador .215 DESLIGADO"); } if(tweet==">status") { Serial.print("Ar Condicionado está "); int estado = digitalRead(ArCasal); if (estado==1) { Serial.print("Ligado "); } if (estado==0) { Serial.print("Desligado "); } Serial.println(estado); if (twitter.post(msg)) { // Specify &Serial to output received response to Serial. // If no output is required, you can just omit the argument, e.g. // int status = twitter.wait(); int status = twitter.wait(&Serial); if (status == 200) { Serial.println("OK."); } } // fecha conexão com servidor: client.stop(); }}}} else if (millis() - lastAttemptTime > requestInterval) { // se vc não esta conectado, e passou 2 minutos des da sua ultima conexão // então tenta reconectar: connectToServer(); }}}void connectToServer() { // tenta conectar e espera em milesegundos: Serial.println("conectando no servidor..."); if (client.connect(serverName, 80)) { Serial.println("fazendo pedido de HTTP..."); // faz pedido HTTP GET para o twitter: client.println("GET /1/statuses/user_timeline.xml?screen_name=MEU_TWITTER&count=1 HTTP/1.1"); client.println("HOST: api.twitter.com"); client.println(); } // observa o tempo dessa tentativa de conexão: lastAttemptTime = millis();}…
abaixo.
Agora meu problema é um menu que seja eficiente e eu consiga agregar as funções que quero.
Montei o código abaixo que funciona mas encontrei o seguinte problema. O horário mostrado na primeira ela fica congelado no momento que dispara o timer até o fim da programação.
Não sei se tenho que mudar o código de lugar.
Gostaria de criticas e aprimoramentos para colocar para funcionar. Quem quiser discutir estou aberto. O codigo foi feito aproveitando ideias da internet e por isso pode ter alguma inconsistencia. Mas agente aprende sempre.
Este sistema já está em teste de desempenho e espero que tenha ele pronto até o fim da semana.
Desde já agradeço a ajuda.
Quem quiser ver a parte física montada olha o video a seguir:
http://www.youtube.com/watch?v=iWk_hh_ZA60
int t1[7]= { //Timer do motor de 3cv 0,0,0,0,0,0,0};
int dd=1000; // used for delay in show timer data
#include <LiquidCrystal.h> #include <Wire.h>#include <EEPROM.h>#include "RTClib.h"
RTC_DS1307 RTC;
// Definição dos pinos dos botões
#define bMenu A2 // Os pinos analógicos podem ser#define bChange A3 // usados como digitais, bastando#define bUp A0 // referenciá-los por A0, A1..#define bDown A1#define benter 8
#define bMenu0 90 // Valor de referência que a #define bChange0 91 // função CheckButton() passa#define bUp0 92 // indicando que um botão foi#define bDown0 93 // solto#define benter0 94
boolean aMenu, aChange, aUp, aDown, aenter; // Grava o ultimo valor lidos nos botões.// Utilizado pela função Checkbutton p/ identificar quando há uma alteração no estado do pino dos botões
int horini=EEPROM.read(0); // variavel a ser alterada pelo menuint minini=EEPROM.read(1);int horfim=EEPROM.read(2);int minfim=EEPROM.read(3);
char state=1; // variável que guarda posição atual do menuLiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Declaração do objeto tipo lcd
String ArrumaZero(int i) { String ret; if (i < 10) ret += "0"; ret += i; return ret; }
//============================================== SETUPvoid setup(){ Wire.begin(); lcd.begin(16, 2); // Iniciando a biblioteca do LCD RTC.begin(); pinMode(bMenu, INPUT); // Botões pinMode(bChange,INPUT); pinMode(bUp, INPUT); pinMode(bDown, INPUT); pinMode(benter, INPUT); pinMode(6, OUTPUT); // USADO PARA VALVULA 2 pinMode(7, OUTPUT); // USADO PARA VALVULA 1 pinMode(9, OUTPUT); // USADO PARA CONTROLAR A BOMBA
digitalWrite(bMenu, HIGH); // Aciona o pull-up interno digitalWrite(bChange,HIGH); // dos botões digitalWrite(bUp, HIGH); digitalWrite(bDown, HIGH); digitalWrite(benter, HIGH); if (!RTC.isrunning()) { RTC.adjust(DateTime(__DATE__, __TIME__)); } t1[0]= EEPROM.read(0);t1[1]= EEPROM.read(1);t1[2]= EEPROM.read(2);t1[3]= EEPROM.read(3);t1[4]= 8;t1[5]= 1;}//==============================================//============================================== LOOP
void loop(){ switch (state) { // Define checa qual tela atual case 1: // executado quando na TELA 1 switch (CheckButton()) { case bUp: lcd.clear(); Set_state(7); // antes de mudar de tela, é necessário limpar o break; // display com a função lcd.clear() case bDown: lcd.clear(); Set_state(2); break; default: // Caso nenhum botão tenha sido apertado, ela executa a set_state Set_state(1); // mesmo assim para atualizar o display. } break; case 2: // executado quando na TELA 2 switch (CheckButton()) { case bMenu: lcd.clear(); horini--; break; case bChange: lcd.clear(); horini++; break; case bUp: lcd.clear(); Set_state(1); break; case bDown: lcd.clear(); Set_state(3); break; case benter: EEPROM.write(0, horini); default: Set_state(2); } break; case 3: // executado quando na TELA 3 switch (CheckButton()) { case bMenu: lcd.clear(); minini--; break; case bChange: lcd.clear(); minini++; break; case bUp: lcd.clear(); Set_state(2); break; case bDown: lcd.clear(); Set_state(4); break; case benter: EEPROM.write(1, minini); default: Set_state(3); } break; case 4: // executado quando na TELA 4 switch (CheckButton()) { case bMenu: lcd.clear(); horfim--; break; case bChange: lcd.clear(); horfim++; break; case bUp: lcd.clear(); Set_state(3); break; case bDown: lcd.clear(); Set_state(5); break; case benter: EEPROM.write(2, horfim); default: Set_state(4); } break; case 5: // executado quando na TELA 5 switch (CheckButton()) { case bMenu: lcd.clear(); minfim--; break; case bChange: lcd.clear(); minfim++; break; case bUp: lcd.clear(); Set_state(4); break; case bDown: lcd.clear(); Set_state(6); break; case benter: EEPROM.write(3, minfim); default: Set_state(5); } break; case 6: // executado quando na TELA 6 switch (CheckButton()) { case bUp: lcd.clear(); Set_state(5); break; case bDown: lcd.clear(); Set_state(7); break; default: Set_state(6); } break; case 7: // executado quando na TELA 7 switch (CheckButton()) { case bUp: lcd.clear(); Set_state(6); break; case bDown: lcd.clear(); Set_state(1); break; default: Set_state(7); } break; default: ; }
checktimer1(); delay(200); // to stop screen flicker}
//============================================== FIM da função LOOP
void checktimer1()// checa o horário para saber se irá ligar o motor{ DateTime agora = RTC.now(); int hora = agora.hour(); int minuto = agora.minute(); int segundo = agora.second(); if (t1[4]==8); { if (hora==t1[0] && minuto==t1[1]) { digitalWrite(7, HIGH); delay(5000); digitalWrite(9,HIGH); delay(3600000); digitalWrite(6,HIGH); delay(5000); digitalWrite(7,LOW); delay(3600000); digitalWrite(9,LOW); digitalWrite(6,LOW); t1[6]=1; } if (hora==t1[2] && minuto==t1[3]) { digitalWrite(9, LOW); digitalWrite(6,LOW); digitalWrite(7,LOW); t1[6]=0; } }}
//============================================== CheckButtonchar CheckButton() { if (aMenu!=digitalRead(bMenu)) { aMenu=!aMenu; if (aMenu) return bMenu0; else return bMenu; } else if (aChange!=digitalRead(bChange)) { aChange=!aChange; if (aChange) return bChange0; else return bChange; } else if (aUp!=digitalRead(bUp)) { aUp=!aUp; if (aUp) return bUp0; else return bUp; } else if (aDown!=digitalRead(bDown)) { aDown=!aDown; if (aDown) return bDown0; else return bDown; } else if (aenter!=digitalRead(benter)) { aenter=!aenter; if (aenter) return benter0; else return benter; } else return 0;}
//========================================================//============================================== Set_statevoid Set_state(char index) { state = index; // Atualiza a variável state para a nova tela DateTime agora = RTC.now(); String relogio_data = "DT: "; String relogio_hora = "HR: "; int dia = agora.day(); int mes = agora.month(); int ano = agora.year();
relogio_data += ArrumaZero(dia); relogio_data += "/"; relogio_data += ArrumaZero(mes); relogio_data += "/"; relogio_data += ano; int hora = agora.hour(); int minuto = agora.minute(); int segundo = agora.second(); relogio_hora += ArrumaZero(hora); relogio_hora += ":"; relogio_hora += ArrumaZero(minuto); relogio_hora += ":"; relogio_hora += ArrumaZero(segundo);
switch (state) { // verifica qual a tela atual e exibe o conteúdo correspondente case 1: //==================== state 1 lcd.setCursor(0, 0); lcd.print(relogio_data); lcd.setCursor(0, 1); lcd.print(relogio_hora); break; case 2: //==================== state 2 lcd.setCursor(0,0); lcd.print("Hor. Inicio"); lcd.setCursor(0,1); lcd.print(horini); break; case 3: //==================== state 3 lcd.setCursor(0,0); lcd.print("Min. Inicio"); lcd.setCursor(0,1); lcd.print(minini); break; case 4: //==================== state 4 lcd.setCursor(0,0); lcd.print("Hor. Fim"); lcd.setCursor(0,1); lcd.print(horfim); break; case 5: //==================== state 5 lcd.setCursor(0,0); lcd.print("Min. Fim"); lcd.setCursor(0,1); lcd.print(minfim); break; case 6: //==================== state 6 lcd.setCursor(0,0); lcd.print("Alarme:"); break; case 7: //==================== state 7 lcd.setCursor(0,0); lcd.print("Segundos:"); lcd.setCursor(0,1); lcd.print( millis()/1000 , DEC); // mostra os segundos na tela lcd.print(" s"); lcd.print(" "); lcd.print(millis()/86400000, DEC); // mostra os dias na tela lcd.print(" dias"); break; default: ; } }…
o codigo aqui, se alguem puder me ajudar agradeço muito. Obrigado.
#include <SPI.h>#include <String.h>#include <Ethernet.h>//-------------------------------------------------------------------byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };//MAC padrão;IPAddress ip(192, 168, 1, 50);//Define o endereco IPv4(trocar final);IPAddress gateway(192, 168, 1, 1); //Define o gatewayIPAddress subnet(255, 255, 255, 0); //Define a máscara de redeEthernetServer server(80); // Porta de serviço//-------------------------------------------------------------------int AA0 = A0;//Arduino analogica A0;int AA1 = A1;//Arduino analogica A1;int AA2 = A2;//Arduino analogica A2;int AA3 = A3;//Arduino analogica A3;int AA4 = A4;//Arduino analogica A4;//-------------------------------------------------------------------int D2 = 2;//Arduino digital D2;int D3 = 3;//Arduino digital D3;int D4 = 4;//Arduino digital D4;int D5 = 5;//Arduino digital D5;int D6 = 6;//Arduino digital D6;//-------------------------------------------------------------------String readString = String(30); // string para buscar dados de endereçoboolean statusA0 = false; // Variável para o status do led boolean statusA1 = false; // Variável para o status do led boolean statusA2 = false; // Variável para o status do led boolean statusA3 = false; // Variável para o status do led boolean statusA4 = false; // Variável para o status do led boolean statusD2 = false; // Variável para o status do led boolean statusD3 = false; // Variável para o status do led boolean statusD4 = false; // Variável para o status do led boolean statusD5 = false; // Variável para o status do led boolean statusD6 = false; // Variável para o status do led //--------------------------------------------------------------------void setup(){ // Inicia o Ethernet //Ethernet.begin(mac, ip); Ethernet.begin(mac, ip, gateway, subnet); server.begin();//-----------------------Define pino como saída----------------------- pinMode(AA0, OUTPUT); pinMode(AA1, OUTPUT); pinMode(AA2, OUTPUT); pinMode(AA3, OUTPUT); pinMode(AA4, OUTPUT); pinMode(D2, OUTPUT); pinMode(D3, OUTPUT); pinMode(D4, OUTPUT); pinMode(D5, OUTPUT); pinMode(D6, OUTPUT);//--------------------------------------------------------------------- // Inicia a comunicação Serial Serial.begin(9600); }void loop(){ // Criar uma conexão de cliente EthernetClient client = server.available(); if (client) { while (client.connected()) { if (client.available()) { char c = client.read(); // ler caractere por caractere vindo do HTTP if (readString.length() < 30) { // armazena os caracteres para string readString += (c); } //se o pedido HTTP terminou if (c == '\n') {//------------------------------------------------------------------ if(readString.indexOf("a0high")>=0)//Recebido do Android; { // O Led vai ser ligado digitalWrite(AA0, HIGH);//Arduino porta digital D2=5V; statusA0 = true; } // Se a string possui o texto L=Desligar if(readString.indexOf("a0low")>=0)//Recebido do Android; { // O Led vai ser desligado digitalWrite(AA0, LOW);//Arduino porta digital D2=0V; statusA0 = false; }//------------------------------------------------------------------ if(readString.indexOf("a1high")>=0)//Recebido do Android; { // O Led vai ser ligado digitalWrite(AA1, HIGH);//Arduino porta digital D2=5V; statusA1 = true; } // Se a string possui o texto L=Desligar if(readString.indexOf("a1low")>=0)//Recebido do Android; { // O Led vai ser desligado digitalWrite(AA1, LOW);//Arduino porta digital D2=0V; statusA1 = false; }//------------------------------------------------------------------ if(readString.indexOf("a2high")>=0)//Recebido do Android; { // O Led vai ser ligado digitalWrite(AA2, HIGH);//Arduino porta digital D2=5V; statusA2 = true; } // Se a string possui o texto L=Desligar if(readString.indexOf("a2low")>=0)//Recebido do Android; { // O Led vai ser desligado digitalWrite(AA2, LOW);//Arduino porta digital D2=0V; statusA2 = false; }//------------------------------------------------------------------ if(readString.indexOf("a3high")>=0)//Recebido do Android; { // O Led vai ser ligado digitalWrite(AA3, HIGH);//Arduino porta digital D2=5V; statusA3 = true; } // Se a string possui o texto L=Desligar if(readString.indexOf("a3low")>=0)//Recebido do Android; { // O Led vai ser desligado digitalWrite(AA3, LOW);//Arduino porta digital D2=0V; statusA3 = false; }//------------------------------------------------------------------ if(readString.indexOf("a4high")>=0)//Recebido do Android; { // O Led vai ser ligado digitalWrite(AA4, HIGH);//Arduino porta digital D2=5V; statusA4 = true; } // Se a string possui o texto L=Desligar if(readString.indexOf("a4low")>=0)//Recebido do Android; { // O Led vai ser desligado digitalWrite(AA4, LOW);//Arduino porta digital D2=0V; statusA4 = false; }//------------------------------------------------------------------ if(readString.indexOf("d2high")>=0)//Recebido do Android; { // O Led vai ser ligado digitalWrite(D2, HIGH);//Arduino porta digital D2=5V; statusD2 = true; } // Se a string possui o texto L=Desligar if(readString.indexOf("d2low")>=0)//Recebido do Android; { // O Led vai ser desligado digitalWrite(D2, LOW);//Arduino porta digital D2=0V; statusD2 = false; }//------------------------------------------------------------------ if(readString.indexOf("d3high")>=0)//Recebido do Android; { // O Led vai ser ligado digitalWrite(D3, HIGH);//Arduino porta digital D2=5V; statusD3 = true; } // Se a string possui o texto L=Desligar if(readString.indexOf("d3low")>=0)//Recebido do Android; { // O Led vai ser desligado digitalWrite(D3, LOW);//Arduino porta digital D2=0V; statusD3 = false; }//------------------------------------------------------------------ if(readString.indexOf("d4high")>=0)//Recebido do Android; { // O Led vai ser ligado digitalWrite(D4, HIGH);//Arduino porta digital D2=5V; statusD4 = true; } // Se a string possui o texto L=Desligar if(readString.indexOf("d4low")>=0)//Recebido do Android; { // O Led vai ser desligado digitalWrite(D4, LOW);//Arduino porta digital D2=0V; statusD4 = false; }//------------------------------------------------------------------ if(readString.indexOf("d5high")>=0)//Recebido do Android; { // O Led vai ser ligado digitalWrite(D5, HIGH);//Arduino porta digital D2=5V; statusD5 = true; } // Se a string possui o texto L=Desligar if(readString.indexOf("d5low")>=0)//Recebido do Android; { // O Led vai ser desligado digitalWrite(D5, LOW);//Arduino porta digital D2=0V; statusD5 = false; }//------------------------------------------------------------------ if(readString.indexOf("d6high")>=0)//Recebido do Android; { // O Led vai ser ligado digitalWrite(D6, HIGH);//Arduino porta digital D2=5V; statusD6 = true; } // Se a string possui o texto L=Desligar if(readString.indexOf("d6low")>=0)//Recebido do Android; { // O Led vai ser desligado digitalWrite(D6, LOW);//Arduino porta digital D2=0V; statusD6 = false; } //------------------------------------------------------------------ // dados HTML de saída começando com cabeçalho padrão client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println(); client.print("<font size='20'>");//------------------------------------------------------------------ if (statusA0) { client.print("azeroon");//Ethernet envia para Android; //String apenas letras; } else { client.print("azerooff");//Ethernet envia string para Android; //String apenas letras; }//------------------------------------------------------------------ if (statusA1) { client.print("aoneon");//Ethernet envia para Android; //String apenas letras; } else { client.print("aoneoff");//Ethernet envia string para Android; //String apenas letras; }//------------------------------------------------------------------ if (statusA2) { client.print("atwoon");//Ethernet envia para Android; //String apenas letras; } else { client.print("atwooff");//Ethernet envia string para Android; //String apenas letras; }//------------------------------------------------------------------ if (statusA3) { client.print("athreeon");//Ethernet envia para Android; //String apenas letras; } else { client.print("athreeoff");//Ethernet envia string para Android; //String apenas letras; }//------------------------------------------------------------------ if (statusA4) { client.print("afouron");//Ethernet envia para Android; //String apenas letras; } else { client.print("afouroff");//Ethernet envia string para Android; //String apenas letras; }//------------------------------------------------------------------ if (statusD2) { client.print("dtwoon");//Ethernet envia para Android; //String apenas letras; } else { client.print("dtwooff");//Ethernet envia string para Android; //String apenas letras; }//------------------------------------------------------------------ if (statusD3) { client.print("dthreeon");//Ethernet envia para Android; //String apenas letras; } else { client.print("dthreeoff");//Ethernet envia string para Android; //String apenas letras; }//------------------------------------------------------------------ if (statusD4) { client.print("dfouron");//Ethernet envia para Android; //String apenas letras; } else { client.print("dfouroff");//Ethernet envia string para Android; //String apenas letras; }//------------------------------------------------------------------ if (statusD5) { client.print("dfiveon");//Ethernet envia para Android; //String apenas letras; } else { client.print("dfiveoff");//Ethernet envia string para Android; //String apenas letras; }//------------------------------------------------------------------ if (statusD6) { client.print("dsixon");//Ethernet envia para Android; //String apenas letras; } else { client.print("dsixoff");//Ethernet envia string para Android; //String apenas letras; }//------------------------------------------------------------------ //limpa string para a próxima leitura readString=""; // parar cliente client.stop(); } } } }}//--------------------------------------------------------------------------------------------------------//…