• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Ethernet shield 4 przekazniki
#1
Witam jestem początkujacy Potrafie pisac proste komendy ale gdy juz przychodzi składanie wszystko w kupe zaczynają sie schody... mam kod na dwa przekaźniki i średnio go rozumiem .Moze mi ktoś go  w skrócie opisac ?
na tyle abym mogł dodać kolejne dwa przekaźniki ? i prosze o przesłanie jakis linków do nauki programowania
Kod:
// przekaznik_siec
// Arduino Uno lub (Leonardo wraz z modułem ethernetowym w wersji R3)

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

// Adres MAC musi być niepowtarzalny. Ten powinien zadziałać
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
// Adres IP jest zależny od sieci lokalnej:
byte ip[] = { 192, 168, 1, 9 };
EthernetServer server(80);

int relayPin = A0; //pin serowania przekaznika 1
int relayPin2 = A1;//pin serowania przekaznika 2
int relayPin3 = A2;//pin serowania przekaznika 3
int relayPin4 = A3;//pin serowania przekaznika 4
char line1[100];//była dodana 1 linia ale analogicznie spróbowałem dodac na reszte przekazników?
char line2[100];
char line3[100];
char line4[100];

void setup()
{
 pinMode(relayPin, OUTPUT);
 pinMode(relayPin2,OUTPUT);
 pinMode(relayPin3,OUTPUT);
 pinMode(relayPin4,OUTPUT);
 
 Ethernet.begin(mac, ip);
 server.begin();//inicjalizuje połaczenie  z shieldem
}

void loop()
{
 EthernetClient client = server.available(); //sprawdzanie czy sa jakies informacje
 if (client)
 {
   while (client.connected()) //jeżeli połączy się klient
   {
     readHeader(client);
     if (! pageNameIs("/")) // do tego momentu juz nie wiem co sie dzieje
     {
       client.stop();  
       return;
     }
     digitalWrite(relayPin, valueOfParam('a'));
     client.println("HTTP/1.1 200 OK");
     client.println("Content-Type: text/html");
     client.println();

     // Wysyła ciało strony
     client.println("<html><body>");
     client.println("<h1>Zdalny przekaznik1</h1>");

     client.println("<h2><a href='?a=1'/>Wlaczony</a></h2>");
     client.println("<h2><a href='?a=0'/>Wylaczony</a></h2>");
     client.println("<h1>Zdalny przekaznik2</h1>");

     client.println("<h2><a href='?a=4'/>Wlaczony</a></h2>");
     client.println("<h2><a href='?a=5'/>Wylaczony</a></h2>");
     client.println("</body></html>");

     client.stop();            
   }
 }
}


