• 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
Konfigurowanie złączy Arduino za pośrednictwem sieci
#1
Witam
Ponieważ jestem początkującym w programowaniu Arduino mam problem ze zmianą pewnego parametru w kodzie, którego zadaniem jest sterowanie czterema wyjściami za pośrednictwem formularza wyświetlanego przez przeglądarkę internetową. Dodatkowo 2 z tych wyjść są załączane oraz wyłączane o określonej godzinie. Wszystko działa prawidłowo tylko chciałbym aby po włączeniu Arduino wszystkie cztery wyjścia ustawiały się w stan wysoki. Mam płytkę przekaźników sterowaną sygnałem niskim i nie chcę aby po włączeniu Arduino załączały mi się przekaźniki. Zmiana wartości w tablicy pinState[] nie przynosi oczekiwanego rezultatu więc jeśli ktoś z was będzie wiedział który parametr zmienić to będę wdzięczy za  pomoc.  
Kod:
// szkic 10.02. Obsługa złącz za pośrednictwem sieci

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

// Adres MAC musi być unikalny. Poniższy adres nie powinien powodować konfliktów.
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
// Adres IP jest zależny od Twojej lokalnej sieci
byte ip[] = { 192, 168, 2, 2 };
DS1302 rtc(8, 7, 6);
EthernetServer server(80);
String godzstr;
int numPins = 4;
int pins[] = {2, 3, 5, 9};
int pinState[] = {0, 0, 0, 0};
char line1[100];

void setup()
{
 for (int i = 0; i < numPins; i++)
 {
    pinMode(pins[i], OUTPUT);
   
 }
 Serial.begin(9600);
 Ethernet.begin(mac, ip);
 server.begin();
}

void loop()
{
   kamery_on_off();
   
   EthernetClient client = server.available();
 if (client)
 {
   while (client.connected())
   {
     readHeader(client);
     if (! pageNameIs("/"))
     {
       client.stop();  
       return;
     }
     client.println("HTTP/1.1 200 OK");
     client.println("Content-Type: text/html");
     client.println();

     // wysyła właściwą treść formularza
     client.println("<html><body>");
     client.println("<h1>Piny wyjścia</h1>");
     client.println("<form method='GET'>");
       
     setValuesFromParams();
     setPinStates();
     for (int i = 0; i < numPins; i++)
     {
        writeHTMLforPin(client, i);
     }
     client.println("<input type='submit' value='Uaktualnij'/>");
     client.println("</form>");
     client.println("</body></html>");

     client.stop();            
   }
 }
}


void kamery_on_off()
{
 godzstr = rtc.getTimeStr();
   int uur = godzstr.substring(0, 2).toInt();
   int mmr = godzstr.substring(3, 5).toInt();
 if (uur == 20 && mmr == 18)
 {
   digitalWrite(2, LOW);
   digitalWrite(3, LOW);  
 }
 else {
       }
    if (uur == 20 && mmr == 20)
 {
   digitalWrite(2, HIGH);
   digitalWrite(3, HIGH);
 
 }
 else {
     }
}
void writeHTMLforPin(EthernetClient client, int i)
{
 client.print("<p>Pin ");
 client.print(pins[i]);  
 client.print("<select name='");
 client.print(i);
 client.println("'>");
 client.print("<option value='0'");
 if (pinState[i] == 0)
 {
   client.print(" selected");
 }
 client.println(">Nieaktywny</option>");
 client.print("<option value='1'");
 if (pinState[i] == 1)
 {
   client.print(" selected");
 }
 client.println(">Aktywny</option>");
 client.println("</select></p>");  
}

void setPinStates()
{
 for (int i = 0; i < numPins; i++)
 {
    digitalWrite(pins[i], pinState[i]);
 }
}

void setValuesFromParams()
{
 for (int i = 0; i < numPins; i++)
 {
   pinState[i] = valueOfParam(i + '0');
 }
}

void readHeader(EthernetClient client)
{
 // wczytuje pierwszą linię 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 znaku znajdującego się na pozycji o numerze 4
  // 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ź
  


Skocz do:


Przeglądający: 1 gości