серийный порт и Ethernet shield

dieego
Offline
Зарегистрирован: 25.06.2012

С новым годом народ!

arduino uno, ethernet shield.

Прикоснулся первый раз к Ethernet шилду несколько дней назад, нашёл в сети код мигания светодиодом

http://robocraft.ru/blog/238.html

Попробовал, кое-что попровил, работает.

Вот код:

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

/*Управление светодиодом через Ethernet */
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //mac - адрес ethernet shielda
byte ip[] = { 192, 168, 1, 35 };        // ip адрес ethernet shielda
byte subnet[] = { 255, 255, 255, 0 }; //маска подсети
EthernetServer server(80); //порт сервера
int ledPin = 4; // указываем что светодиод будет управляться через 4 Pin 
String readString = String(30); //string for fetching data from address
boolean LEDON = false; //изначальный статус светодиода - выключен

void setup(){
  //запускаем Ethernet
  Ethernet.begin(mac, ip, subnet);
  //устанавливаем pin 4 на выход
  pinMode(ledPin, OUTPUT);
  //enable serial datada print
  //Serial.begin(12800); 
}
void loop(){
  // Создаем клиентское соединение
  EthernetClient client = server.available();
  if (client) {
    while (client.connected()) {
    if (client.available()) {
      char c = client.read();
      //read char by char HTTP request
      if (readString.length() < 30) {
        //store characters to string
        readString.concat(c); }
        //output chars to serial port
        //Serial.print( c);
        //if HTTP request has ended
        if (c == '\n') {
        //Проверяем включили ли светодиод?
        //Level=1 - включен
        //Level=0 - выключен
          if(readString.indexOf("Level=1") >=0) {
            //Включаем светодиод
            digitalWrite(ledPin, HIGH); // set the LED on
            LEDON = true;
          }else if(readString.indexOf("Level=0")>=0){
            //Выключаем светодиод
            digitalWrite(ledPin, LOW); // set the LED OFF
            LEDON = false; 
          }
          // Формируем HTML
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
          client.println("<head> ");
          client.println("<meta http-equiv='Content-Type' content='text/html; charset=utf-8' /> ");
          client.println("<title> Arduino :: Управление V0.1</title>");
          client.println("</head> ");
          client.println("<body");
          //controlling led via radio elements
          client.println("<h1>Управление светодиодом 4pin</h1>");
          if (LEDON){
            client.println("<form method=get name=LED><input type=radio name=Level value=1 CHECKED>Включить<input type=radio name=Level value=0>Выключить<input type=submit value=Применить></form>");
            client.println("<font size=’5′>LED-статус: ");
            client.println("<font size=’5′>Вкл.");
          }else{
            client.println("<form method=get name=LED><input type=radio name=Level value=1>Включить<input type=radio name=Level value=0 CHECKED>Выключить<input type=submit value=Применить></form>");
            client.println("<font size=’5′>LED-статус: ");
            client.println("<font size=’5′>Выкл");
          }
            client.println("<hr />");
            client.println("</body></html>");
            //clearing string for next read
            readString="";
            //останавливаем web-client
            client.stop();
          }
        }
      }
    }
  }

 

Но есть нюансы.

Заливается всё это дела на  arduino только когда шилд не подключён к сети, в противном случае пишет или com порт занят или avrdude: stk500_getsync(): not in sync: resp=0x00

В коде использовался Serial но автор статьи пишет что по какойто причине иногда Serial не работает.

Как тогда отлаживать всё это дело?

Или может проблема в клиенте или сервере, экземпляры которых создаём?

dieego
Offline
Зарегистрирован: 25.06.2012

Нашёл старую сборку arduino-0023, на ней всё работает, но это старая сборка, хочется посвежее  

https://code.google.com/p/arduino/downloads/detail?name=arduino-0023.zip...

dieego
Offline
Зарегистрирован: 25.06.2012

Импортировал библиотеку Ethernet и всё заработало.... Хм..