Лампа с реакцией на звук.

Тема в разделе "Arduino & Shields", создана пользователем AlinaR, 4 май 2016.

  1. AlinaR

    AlinaR Нуб

    Занимаюсь этим в первый раз. Написала код для лампы, которая реагирует на хлопки. Подключила детектор звука и Диоды Neopixel Ring 12 diods. Использую Arduino Nano.
    При проверке кода пишет :" Ошибка компиляции для платы Arduino Nano." Не могу понять в чем проблема.
    Помогите пожалуйста.[​IMG]
    Код (C++):
    #include <Adafruit_NeoPixel.h> //adafruit driver should be included into library as .ZIP
    #ifdef __AVR__
      #include <avr/power.h>
    #endif

    // Which pin on the Arduino is connected to the NeoPixels?
    // On a Trinket or Gemma we suggest changing this to 1
    #define PIN            10

    // How many NeoPixels are attached to the Arduino?
    #define NUMPIXELS      12

    Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

    // Arduino pin numbers
    const int DO_pin = 2; //Digital pin 2
    const int AO_pin = 0; //Analogue pin 0
    int sound;
    int led1 = 10; //adafruit neopixel LED = Digital 10

    // это массив задержек между переключениями состояния системы ( в милисекундах)
    unsigned long delays[] = {
      // Состояние White cделано по аналогии с RGB только в обратную сторону.
                              1200000UL,
                              180000UL,
                              15000UL,
                         
    // RGB состояние, оно же стартовое                        
                              480000UL,
                              15000UL,
                              240000UL,
                              180000UL
                                           
    };
    const int RGB_START_STATE = 3; // начальное состояние
    const int WHITE_DISABLED = 5;  // без возможности переключения обратно посредством хлопка.
    int currentState = RGB_START_STATE; // текущее состояние системы
    unsigned long startPhase = 0; // это число милисекунд с начала работы программы, в момент изменения состояния. Переполнится за 50 дней если хелп не врет.

    void setup() {
      pinMode(DO_pin, INPUT);         //Sound is at Digital pin 0
      pinMode(led1, OUTPUT);          //neopixel LED is at digital 10
      Serial.begin(9600);
      currentState = RGB_START_STATE;
      startPhase = millis();
        strip.begin();
      strip.show(); // Initialize all pixels to 'off'
    }

    void loop() {
      sound = analogRead(AO_pin);         //sound is detected with Sound Sensor at Analog pin 0.
                                              //When sound is louder, number gets smaller********
      if (sound < 500) {                    //When sound sensor detects sound less than 500,

        delay(500);                         //it pauses for .5 seconds so that commands are read
        if (currentState != WHITE_DISABLED)  { // без возможности переключения обратно посредством хлопка.
          currentState = 0; // Хлопок переводит ее из обычного осотояния, в состояние свечения белым светом, ярко.
          startPhase = millis();
          playCurrentPhase();
        }
      }
      unsigned long currentTick = millis();
      if (currentTick - startPhase > delays[currentState]) { // время текущей фазы истекло, переключаемся
        startPhase = currentTick;
        currentState++;
        if (currentState == sizeof(delays))
          currentState = RGB_START_STATE; // дошли до конца программы, возвращаемся в стартовое состояние
        playCurrentPhase();
      }
    }


    void rainbow(uint8_t wait) {
      uint16_t i, j;

      for(j=0; j<256; j++) {
        for(i=0; i<strip.numPixels(); i++) {
          strip.setPixelColor(i, Wheel((i+j) & 255));
        }
        strip.show();
        delay(wait);
      }
    }

    uint32_t Wheel(byte WheelPos) {
      WheelPos = 255 - WheelPos;
      if(WheelPos < 85) {
        return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
      }
      if(WheelPos < 170) {
        WheelPos -= 85;
        return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
      }
      WheelPos -= 170;
      return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
    }

    void colorWipe(uint32_t c, uint8_t wait) {
      for(uint16_t i=0; i<strip.numPixels(); i++) {
        strip.setPixelColor(i, c);
        strip.show();
        delay(wait);
      }
    }

    void colorSet(uint32_t c, uint8_t wait) {
      for(uint16_t i=0; i<strip.numPixels(); i++) {
        strip.setPixelColor(i, c);
        delay(wait);
      }
      strip.show();
    }

    void playCurrentPhase() {

      switch(currentState){
        case 0: colorWipe(strip.Color(255, 255, 255),50); // white
        break;
        case 1: strip.setBrightness(128);
        break;
        case 2: strip.setBrightness(64);
        break;
        case 3: colorWipe(strip.Color(79, 240, 231),50);
        break;
        case 4:
        colorWipe(strip.Color(79, 240, 98),50);
        delay(200);
        colorWipe(strip.Color(204, 239, 11),50);
        delay(200);
        colorWipe(strip.Color(239, 167, 11),50);
        break;
        case 5: rainbow(40);
        break;
        case 6: colorSet(strip.Color(241, 15, 137),50);
        break;
      }
    }
     
  2. Вложения:

    Последнее редактирование: 4 май 2016
  3. AlinaR

    AlinaR Нуб

  4. Пожалуйста) Интересно, как оно работает ?
     
  5. Airbus

    Airbus Радиохулиган Модератор

    Хех!прикольно!Английский ваш родной язык?Судя по коментариям?
     
  6. AlinaR

    AlinaR Нуб

    Работает пока не очень хорошо.
    Идея проекта в том чтобы дать в каком то роде личность данному предмету, то есть лампе.
    В итоге должно получится что то вроде лампы, которая не имеет возможности выключения. У нее есть два состояния - рабочее, когда она светит белым цветом и ярко, и состояние покоя, когда она светит разными цветами и переливается. Человек, спомощью хлопка может переключить ее из состояния ожидания в состояние работы.Так же, она имеет способность уставать, то есть, когда она долго работает через некоторое время она начинает на пару секунд мелькать цветным, а после вообще автоматический переходит в режим ожидания. И в режиме ожидания, по той же схеме через некоторое время она начинает тускнеть.
    Только вот пока код почему то не работает(
    Только белым и светит, не пойму почему((
     
  7. AlinaR

    AlinaR Нуб

    Нет, я учусь в Британском дизайнерском вузе и эта лампа, собственно, один из моих проектов по учебе.
    Коментарии на английском сделаны, чтобы учителям понятно было)
     
  8. Может не правильно подключили ?
    Вы код полностью сами писали ? Или уже сто процентный вариант ?
     
  9. ostrov

    ostrov Гуру

    Какой датчик используете для распознавания хлопков?
     
  10. AlinaR

    AlinaR Нуб

    Код с нуля писали, с подругой. Мы сначала попробывали простой написать, просто на включение и выключение. Он работал. А когда усложнять его начали перестал. Подключили все вроде правильно.
     
  11. AlinaR

    AlinaR Нуб

    [​IMG]
     
  12. Limoney

    Limoney Гик

    Можно поинтересоваться для чего нужна такая классная лампа
     
  13. ostrov

    ostrov Гуру

    Немного освобожусь, посмотрю код внимательно. Сейчас немного завалили делами.