void readHeader(EthernetClient client)
{
 // Odczytuje pierwszy wiersz nagłówka //
 char ch1;
 int i = 0;
 while (ch1 != '\n')
 {
   if (client.available())
   {
     ch1 = client.read();
     line1[i] = ch1;
     i ++;
   }
 }
 line1[i] = '\0';
 Serial.println(line1);


 // Odczytuje drugi wiersz nagłówka

 {
   char ch2;
 
 int i = 4;
 while (ch2 != '\n')
 {
   if (client.available())
   {
     ch1 = client.read();
     line1[i] = ch2;
     i ++;
   }
 }
 line2[i] = '\0';
 Serial.println(line1);
}
boolean pageNameIs(char* name)
{
  // Nazwa strony zaczyna się od czwartego znaku
  // Kończy się spacją
  int i = 4;
  char ch = line1[i];
  while (ch != ' ' && ch != '\n' && ch != '?')
  {
    if (name[i-4] != line1[i])
    {
      return false;
    }
    i++;
    ch = line1[i];
  }
  return true;
}

int valueOfParam(char param)
{
 for (int i = 0; i < strlen(line1); i++)
 {
   if (line1[i] == param && line1[i+1] == '=')
   {
     return (line1[i+2] - '0');
   }
 }
 return 0;
}
 
Odpowiedź
#2
Tu materiały są dość dobrze opisane:

http://www.jarzebski.pl/arduino/komponen...yczne.html
http://feriar-lab.pl/kurs-arduino-11-obs...ekaznikow/
http://www.nettigo.pl/przekaznik/


Kod juz masz częściowo opisany chyba że chodzi Ci o dokładny opis:

,, // Odczytuje drugi wiersz nagłówka

{
char ch2;

int i = 4;
while (ch2 != '\n')
{
if (client.available())
{
ch1 = client.read();
line1[i] = ch2;
i ++;
}
}
line2[i] = '\0';

"
 
Odpowiedź
#3
dopisałem linijki w pinMode oraz
digitalWrite(piny, valueOfParam('a')); i cos ruszylo



DOBRA  steruje 3 przekazikami ale nie moge sterowac na przemian
czyli kiedy daje
włacz --->włacza 1
włacz 2---->wyłacza1----->wlacza2>





Kod:
kod
// przekaznik_siec
// Arduino Uno lub (Leonardo wraz z modułem ethernetowym w wersji R3)

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

// Adres MAC musi być niepowtarzalny. Ten powinien zadziałać
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
// Adres IP jest zależny od sieci lokalnej:
byte ip[] = { 192, 168, 1, 30 };
EthernetServer server(80);

int relayPin = A0;
int relayPin1 = A1;
int relayPin2 = A2;
int relayPin3 = A3;
char line1[100];

void setup()
{
 pinMode(relayPin, OUTPUT);
 pinMode(relayPin1,OUTPUT);
 pinMode(relayPin2,OUTPUT);
 pinMode(relayPin3,OUTPUT);
 Ethernet.begin(mac, ip);
 server.begin();
}

void loop()
{
 EthernetClient client = server.available();
 if (client)
 {
   while (client.connected())
   {
     readHeader(client);
     if (! pageNameIs("/"))
     {
       client.stop();  
       return;
     }
     digitalWrite(relayPin, valueOfParam('a'));
     digitalWrite(relayPin1, valueOfParam('t'));
     digitalWrite(relayPin2, valueOfParam('p'));
     client.println("HTTP/1.1 200 OK");
     client.println("Content-Type: text/html");
     client.println();

     // Wysyła ciało strony
     client.println("<html><body>");
     client.println("<h1>Zdalny przekaznik1</h1>");
     client.println("<br />");
     client.println("<h2><a href='?a=1'/>Wlaczony</a></h2>");
     client.println("<h2><a href='?a=0'/>Wylaczony</a></h2>");
     client.println("<br />");
    client.println("<h1>Zdalny przekaznik1</h1>");
     client.println("<h2><a href='?t=1'/>Wlaczony</a></h2>");
     client.println("<h2><a href='?t=0'/>Wlaczony</a></h2>");
     client.println("<h1>Zdalny przekaznik1</h1>");
     client.println("<br />");
     client.println("<h2><a href='?p=0'/>Wylaczony</a></h2>");
     client.println("<h2><a href='?p=1'/>Wylaczony</a></h2>");
     
     client.println("</body></html>");

     client.stop();            
   }
 }
}


void readHeader(EthernetClient client)
{
 // Odczytuje pierwszy wiersz nagłówka
 char ch;
 int i = 0;
 while (ch != '\n')
 {
   if (client.available())
   {
     ch = client.read();
     line1[i] = ch;
     i ++;
   }
 }
 line1[i] = '\0';
 Serial.println(line1);
}

boolean pageNameIs(char* name)
{
  // Nazwa strony zaczyna się od czwartego znaku
  // Kończy się spacją
  int i = 4;
  char ch = line1[i];
  while (ch != ' ' && ch != '\n' && ch != '?')
  {
    if (name[i-4] != line1[i])
    {
      return false;
    }
    i++;
    ch = line1[i];
  }
  return true;
}

int valueOfParam(char param)
{
 for (int i = 0; i < strlen(line1); i++)
 {
   if (line1[i] == param && line1[i+1] == '=')
   {
     return (line1[i+2] - '0');
   }
 }
 return 0;
}

chyba sie domyslam ... musze napisac nowy kod dla kazdego osobnego przekaznika ? 


chyba sie domyslam ... musze napisac nowy kod dla kazdego osobnego przekaznika ?
 
Odpowiedź
#4
http://feriar-lab.pl/kurs-arduino-11-obs...ekaznikow/
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości