Помогите, не могу понять логику при этом все работает)

Тема в разделе "Arduino & Shields", создана пользователем andreuku, 17 фев 2014.

  1. andreuku

    andreuku Нерд

    Добрый день.
    Недавно заинтересовался ардуино, посмотрел уроки и научился самому простому, зажигать и гасить лампочки)
    Сейчас пытаюсь разобраться с подключением к интернету, управление ардуино с помошью браузера.
    Пытаюсь разобрать код :

    1. void loop()
    2. {
    3. // ожидание подключения клиентов
    4. EthernetClient client = server.available();
    5. if (client) {
    6. // Запрос HTTP заканчивается пустой строкой
    7. boolean currentLineIsBlank = true;
    8. while (client.connected()) {
    9. if (client.available()) {
    10. char c = client.read();
    11. // Если будет получен символ переноса строки и
    12. // сама строка при этом пустая, значит
    13. // HTTP-запрос закончился, можно отвечать
    14. // считываем URL с символа "$" до первого пробела
    15. if(incoming && c == ' '){
    16. incoming = 0;
    17. }
    18. if(c == '$'){
    19. incoming = 1;
    20. }
    21. // Определяем что было в URL: $1 или $2
    22. if(incoming == 1){
    23. Serial.println(c);
    24. if(c == '1'){
    25. Serial.println("ON");
    26. digitalWrite(2, HIGH);
    27. }
    28. if(c == '2'){
    29. Serial.println("OFF");
    30. digitalWrite(2, LOW);
    31. }
    32. }
    33. if (c == '\n') {
    34. // началась новая строка
    35. currentLineIsBlank = true;
    36. }
    37. else if (c != '\r') {
    38. // в текущей строке ещё есть символы
    39. currentLineIsBlank = false;
    40. }
    41. }
    42. }
    43. // даём время браузеру для получения данных
    44. delay(1);
    45. // закрываем соединение
    46. client.stop();
    47. }
    48. }


    Мне вот что не понятно - мы считываем данные и записываем их в переменную с(строка 10), в строке 18 мы задаем условие что если с равно $, то incoming = 1;. Потом в строке 24 проверяется условие если с == 1, то выполняется условие. Как с может быть равно единице когда выше в строке 18 мы проверили что оно равно $? Когда символ после $ успел туда записаться? Но на удивление все работает или я чего-то не понимаю. Помогите, пожалуйста.

    Оригинал поста, пункт №5: http://diy-blog.net/arduino-ethernet-shield-opisanie-shilda-i-primeryi-ispolzovaniya/#5

    Спасибо.
     
  2. Unixon

    Unixon Оракул Модератор

    Если при входе в loop() переменная incoming уже == 1, и при этом прочитается c == '1', то все отработает.
     
    andreuku нравится это.
  3. andreuku

    andreuku Нерд

    Unixon спасибо понял.