?>

Hard Copy World

HCW

Q&A

Home > Forum >

Q&A

코드 합치기 질문드립니다!

페이지 정보

작성자 noise 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일16-06-08 17:58 조회1,486회 댓글1건

본문

아두이노에서 서버로 값을 보내는 코드와

서버에서 받아온 값으로 led를 제어하는 코드를 하나로 합치려고 했는데요

컴파일에는 오류가 발생하지 않았는데요

업로드 해보면 아두이노에서 서버로 값 전송하는것만 되고 led 제어하는게 되지 않습니다.

소스코드를 각각 동작해보면 둘 다 잘되는데 합치는 과정에 문제가 생긴것 같습니다.

그런데 컴파일에 오류가 문제가 없으니 무엇을 잘못한건지 잘 모르겠어서 질문남겼습니다!

서버로 값을 보내는 소스코드와 led 제어하는 코드 , 제가 합쳐놓은 코드를  밑에 올려놓았습니다

한번 살펴봐주시고 조언부탁드려요

<아두이노에서 서버로 값 보내기>

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

  IPAddress server(192, 168, 21, 6);
  IPAddress ip(192, 168, 21, 11);
  byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
  unsigned long prevMillis = 0;

void setup() {
  Serial.begin(9600);
}

void loop() {
    EthernetClient client;
    unsigned long currentMillis = millis();
    int val1=analogRead(0);
 // int val2=analogRead(1);
    int val2=0;

    if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    Ethernet.begin(mac, ip);
  }
  if(currentMillis - prevMillis >= 800){
    prevMillis = currentMillis;
   
  if (client.connect(server, 8080)) {
    client.print("GET /FloorNoise/FloorNoiseMain.jsp?val=");
    client.print(val1);
    client.print("&vive=");
    client.print(val2);
    client.println("&adr=106-301");
    client.println();
 
  } else {
  
    Serial.println("connection failed");
  }
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();

    while (true);
  }

  }
}

 

<led  on 시키는 소스코드>

#include <SPI.h>
#include <Ethernet.h>
#define led_pin 13

boolean incoming = 0;

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED } ;
IPAddress ip(192, 168, 21, 11) ;
EthernetServer server2(80) ;

void setup()
{
  pinMode(led_pin, OUTPUT);

  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip);
  server2.begin();
  Serial.begin(9600);
}

void loop()
{
  // listen for incoming clients
  EthernetClient client = server2.available();
 
  if (client) {
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        //reads URL string from $ to first blank space
        if (incoming && c == ' ') {
          incoming = 0;
        }
        if (c == '$') {
          incoming = 1;
        }

        //Checks for the URL string $1 or $2
        if (incoming == 1) {
          Serial.println(c);

          if (c == '1') {
            Serial.println("ON");
            digitalWrite(led_pin, HIGH);
          }
          if (c == '2') {
            Serial.println("OFF");
            digitalWrite(led_pin, LOW);
          }

        }
      }
    }
    // give the web browser time to receive the data
    delay(1);
    // close the connection:
    client.stop();
  }
}

 

<합친 소스코드>

#include <SPI.h>
#include <Ethernet.h>
#define led_pin 13

  IPAddress server(192, 168, 21, 6);
  IPAddress ip(192, 168, 21, 4);
  EthernetServer server2(80);
  byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};

  boolean incoming = 0;
  unsigned long prevMillis = 0;
  const long interval = 1000;
 
void setup() {
  Serial.begin(9600);
  pinMode(led_pin, OUTPUT);

  //Ethernet.begin(mac, ip);
  server2.begin();
  Serial.begin(9600);
}

void loop() {

    unsigned long currentMillis = millis();
    EthernetClient client;
    EthernetClient client2 = server2.available();

    int val1=analogRead(0);
    // int val2=analogRead(1);
    int val2=0;

    if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    Ethernet.begin(mac, ip);
    }

    if (currentMillis - prevMillis >= interval) {
    // save the last time you blinked the LED
    prevMillis = currentMillis;
 
    if (client.connect(server, 8080)) {
    client.print("GET /FloorNoise/FloorNoiseMain.jsp?val=");
    client.print(val1);
    client.print("&vive=");
    client.print(val2);
    client.println("&adr=106_301");
    //client.println("HTTP/1.1");
    //client.println("Host: 192.168.21.6");
    client.println();
 
  } else {
    Serial.println("connection failed");
  }
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();

    while (true);
  }
  }
   if (client2 = server2.available()) {
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client2.connected()) {
      if (client2.available()) {
        char c = client2.read();
       
        if (incoming && c == ' ') {
          incoming = 0;
        }
        if (c == '$') {
          incoming = 1;
        }
       
        if (incoming == 1) {
          Serial.println(c);

          if (c == '1') {
            Serial.println("ON");
            digitalWrite(led_pin, HIGH);
          }
          if (c == '2') {
            Serial.println("OFF");
            digitalWrite(led_pin, LOW);
          }
        }
      }
    }
    client2.stop();
   }
}

 

 

댓글목록

최고관리자님의 댓글

최고관리자 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 작성일

이더넷을 서버/클라이언트 둘 다 동작시키는 것이 관건이네요. 아래 포럼 내용을 보시면 중간에 이와 유사한 구현 예제가 있습니다.
http://forum.arduino.cc/index.php?topic=116816.0
이걸 돌려보시고 여기에 LED 제어를 추가해야 할 듯 합니다.