Olá!

Gostaria de saber como juntar os dois códigos abaixo. O primeiro deles é para automação e o outro é para atualizar IP no dyndns.

// Maurício Féo
// www.engenheirando.com

#include <SPI.h>
#include <Ethernet.h>

//Configurações do Ethernet Shield
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192,168,2, 12 }; // ip que o arduino assumirá
byte gateway[] = { 192,168,2, 1 }; // ip do roteador
byte subnet[] = { 255, 255, 255, 0 };

// String que representa o estado dos dispositivos
char Luz[7] = "0000L#";

EthernetServer server(1212); // Cria o servidor na porta 8081

// String onde é guardada as msgs recebidas
char msg[7] = "0000L#";

void setup() {
Ethernet.begin(mac, ip, gateway, subnet);
server.begin();
pinMode(A0,OUTPUT);
pinMode(A1,OUTPUT);
pinMode(A2,OUTPUT);
pinMode(A3,OUTPUT);
pinMode(A4,OUTPUT);
pinMode(A5,OUTPUT);
}

void loop() {
EthernetClient client = server.available();
// SE receber um caracter...
if (client) {
// guarda o caracter na string 'msg'
msg[1]=msg[2]; msg[2]=msg[3]; msg[3]=msg[4]; msg[4]=msg[5]; msg[5]=msg[6];
msg[6] = client.read();

if (msg[6]=='#') {
switch(msg[5]) {
case 'R':
// Se receber o comando 'R#' envia de volta o status dos
// dispositivos. (Que é a string 'Luz')
client.write(Luz);
break;
case 'P':
// Caso P#, aciona o pino do portão pequeno por 1s.
digitalWrite(A4,HIGH);
delay(1000);
digitalWrite(A4,LOW);
break;
case 'G':
// Caso G#, aciona o pino do portão pequeno por 1s.
digitalWrite(A5,HIGH);
delay(1000);
digitalWrite(A5,LOW);
break;
case 'L':
// Caso L#, ele copia os 4 bytes anteriores p/ a
// string 'Luz' e cada byte representa um
// dispositivo, onde '1'=ON e '0'=OFF
Luz[0]=msg[1];
Luz[1]=msg[2];
Luz[2]=msg[3];
Luz[3]=msg[4];
if (Luz[0]=='1') digitalWrite(A0,HIGH); else digitalWrite(A0,LOW);
if (Luz[1]=='1') digitalWrite(A1,HIGH); else digitalWrite(A1,LOW);
if (Luz[2]=='1') digitalWrite(A2,HIGH); else digitalWrite(A2,LOW);
if (Luz[3]=='1') digitalWrite(A3,HIGH); else digitalWrite(A3,LOW);
break;

}
}
}
}

Segundo código:

#include <SPI.h>

