Show Posts
Pages: [1] 2 3 ... 14
1  International / Portugues / Re: Ethenet com cartao SD on: September 18, 2014, 09:36:38 pm
É viável, estou trabalhando nisso porém, este assunto não está relacionado com este tópico.
2  International / Portugues / Re: Multi-tarefa no Arduino Mega on: September 17, 2014, 04:03:00 pm
Se quer usar o arduino no seu projeto ESQUEÇA a execução de tarefas simultâneas.

O que ocorre é  que o arduino e o controlador estão sempre trabalhando ao mesmo tempo porém, a informação recebida do browser fica na porta esperando que o arduino a receba. Se o arduino não responder em tempo hábil o browser vai mostrar uma mensagem de tempo limite excedido.

O código que utilizava com arquivos no SD era basicamente o que tenho agora, a diferença é que por aqui tinha uma função que abria o arquivo e enviava as páginas.

https://github.com/FernandoGarcia/Feduino_with_webcontrol_beta/blob/master/Feduino_with_webcontrol_beta/Webserver.ino#L32

Aqui está a referência que usei para o meu programa:

http://interestingelectronics.net/2013/07/15/the-arduino-web-server/

Se você QUER usar o raspberry talvez essa seja uma alternativa seguindo o que coloquei no post anterior.

http://www.instructables.com/id/Raspberry-Pi-Web-Server/all/?lang=pt


3  International / Portugues / Re: Multi-tarefa no Arduino Mega on: September 17, 2014, 12:48:55 pm
Olá!

Já pensou em usar um servidor PHP para armazenar as páginas?

Veja o código que uso no meu controlador.

https://github.com/FernandoGarcia/Feduino_with_webcontrol_beta/blob/master/Feduino_with_webcontrol_beta/Webserver.ino

A função que verifica se há cliente é a processRequest().

Mesmo tendo esta função no programa é possível executar outras tarefas cada uma no seu tempo.

Veja quantas funções eu tenho no loop.

https://github.com/FernandoGarcia/Feduino_with_webcontrol_beta/blob/master/Feduino_with_webcontrol_beta/Loop.ino#L21

No meu caso a comunicação segue esta ordem:

Browser > Servidor PHP > Arduino

Arduino > Servidor PHP > Browser.

O arduino nunca envia dados diretamente para o "browser".

A URL é algo deste tipo:

http://192.168.0.177:5000/?cmd=ZmVybmFuAZG9nYXJjaWFE6MTIzNDU2,0,K

Onde "ZmVybmFuAZG9nYXJjaWFE6MTIzNDU2" é a senha em base 64.

0 é a função que será executada.

K indica que o comando terminou.

No começo armazenava as páginas no cartão SD inclusive o CSS mas, demorava muito para carregá-las.

Veja algumas páginas.






Abraço.
4  International / Portugues / Re: Ethenet com cartao SD on: September 17, 2014, 12:26:44 pm
Aqui tem um webserver básico talvez ajude a entender o funcionamento.

http://startingelectronics.com/tutorials/arduino/ethernet-shield-web-server-tutorial/SD-card-web-server/

Salve este arquivo como index.htm no cartão sd.

Code:
<!DOCTYPE html>
<html>
    <head>
        <title>Arduino SD Card Web Page</title>
    </head>
    <body>
        <h1>Hello from the Arduino SD Card!</h1>
        <p>A web page from the Arduino SD card server.</p>
    </body>
</html>

Código para o arduino.

Code:
#include <SPI.h>
#include <Ethernet.h>
#include <SD.h>

// MAC address from Ethernet shield sticker under board
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(10, 0, 0, 20); // IP address, may need to change depending on network
EthernetServer server(80);  // create a server at port 80

File webFile;

void setup()
{
    Ethernet.begin(mac, ip);  // initialize Ethernet device
    server.begin();           // start to listen for clients
    Serial.begin(9600);       // for debugging
   
    // initialize SD card
    Serial.println("Initializing SD card...");
    if (!SD.begin(4)) {
        Serial.println("ERROR - SD card initialization failed!");
        return;    // init failed
    }
    Serial.println("SUCCESS - SD card initialized.");
    // check for index.htm file
    if (!SD.exists("index.htm")) {
        Serial.println("ERROR - Can't find index.htm file!");
        return;  // can't find index file
    }
    Serial.println("SUCCESS - Found index.htm file.");
}

