Skocz do zawartości

Funkcja Ethernet.begin(mac, ip) zawiesza pin


VVasyl

Pomocna odpowiedź

Mam układ podpięty pod Arduino (ethernet shield, wyświetlacz, dwa termometry), do którego postanowiłem dodać czujnik ruchu, który ma zapalać podświetlenie wyświetlacza. W tym celu wpiąłem odpowiednio czujnik, i napisałem prosty program do testu:

#define podswietlenie 9
#define ruch 11
void setup() {
pinMode (ruch, INPUT);
pinMode (podswietlenie, OUTPUT);

}

void loop() {
 digitalWrite(podswietlenie, digitalRead(ruch));

}

Program działa w porządku. Postanowiłem go dodać do mojego programu głównego i tu się zaczyna mój problem. Po włączeniu wyświetlacz świeci się cały czas. Co do tej pory sprawdziłem:

-zmiana wyświetlacza na LED

-zmiana pinu

-zmiana miejsca pojawienia się komendy w programie

-dopisanie tuż przy wywołaniu digitalWrite zmiennej a=a+1 w celu zobaczenia czy pętla przechodzi przez to miejsce i wyświetlenie wartości a

W końcu zacząłem zakomentowywać całe bloki i poszczególne linijki kodu i wychodzi mi na to, że gdy zakomentowane jest Ethernet.begin(mac, ip) zmiana stanu na pinie odpowiadającym za podświetlenie działa poprawnie. Co mogę w takim przypadku zrobić? Poniżej cały program:

#include <OneWire.h>
#include <DS18B20.h>
#include <SPI.h>
#include <Ethernet.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(3, 4, 5, 6, 7, 8); //Informacja o podłączeniu nowego wyświetlacza

// Numer pinu do którego podłaczasz czujnik
#define ONEWIRE_PIN 2
#define podswietlenie 10 // pin do ktorego podlaczone jest podswietlenie
#define ruch 11 // pin czujnika ruchu

// Adresy czujników
byte addressWew[8] = {0x28, 0xEE, 0xD9, 0x4, 0x22, 0x16, 0x2, 0xA6};
byte addressZew[8] = {0x28, 0xFF, 0xC, 0x9D, 0x92, 0x16, 0x4, 0x55};

OneWire onewire(ONEWIRE_PIN);
DS18B20 sensors(&onewire);



// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDA, 0x02 };
IPAddress ip(192,168,0,14); //<<< ENTER YOUR IP ADDRESS HERE!!!

// Initialize the Ethernet server library
// with the IP address and port you want to use 
// (port 80 is default for HTTP):
EthernetServer server(80);

void setup() 
{
 pinMode (ruch, INPUT);
 pinMode (podswietlenie, OUTPUT);
 //  start the Ethernet connection and the server:
 Ethernet.begin(mac, ip);
 server.begin();
 //start wyświetlacza
 lcd.begin(16, 2);
 //start termometrów
 sensors.begin();
 sensors.request(addressWew);
 sensors.request(addressZew);
}



void loop()
{
if (sensors.available())
 {
   float temperatureWew = sensors.readTemperature(addressWew);
   float temperatureZew = sensors.readTemperature(addressZew);

 // listen for incoming clients
 /*    EthernetClient client = server.available();
   if (client)
   {
     // an http request ends with a blank line
     boolean currentLineIsBlank = true;
     while (client.connected())
     {
       if (client.available())
       {
         char c = client.read();
         // if you've gotten to the end of the line (received a newline
         // character) and the line is blank, the http request has ended,
         // so you can send a reply
         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();
           // client.println("<cke:html><cke:body bgcolor=#FFFFFF>TEST</cke:body></cke:html>");

           client.print("Wew: ");
           client.print(temperatureWew);
           client.print(" 'C  ");
           client.print("Zew: ");
           client.print(temperatureZew);
           client.print(" 'C  ");
           client.print("Ruch:");
           client.print(digitalRead(ruch));


           break;
         }
         if (c == '\n')
         {
           // you're starting a new line
           currentLineIsBlank = true;
         } 
         else if (c != '\r')
         {
           // you've gotten a character on the current line
           currentLineIsBlank = false;
          }
        }
      }
      // give the web browser time to receive the data
      delay(1);
      // close the connection:
      client.stop();
   }
*/
   lcd.setCursor(0, 0);
   lcd.print("Wew: ");
   lcd.print(temperatureWew);
   lcd.print(" 'C  ");
   lcd.setCursor(0, 1);
   lcd.print("Zew: ");
   lcd.print(temperatureZew);
   lcd.print(" 'C  ");

   sensors.request(addressWew);
   sensors.request(addressZew);

 }
 digitalWrite(podswietlenie, digitalRead(ruch)); // dlaczego to nie działa?
}
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.