#include <Ethernet.h>
#include <EEPROM.h>
const char host[] = "servidor.dyndns.org";
const char usuarioClave[] = "dXN1YXJpb0BtYWlsLmNvbTptaXBhc3N3b3Jk";
byte mac[] = { 0xAA, 0xAB, 0xAC, 0xAD, 0xAA, 0xAB };
IPAddress ipLocal(192, 168, 1, 5);
char servidorIP[] = "checkip.dyndns.org";
char servidorActualizacion[] = "members.dyndns.org";
IPAddress ipActual;
IPAddress ipUltimaEnviada;
void setup() {
  Serial.begin(9600);
  while (!Serial); // Solo para Leonardo
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Error consiguiendo la IP por DHCP, intentando manualmente...");
    Ethernet.begin(mac, ipLocal);
  }
  delay(1000);
  for (byte n = 0; n <= 3; n++) ipUltimaEnviada[n] = EEPROM.read(n); // Cargamos de EEPROM la ultima IP que se envio.
  Serial.print("La IP almacenada en la EEPROM es: ");
  Serial.println(ipUltimaEnviada);
}
void loop() {
  ipActual = compruebaIP();
  if (ipActual != ipUltimaEnviada) {
    Serial.print("Actualizando la IP en ");
    Serial.print(servidorActualizacion);
    Serial.println("...");  
    if (actualizaIPDynDNS(ipActual) == true){
      for (byte n = 0; n <= 3; n++) EEPROM.write(n, ipActual[n]);
      ipUltimaEnviada = ipActual;
    }
  } else {
    Serial.println("No hacemos nada, la IP no cambiado desde la ultima vez. Esperando 10 minutos...");
  }
  delay (600000); // Y esperamos 10 minutos sentados para volver a comprobar la IP.
}
IPAddress compruebaIP() {
  EthernetClient cliente;
  String webIP;
  int desde, hasta;
  if (cliente.connect(servidorIP, 80)) {
    cliente.println("GET / HTTP/1.0");
    cliente.println();
    webIP = "";
  } else {
    Serial.print(":( Conexion fallida con ");
    Serial.println(servidorIP);
  }
  while (cliente.connected()) {
    while (cliente.available()) {
      webIP.concat((char)cliente.read());
    }
  }
  cliente.stop();
  desde = webIP.indexOf("Address: ") + 9;
  hasta = webIP.indexOf("</body>");
  return ipAIPAddress(webIP.substring(desde, hasta));
}
boolean actualizaIPDynDNS(IPAddress ip) {
  EthernetClient cliente;
  String webIP;
  if (cliente.connect(servidorActualizacion, 80)) {
    cliente.print("GET /nic/update?hostname=");
    cliente.print(host);
    cliente.print("&myip=");
    cliente.print(ip);
    cliente.println("&wildcard=NOCHG&mx=NOCHG&backmx=NOCHG HTTP/1.0");
    cliente.println("Host: members.dyndns.org");
    cliente.print("Authorization: Basic ");
    cliente.println(usuarioClave);
    cliente.println("User-Agent: josematm.com - Wirduino - 0.1");
    cliente.println();
  } else {
    Serial.print(":( Conexion fallida con ");
    Serial.println(servidorActualizacion);
    return false;
  }
  while (cliente.connected()) {
    while (cliente.available()) {
      webIP.concat((char)cliente.read());
    }
  }
  Serial.println(webIP);
  cliente.stop();
  if (webIP.lastIndexOf("badauth") != -1) {
    Serial.println("Error de de autentificacion. Comprueba usuario y clave");
    return false;
  } else {
    return true;  
  }
}
IPAddress ipAIPAddress(String ipEnCadena){
  IPAddress ipEnBytes;
  char digitoIP[4];
  byte cursorDigito = 0;
  byte cursorIP = 0;
  for (byte n = 0; n /span> ipEnCadena.length(); n++){
    if (ipEnCadena.charAt(n) != '.') {
      digitoIP[cursorDigito] = ipEnCadena.charAt(n);
      cursorDigito++;
    } else {
      digitoIP[cursorDigito +1] = '\n';
      ipEnBytes[cursorIP] = atoi(digitoIP);
      cursorDigito = 0;
      memset(digitoIP, 0, sizeof(digitoIP));
      cursorIP++;
    }
  }
  digitoIP[cursorDigito +1] = '\n';
  ipEnBytes[cursorIP] = atoi(digitoIP);
  return ipEnBytes;
}
Eu juntei os setup e loop mas não funciona o de automação.

Exibições: 4037

Responder esta

Respostas a este tópico

Tenho o mesmo problema, só que eu preciso juntar uns 4 códigos diferentes.

Usa #include com o nome do arquivo, na IDE do arduino eu sei que da

Por favor, dê um exemplo

#include <stdlib.h>//biblioteca de input e output

#include "parteII.cpp"//o segundo arquivo do progama

void main(){

}

eu acho que seria mais ou menos isso

Sei......não sei....

hehe...To um pouquinho enferrujado...

E ei então.... começo a estudar a programação, e depois largo por um tempo e vou fazer outra coisa, por exemplo, estudar algum programa de PCI, ou montar um circuito, ai quando volto a estudar programação, ja esqueci muita coisa.

saquinho

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço