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