Изменить стиль страницы

void loop() {

  val = analogRead(SENSOR); // read the value from the sensor

  Serial.println(val); // print the value to

                            // the serial port

if (Serial.available() >0) {

  // read the incoming byte:

  inByte = Serial.read();

  // If the marker's found, next 6 characters are the colour

  if (inByte == '#') {

    while (pointer < 6) { // accumulate 6 chars

      buffer[pointer] = Serial.read(); // store in the buffer

      pointer++; // move the pointer forward by 1

    }

      // now we have the 3 numbers stored as hex numbers

      // we need to decode them into 3 bytes r, g and b

      r = hex2dec(buffer[1]) + hex2dec(buffer[0]) * 16;

      g = hex2dec(buffer[3]) + hex2dec(buffer[2]) * 16;

      b = hex2dec(buffer[5]) + hex2dec(buffer[4]) * 16;

      pointer = 0; // reset the pointer so we can reuse the buffer

    }

  }

  btn = digitalRead(BUTTON); // read input value and store it

  // Check if there was a transition

  if ((btn == HIGH) && (old_btn == LOW)){

    state = 1 - state;

  }

  old_btn = btn; // val is now old, let's store it

  if (state == 1) { // if the lamp is on

    analogWrite(R_LED, r); // turn the leds on

    analogWrite(G_LED, g); // at the colour

    analogWrite(B_LED, b); // sent by the computer

  } else {

    analogWrite(R_LED, 0); // otherwise turn off

    analogWrite(G_LED, 0);

    analogWrite(B_LED, 0);

   }

  delay(100); // wait 100ms between each send

}

int hex2dec(byte c) { // converts one HEX character into a number

    if (c >= '0' && c <= '9') {

      return c - '0';

    } else if (c >= 'A' && c <= 'F') {

      return c - 'A' + 10;

    }

}

6.4 Сборка схемы

Рис. 6-2 показывает как собрать схему. Вам понадобится резисторы на 10 кОм (все резисторы, показанные на схеме, хотя для резисторов, подключённых к светодиодам, можно использовать меньшие значения).

Вспомните пример с ШИМ из главы 5: светодиоды имеют полярность: в этой схеме длинный вывод (анод) подключается справа, а короткий (катод) - слева. (большинство светодиодов имеют фаску со стороны катода, как показано на рисунке).

Рис. 6-2. Схема сетевой лампы с Arduino

Знакомство с Arduino (перевод книги

Соберите схему как показано на рисунке, используя один красный, один зелёный и один синий светодиоды. Затем загрузите скетчи в Arduino и Processing и запустите их. Если случились какие-то проблемы, см. главу 7. Устранение неполадок.

Теперь давайте завершим устройство, поместив макетную плату в стеклянный шар. Самый простейший и дешёвый выход - купить настольную лампу "FADO" в магазине IKEA. Сейчас она продаётся за US$14.99/€14.99/£8.99 (ага, прекрасно быть европейцем).

Вместо использования трёх отдельных светодиодов вы можете использовать один RGB-светодиод с четырьмя выводами. Подключите его так-же как и светодиоды на рис. 6-2, с единственным отличием - вместо трёх отдельных выводов, подключённых на вывод GND платы Arduino (называемый общий катод, или земля), у вас будет только один провод на землю.

6.5 Как собрать лампу:

Распакуйте лампу и удалите кабель от лампы к подставке. Вы больше не будете включать её в розетку.

Укрепите Arduino на макетной плате и приклейте плату к лампе.

Припаяйте длинные провода к светодиодам и приклейте их в нужном месте внутри лампы. Подключите провода от светодиода к плате (откуда вы их вытащили). Помните, что для RGB-светодиода требуется только один земляной провод.

Или найдите подходящий кусок дерева с отверстием, который может быть использован как основание для лампы, или просто отрежьте у картонной коробки для лампы верх (примерно 5 см) и сделайте отверстие для неё. Проклейте внутренности картонной коробки клеевым пистолетом по всем граням чтобы придать жёсткость коробке.

Поместите шар на основание и подключите USB-кабель к компьютеру.

Запустите код Processing, нажмите кнопку "вкл/выкл" и следите как оживает лампа.

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

Добавить датчик наклона для включения или выключения лампы поворотом

Добавить маленький датчик движения для включения лампы если кто-то есть поблизости и для выключения если никого рядом нет

Создать различные режимы для ручного управления цветом или заставить лампу плавно менять все цвета.

Подумайте о разных вещах, поэкспериментируйте и получите удовольствие!

Глава 7. Устранение неполадок

В ваших экспериментах настанет момент когда ничего не будет работать и вы должны будете разобраться в проблеме. Устранение неполадок и отладка - древние искусства, у которых есть несколько простых правил, но большинство результатов получаются посредством тяжёлой работы.

Чем больше вы работаете с электроникой и Arduino, тем больше вы поймёте и получите опыт, который сделает процесс работы менее болезненным. Не обескураживайтесь проблемами, с которыми вы встретитесь - они не так страшны как выглядели вначале.

Так как любой проект на основе Arduino состоит из программного и аппаратного обеспечений, то для поиска причины неприятностей будет больше одного места. В поисках проблемы вам следует следовать трём правилам:

7.1 Понимание

7.1.1 Понимание

Попробуйте понять как можно больше о том как работают используемые вами части и какой вклад они вносят в готовый проект. Такой подход позволит вам использовать какой-либо способ проверить каждый компонент в отдельности.

7.1.2 Упрощение и разделение

Древние римляне говорили: "divide et imper", что означает "разделяй и властвуй". Попробуйте разбить (мысленно) проект на его компоненты с использованием знаний где начинается и заканчивается ответственность каждого компонента.