void loop()
{
    EthernetClient client = server.available();  // try to get client

    if (client) {  // got client?
        boolean currentLineIsBlank = true;
        while (client.connected()) {
            if (client.available()) {   // client data available to read
                char c = client.read(); // read 1 byte (character) from client
                // last line of client request is blank and ends with \n
                // respond to client only after last line received
                if (c == '\n' && currentLineIsBlank) {
                    // send a standard http response header
                    client.println("HTTP/1.1 200 OK");
                    client.println("Content-Type: text/html");
                    client.println("Connection: close");
                    client.println();
                    // send web page
                    webFile = SD.open("index.htm");        // open web page file
                    if (webFile) {
                        while(webFile.available()) {
                            client.write(webFile.read()); // send web page to client
                        }
                        webFile.close();
                    }
                    break;
                }
                // every line of text received from the client ends with \r\n
                if (c == '\n') {
                    // last character on line of received text
                    // starting new line with next character read
                    currentLineIsBlank = true;
                }
                else if (c != '\r') {
                    // a text character was received from client
                    currentLineIsBlank = false;
                }
            } // end if (client.available())
        } // end while (client.connected())
        delay(1);      // give the web browser time to receive the data
        client.stop(); // close the connection
    } // end if (client)
}

Aqui tem um básico que controla um led (não testei este).

http://startingelectronics.com/tutorials/arduino/ethernet-shield-web-server-tutorial/web-server-LED-control/

https://www.youtube.com/watch?feature=player_embedded&v=RULB8FfNxKU
5  International / Portugues / Re: Ethenet com cartao SD on: September 11, 2014, 08:43:11 am
Olá!

Acho que está fazendo confusão.

Após carregar a página o programa fecha o arquivo que contém o HTML e fica pronto para fazer outras coisas.

Normalmente o tempo para ler o arquivo não é maior que 2 segundos.

Quando o arduino for controlar o IR a página HTML não será removido do monitor.

O tempo gasto para o arduino enviar um comando IR é menor que 1 segundo.

Abraço.
Fernando Garcia
 
6  International / Portugues / Re: como ligar um motor com um rele e desligar o motor atraves de um timer on: September 09, 2014, 12:56:32 pm
Não foi isso que foi dito.

Como o volume de gravações será muito grande o Atmega vai ser danificado rapidamente.

Eu vejo três soluções:

1ª conectar o arduino em uma bateria;
2ª Usar uma EEPROM externa e trocar quando for danificada;
3ª Gravar os dados em um cartão SD.
7  International / Portugues / Re: Ajuda em elaboração do código on: September 09, 2014, 11:52:15 am
Imagino a qualidade do profissional que vai sair (ou não) dessa escola.  smiley-zipper
8  International / Portugues / Re: como ligar um motor com um rele e desligar o motor atraves de um timer on: September 09, 2014, 11:49:17 am
Acho que você não entendeu o que o bubulindo quis dizer. rs!

Ele está se referindo à vida útil da EEPROM.

9  International / Portugues / Re: ajuda com programação datalogger on: September 09, 2014, 08:59:11 am
Olá!
Não há uma função específica para este caso.
Você terá que criá-la.
Este código pode servir de base.

Code:
#include <rotary.h>

Rotary r = Rotary(2, 3);

void setup() {
  Serial.begin(9600);
  PCICR |= (1 << PCIE2);
  PCMSK2 |= (1 << PCINT18) | (1 << PCINT19);
  sei();
}

void loop() {

}

ISR(PCINT2_vect) {
  unsigned char result = r.process();
  if (result) {
    Serial.println(result == DIR_CW ? "Right" : "Left");
  }
}


Você pode criar um "array" com os caracteres que serão usados e usar o movimento "left/right" para aumentar ou diminuir o índice do "array".
Depois quando o botão do encoder for pressionado você copia o caracter para a variável que guardará o nome do arquivo.

Abraço.
10  International / Portugues / Re: como ligar um motor com um rele e desligar o motor atraves de um timer on: September 08, 2014, 09:38:01 am
Olá!

Veja se isto ajuda.

Code:
const byte rele =  13; 

unsigned long millis_antes = 0;
const int intervalo = 30; // Em minutos

void setup()
{
  pinMode(rele, OUTPUT);
  Serial.begin(9600);
}

