Skocz do zawartości
VVasyl

Funkcja Ethernet.begin(mac, ip) zawiesza pin

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?
}

Udostępnij ten post


Link to post
Share on other sites

A co to za shield konkretnie, bo jest dużo różnych? Masz do niego jakąkolwiek dokumentację? Których pinów on używa?

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...