fade

Тема в разделе "Arduino & Shields", создана пользователем Nikita, 20 окт 2013.

  1. Megakoteyka

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

    В примере не можете разобраться?
     
  2. Nikita

    Nikita Гик

    могу а чего не правильно?
     
  3. Megakoteyka

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

    Ничего не изменилось, по сравнению с предыдущей версией. Часы как тикали с нуля при включении питания, так и будут тикать. Посмотрите пример внимательней, там в самом конце полный исходник, где время компиляции разбирается на переменные, происходит подсчет хэша времени и так далее...
     
  4. Nikita

    Nikita Гик

    тпо этого

    Код (Text):
    #include <Wire.h>
    #include "DS1307.h"
    #include <EEPROM.h>
    int led = 9;
    int ledStatus = 0;
    int LED_ON = 0;
    int LED_OFF = 1;
    int hour;
    int minute;
    int second;

    //Массив, содержащий время компиляции
    char compileTime[] = __TIME__;
     
    DS1307 clock;//define a object of DS1307 class
    void setup()
    {
    pinMode(led, OUTPUT);
    //Запускаем часы реального времени
      clock.begin();
     
      //Импровизированный хэш времени
      //Содержит в себе количество секунд с начала дня
      unsigned int hash =  hour * 60 * 60 + minute  * 60 + second;
      //Проверяем несовпадение нового хэша с хэшем в EEPROM
      if (EEPROMReadInt(0) != hash) {
        //Сохраняем новый хэш
        EEPROMWriteInt(0, hash);
        //Готовим для записи в RTC часы, минуты, секунды
        clock.fillByHMS(hour, minute, second);
        //Записываем эти данные во внутреннюю память часов.
        //С этого момента они начинают считать нужное для нас время
        clock.setTime();
      }
    }


    void turnOffLed()
    {
      // fade in from min to max in increments of 5 points:
      for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) {
        // sets the value (range from 0 to 255):
        analogWrite(led, fadeValue);      
        // wait for 30 milliseconds to see the dimming effect  
        delay(30);                          
      }

      // fade out from max to min in increments of 5 points:
      for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) {
        // sets the value (range from 0 to 255):
        analogWrite(led, fadeValue);      
        // wait for 30 milliseconds to see the dimming effect  
        delay(30);                          
      }
    }

    void loop()
    {
      {
        clock.getTime();
        if(clock.hour == 7 && ledStatus == LED_ON)//Время включения
        {
            ledStatus = LED_OFF;//статус светодиодной дорожки
        }
        else if(clock.hour == 21 && ledStatus == LED_OFF)//время выключения
        {
         
          //Запись двухбайтового числа в память
    void EEPROMWriteInt(int address, int value)
    {
      EEPROM.write(address, lowByte(value));
      EEPROM.write(address + 1, highByte(value));
    }
    //Чтение числа из памяти
    unsigned int EEPROMReadInt(int address)
    {
      byte lowByte = EEPROM.read(address);
      byte highByte = EEPROM.read(address + 1);
      return (highByte << 8) | lowByte;
    }
    }
    }
    }
     
     
  5. Nikita

    Nikita Гик

    если так то теперь надо описать EEPROMReadInt
     
  6. Megakoteyka

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

    И EEPROMWriteInt тоже.
     
  7. Nikita

    Nikita Гик

    а как их описать так
    int address = 0;
    byte value;или так
    int EEPROMReadInt= 0;
    int EEPROMWriteInt= 0; ?
     
  8. Megakoteyka

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

    Вы пример читали внимательно? Это функции, а не переменные.
     
  9. Nikita

    Nikita Гик

    типо это
    Код (Text):
    //Получаем число из строки, зная номер первого символа
      byte hour = getInt(compileTime, 0);
      byte minute = getInt(compileTime, 3);
      byte second = getInt(compileTime, 6);
     
     
  10. Nikita

    Nikita Гик

    эсли это то тогда надо как то описать функцию getInt
     
  11. NR55RU

    NR55RU Гик

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

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

    Рекомендую вам данную книгу, для новичков по Си лучше я пока не встречал, можете где-либо купить в бумажном виде или скачать в электроном, потратьте пару недель на ее чтение и вам станет гораздо проще во всем этом разбираться, хватит уже пытаться из "японских иероглифов" складывать выражение "ура заработало" ориентируясь лишь на их внешний вид :)
     
    Megakoteyka нравится это.
  12. Nikita

    Nikita Гик

    вы правы надо изучить Си:)
     
  13. Nikita

    Nikita Гик

    а такая не подойдёт? Дейтел Х.М., Дейтел П.Дж. Как программировать на C++ (2009)
     
  14. NR55RU

    NR55RU Гик

    Я не знаком с данной книгой.
    На самом деле подойдет любая которая будет вам понятна, главное что бы вы начали изучение.
    Я просто дал ссылку на книгу которая написана в ОЧЕНЬ доступном стиле, но вы можете использовать любую что вам по душе :)
     
  15. Nikita

    Nikita Гик

    Потихоньку начал разбираться. Добавил в код логики, ну а с компиляция времени пока в процессе

    Код (Text):
    /*
    Этот пример кода показывает как включать и выыключать
    какой-нибудь прибор по времени
    */
    #include <Wire.h>
    #include "DS1307.h"
    int led = 9;//LED лампа
    int ledStatus = 0;
    int LED_ON = 0;
    int LED_OFF = 1;
    int sensorPin = A0;

    // variables:
    int sensorValue = 0; //sensorValue
    int sensorMin = 1023; // минемальное  sensor value
    int sensorMax = 0; // максимальное sensor value

    DS1307 clock;//define a object of DS1307 class
    void setup()
    {

      pinMode(led, OUTPUT);
      Serial.begin(9600);
      clock.fillByYMD(2013,1,19);//Jan 19,2013
      clock.fillByHMS(15,28,30);//15:28 30"
      clock.fillDayOfWeek(SAT);//Saturday
      clock.begin();
      clock.setTime();//write time to the RTC chip
      Serial.println(" Connected to RTS ");
    }

    void turnOffLed()
    {
      Serial.print(" Morning ");
      // fade in from min to max in increments of 5 points:
      for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=1) {
        // sets the value (range from 0 to 255):
        analogWrite(led, fadeValue);      
        // wait for 30 milliseconds to see the dimming effect  
        delay(1200);                          
      }
      Serial.print(" Sunset ");
      // fade out from max to min in increments of 5 points:
      for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=1) {
        // sets the value (range from 0 to 255):
        analogWrite(led, fadeValue);      
        // wait for 30 milliseconds to see the dimming effect  
        delay(1200);                          
      }
    }



    void loop()
    {  
      clock.getTime();
      delay(60000);
      sensorValue = analogRead(sensorPin);

      // apply the calibration to the sensor reading
      sensorValue = map(sensorValue, sensorMin, sensorMax, 0, 255);

      // in case the sensor value is outside the range seen during calibration
      sensorValue = constrain(sensorValue, 0, 255);
      if(analogRead(sensorValue) == 255)
      {
        Serial.print(" LIGHT ON to 22:00 ");
        if(clock.hour == 7 && ledStatus == LED_ON)//Время включения
        {
          ledStatus = LED_OFF;//статус светодиодной дорожки
        }
        else if(clock.hour == 21 && ledStatus == LED_OFF)//время выключения
          sensorValue = analogRead(sensorPin);

        // apply the calibration to the sensor reading
        sensorValue = map(sensorValue, sensorMin, sensorMax, 0, 255);

        // in case the sensor value is outside the range seen during calibration
        sensorValue = constrain(sensorValue, 0, 255);
        if(analogRead(sensorValue) == 0)
        {
          Serial.print(" LIGHT OFF to 07:00 ");
          {
          }
        }
      }
    }


     
     
    Последнее редактирование: 13 ноя 2013
  16. Megakoteyka

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

    Прежде, чем выкладывать код на форум, нажимайте Ctrl+T в Arduino IDE либо тыкайте мышкой по пункту "Автоформатирование" в меню "Сервис" пожалуйста. Тогда Ваш код станет можно читать.
     
  17. Nikita

    Nikita Гик

    Ну что правильно написал скетч?
     
  18. Megakoteyka

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

    Опять натыкано готовых кусков без понимания того, как они работают. Откомментируйте каждую строку кода самостоятельно и сравните то, что делает код с тем, что Вы хотите от него добиться.
    Займитесь изучением синтаксиса языка, чтобы не было ляпов вроде этого:
    Код (Text):
    Serial.print(" LIGHT OFF to 07:00 ");
    {
    }
    В коде определен массив с временем компиляции, но он нигде не используется. Вместо этого при каждом включении часы устанавливаются на 19 янв 2013 15:28:30.
    С какой целью в каждом цикле программы производится задержка на минуту?
    Почему функция turnOffLed сначала зажигает, а потом сразу гасит светодиод?
    Что делает строка analogRead(sensorValue) ?
     
    Последнее редактирование: 13 ноя 2013
  19. Nikita

    Nikita Гик

    Короче я управляю самодельной лампой led в аквасе. Mассив пока в процессе вписал когда разбирался и не удалил. OffLed она нужна для плавного включения лампы типо рассвет/закат. Это занимает около часа . analogRead(sensorValue) это сканер который подтверждает включение лампы. Инфа уходит по BT ну или по шнуру юсб в комп, но потом она будет отправляться по GSM
     
    Последнее редактирование: 13 ноя 2013
  20. Nikita

    Nikita Гик

    вот всё расписал и вписал ОNLed
    Код (Text):
    /*
    Этот пример кода показывает как включать и выыключать
    какой-нибудь прибор по времени
    */
    //включаем библиотеки
    #include <Wire.h>
    #include "DS1307.h"
    int led = 9;//LED лампа
    int ledStatus = 0;//статус LED
    int LED_ON = 0;//константа
    int LED_OFF = 1;//константа
    int sensorPin = A0;//фотодиод

    // variables:
    int sensorValue = 0; //переменная sensorValue
    int sensorMin = 1023; // минемальное  sensor value
    int sensorMax = 0; // максимальное sensor value




    DS1307 clock;//определяет объект класса DS1307
    void setup()
    {

      pinMode(led, OUTPUT);
      Serial.begin(9600);// инициализация последовательной связи на скорости 9600 бит в секунду
      clock.fillByYMD(2013,1,19);//ноябрь 12,2013
      clock.fillByHMS(15,28,30);//12:46:30"
      clock.fillDayOfWeek(SAT);//суббота
      clock.begin();//Запускаем часы реального времени
      clock.setTime();//время записи на чип RTC
      Serial.println(" Connected to RTS ");//печатаем сообщение

    // Включить светодиод для сигнализации о начале периода калибровки:
      pinMode(13, OUTPUT);
      digitalWrite(13, HIGH);

      // Калибровки в течение первых пяти секунд
      while (millis() < 5000) {
        sensorValue = analogRead(sensorPin);

        //Записываем максимальное значение датчика
        if (sensorValue > sensorMax) {
          sensorMax = sensorValue;
        }

        //Записываем минимальное значение датчика
        if (sensorValue < sensorMin) {
          sensorMin = sensorValue;
        }
      }

      // Сигнал об окончании периода калибровки
      digitalWrite(13, LOW);
    }

    void turnONLed() //плавное включение Led
    {
      Serial.print(" Morning "); //печатаем сообщение

      //загорается от минимального до максимального с шагом в 1
      for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=1) {
        // устанавливает значение (в диапазоне от 0 до 255)
        analogWrite(led, fadeValue);  
        // ждать в течение 1200 миллисекунд, чтобы увидеть эффект разгорание
        delay(1200);
      }
    }

    void turnOffLed()//плавное выключение
    {
      Serial.print(" Sunset ");//печатаем сообщение

      // гаснет от максимального до минемального с шагом в 1
      for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=1) {
        //устанавливает значение (в диапазоне от 0 до 255)
        analogWrite(led, fadeValue);  
        // ждать в течение 1200 миллисекунд, чтобы увидеть эффект затухания
        delay(1200);                      
      }
    }




    void loop()
    {
      clock.getTime();  //начинаем подсчет времени
      sensorValue = analogRead(sensorPin);//читаем с датчика

      // применить калибровки показания датчика
      sensorValue = map(sensorValue, sensorMin, sensorMax, 0, 255);

      // В случае, если значение датчика выходит за пределы диапазона видели во время калибровки
      sensorValue = constrain(sensorValue, 0, 255);
      if(analogRead(sensorValue) == 255) //если analogRead(sensorValue) == 255)
      {
        //эта надпись появиться только после того как значение полученное с фоторезистора  достигнет 255
        //она выполняет функцию потверждения включения света
        Serial.print(" LIGHT ON to 22:00 ");//пишем что свет включён
        if(clock.hour == 7 && ledStatus == LED_ON)//Время включения
        {
          ledStatus = LED_OFF;//статус светодиодной дорожки
        }
        else if(clock.hour == 21 && ledStatus == LED_OFF)//время выключения
          sensorValue = analogRead(sensorPin);//считываем показания

        // применить калибровки показания датчика
        sensorValue = map(sensorValue, sensorMin, sensorMax, 0, 255);

        //В случае, если значение датчика выходит за пределы диапазона видели во время калибровки
        sensorValue = constrain(sensorValue, 0, 255);
        if(analogRead(sensorValue) == 0)//если (analogRead(sensorValue) == 0)
        {
          Serial.print(" LIGHT OFF to 07:00 ");// пишем что свет выключен
          {
          }
        }
      }
    }

     
     
    Последнее редактирование: 14 ноя 2013