void loop()
{
  if((millis() - millis_antes) < (60000 * intervalo))
  {
    digitalWrite(rele, HIGH);
    Serial.println("HIGH");
  }
  else
  {
    digitalWrite(rele, LOW);
    Serial.println("LOW");
  }
}
11  International / Portugues / Re: Temporizador para RTC on: September 06, 2014, 09:02:04 pm
Fico feliz que tenha entendido.

Tenho duas sugestões para você.

1ª Como você está sempre postando o link do seu código, recomendo que coloque o código no Github pois, a vizualização é mais fácil.

2ª Procure identar o código corretamente pois, facilita a leitura.

Coisas deste tipo são ruins.

Code:
{Serial.print("Erro ao ler temperatura !");}

Assim ficaria melhor.
Code:
{
  Serial.print("Erro ao ler temperatura !");
}

Você pode usar o "auto format" da IDE após colocar as chaves na posição correta.
O atalho é ctrl+t
12  International / Portugues / Re: Temporizador para RTC on: September 06, 2014, 01:18:27 pm
Vamos lá!

Essa função atualiza as variáveis de tempo do RTC.

Code:
t = rtc.getTime();

No meu caso as variáveis que guardam as horas são:

Code:
t.hour;
t.min.

Essas variáveis guardam os horários em que quero ligar e desligar

Code:
byte on1_minuto = 0;
byte on1_hora = 0;
byte off1_minuto = 0;
byte off1_hora = 0;

No meu caso elas não estão como "const" pois, elas podem ser alteradas.

Essa função converte hora para minutos:
Code:
int NumMins(uint8_t ScheduleHour, uint8_t ScheduleMinute)
{
return (ScheduleHour*60) + ScheduleMinute;
}

Por exemplo, se eu chamar a função desta forma:

Code:
NumMins(12, 30); // Doze horas e trinta minutos

Ela retorna: (12 * 60) + 30 = 750 minutos

Aqui faço uma comparação para saber se o horário para desligar é menor que o de ligar pois, poderia ligar às 23:00 e desligar às 8:00.

Code:
(NumMins(off1_hora,off1_minuto) > NumMins(on1_hora,on1_minuto))

Acho que agora fica mais fácil de entender.
13  International / Portugues / Re: Temporizador para RTC on: September 06, 2014, 12:33:48 pm
Eu admiro você por estar tentando fazer o próprio código.

Não quero que use o meu código completo.

Só citei um trecho do código que atende à sua necessidade.

Inclusive se você reparar no código que postei aqui está diferente do que está no Github pois, retirei trechos que não interessam para você.

Se você quiser aprender eu posso explicar cada parte do código que coloquei aqui.
14  International / Portugues / Re: Temporizador para RTC on: September 06, 2014, 12:00:22 pm
Meu código não está em inglês.
15  International / Portugues / Re: Temporizador para RTC on: September 06, 2014, 07:54:07 am
Olá!

Eu uso este código:

Code:
t = rtc.getTime();

Code:
if(NumMins(off1_hora,off1_minuto) > NumMins(on1_hora,on1_minuto))
{
  if((NumMins(t.hour,t.min) >= NumMins(on1_hora,on1_minuto)) && (NumMins(t.hour,t.min) <= NumMins(off1_hora,off1_minuto)))
  {
    digitalWrite(temporizador1, HIGH);
  }
  if (NumMins(t.hour,t.min) > NumMins(off1_hora,off1_minuto))
  {
    digitalWrite(temporizador1, LOW);
  }
}
if(NumMins(off1_hora,off1_minuto) < NumMins(on1_hora,on1_minuto))
{
  if(NumMins(t.hour,t.min) >= NumMins(on1_hora,on1_minuto))
  {
    digitalWrite(temporizador1, HIGH);
  }
  if (NumMins(t.hour,t.min) < NumMins(off1_hora,off1_minuto))
  {
    digitalWrite(temporizador1, HIGH);
  }
  if ((NumMins(t.hour,t.min) >= NumMins(off1_hora,off1_minuto)) && (NumMins(t.hour,t.min) < NumMins(on1_hora,on1_minuto)))
  {
    digitalWrite(temporizador1, LOW);
  }
}

Code:
int NumMins(uint8_t ScheduleHour, uint8_t ScheduleMinute)
{
return (ScheduleHour*60) + ScheduleMinute;
}

Ele funciona como o Luis sugeriu. A referência é sempre o RTC.

Aqui tem o código completo.

Abraço.

Pages: [1] 2 3 ... 14