1

Тема: Подскажите по freeduino.

Можно ли запрограммировать freeduino так, что бы внутри шло РЕАЛЬНОЕ ВРЕМЯ и выходы срабатывали в нужное время, на определенное уже короткое время
Ну типо чтоб таймер был такой с привязкой по времени!? ? ?

2

Re: Подскажите по freeduino.

Сам себе отвечу :)))
Где то  прочел нужно лепить отдельно микруху-часы. Видимо программно все же нельзя реализовать.
Но всеравно наверно куплю, а там погляжу!

3

Re: Подскажите по freeduino.

Конкретизируйте задачу. Внутри микроконтроллера тикает таймер, зависимый от тактовой частоты. Соответственно из него можно вычислить секунды, минуты и т.д. Т.е. чисто программно можно написать часы. Можно применять и отдельные микросхемы. Все зависит от поставленной задачи.
Примеры реализации часов и чисто программных, и с использованием специализированной микросхемы можете посмотреть на моей страничке: http://sites.google.com/a/project-ss.ru … led-shield
Вывод осуществляется на семисегментный индикатор.

С уважением,
Андрей

4

Re: Подскажите по freeduino.

Если программно можно, значит я не зря вчера купил эту платку :-)))
Задача такая:
С  21.00 по 10.00 через каждые 30минут поворачивать серву на 90градусов, а еще через 5минут возвращать ее обратно на 0градусов (пока так задумал).
Управление планируется вентиляцией помещения. Время в идеале должно меняться от температуры на улице.
Индикация вобщем ненужна.

Подскажи пожалуйста где еще можно накачать себе готовых проектов? ? ?  Ибо по ним учится языку еще буду :-)))

5

Re: Подскажите по freeduino.

igvv пишет:

Если программно можно, значит я не зря вчера купил эту платку :-)))
Задача такая:
С  21.00 по 10.00 через каждые 30минут поворачивать серву на 90градусов, а еще через 5минут возвращать ее обратно на 0градусов (пока так задумал).
Управление планируется вентиляцией помещения. Время в идеале должно меняться от температуры на улице.
Индикация вобщем ненужна.

Подскажи пожалуйста где еще можно накачать себе готовых проектов? ? ?  Ибо по ним учится языку еще буду :-)))

А не проще ли подключить к Freeduino пару датчиков температуры, вывести один наружу, второй в помещение и управлять заслонкой в зависимости от температуры?
Потом можно добавить в устройство ЖК-дисплей и несколько кнопок, сделать возможность задавать по ходу работы параметры регулирования...

Полезные ссылки:
http://rln.nnov.ru/index.php?pid=13/
http://habrahabr.ru/blogs/arduino/
http://www.robocraft.ru/blog/arduino/
http://www.arduino.cc/playground/

С уважением,
Андрей

6

Re: Подскажите по freeduino.

Спасибо за помощь Андрей!!!
Полез я изучать!

7 (2011-02-03 20:15:31 отредактировано igvv)

Re: Подскажите по freeduino.

Anwi пишет:

Потом можно добавить в устройство ЖК-дисплей и несколько кнопок, сделать возможность задавать по ходу работы параметры регулировани...

"Дорос таки" до необходимости регулировки сего процесса, но программировать так и не научился.
Экран купил на тестовых скетчах работает.
Со схемой монта
жа вроде проблем не вижу, а вот совместить в голове скетчи экрана, кнопок ввода и сервы УВЫ ПОКА НЕ  В СИЛАХ :)
Вопрос такой --->чем лучше(команду) задавать интервалы времени для сервы чтоб в любой момент времени можно было вводить-менять данные.   Delay(1234...) как я понимаю уже не прокатит!???

8

Re: Подскажите по freeduino.

igvv пишет:

Со схемой монтажа вроде проблем не вижу, а вот совместить в голове скетчи экрана, кнопок ввода и сервы УВЫ ПОКА НЕ  В СИЛАХ :)
Вопрос такой --->чем лучше(команду) задавать интервалы времени для сервы чтоб в любой момент времени можно было вводить-менять данные.   Delay(1234...) как я понимаю уже не прокатит!???

Для начала продумайте алгоритм будущей программы. Обычно в начале идет инициализация и установка исходных значений, а затем основной бесконечный цикл.
В цикле Вам надо реализовать опрос кнопок, вывод на дисплей, управление сервой и т.д.
Я бы оформил эти задачи в виде функций, а в основном цикле останется только перебрать получившиеся функции. При этом очень удобно отладить сначала каждую функцию отдельно.
Delay для относительно больших пауз не прокатит. Задержки можно вычислять при помощи millis.
В качестве примера можете посмотреть программу часов на моей страничке http://sites.google.com/a/project-ss.ru … led-shield

С уважением,
Андрей

9

Re: Подскажите по freeduino.

установи gps приёмник.... и корректируй относительно UTС зная координаты.... и всё......

а чтоб получить время с приёмника достаточно чтоб он поймал хотябы ОДИН спутник.... и никакого гемора....

10

Re: Подскажите по freeduino.

Подскажите пожалуйста программу, которая бы увезала часы реального времени собраные на DS 1307 с  freeduino, и так же, чтобы подавались команды на управлениями нескольлими нагрузками с  freeduino. Например от 3 до 6 каналов управления в разное время суток.

11

Re: Подскажите по freeduino.

Научился аналоговому вводу, выводу на экранчик, совместил, все работает.
НО есть проблемка:
millis()
раз запустив начинает считать время, а как  мне его остановить и начать с начала(в определенном месте), С НУЛЯ????
И возможно ли это вообще???
Пробовал millis() = 0    но что-то как-то  не вышло. Как правильно это сделать????

12 (2011-04-02 17:39:35 отредактировано igvv)

Re: Подскажите по freeduino.

Вот пример (пробный на светодиодах, в дальнейшем буду усложнять под серву). проблема в том, что цикл не повторяется из-за того что значение  millis() уходит дальше моих пределов.
Потенцеометр №0 задает время(0-60) до момента включения светодиода
Потенцеометр №1 задает время (0-60) до отключения светодиода
все это работает только один раз.
Подскажите пожалуйста как тут быть? ? ?

#include <LiquidCrystal.h>

    LiquidCrystal lcd(12, 11, 2, 3, 4, 5) ;
   
    int ledPin13 = 13;
    int value = LOW;  // 
    int sensorPin = 0;    //
    int sensorPin1 = 1;   //
   
    void setup() {
        lcd.begin(16, 2);
    }
    void loop() {
       
        if (millis() / 1000 > analogRead(sensorPin) / 17) {
            if (value == LOW)
                value = HIGH;
            digitalWrite(ledPin13, value);   
        }
        if (millis() / 1000 > analogRead(sensorPin) / 17 + analogRead(sensorPin1) / 17 )  {
            if (value == HIGH)
                value = LOW;
            digitalWrite(ledPin13, value);       
        }
       
        lcd.setCursor(0, 0); //
        lcd.print(analogRead(sensorPin) / 17); //
        lcd.print(" sec OPEN    ");  //
       
        lcd.setCursor(0, 1);   //
        lcd.print(analogRead(sensorPin1) / 17);       //
        lcd.print(" sec CLOSED");     //
    }   
}

13

Re: Подскажите по freeduino.

А вот второй вариант(тоже на светодиоде) но с переменной.
тут проблема в том, что потенциометры зависимы друг от друга, второй потенциометр настроить не удалось(выделил черным)!!!
Вот такой я горесофтостроитель :)))
Вообщем если это не сложно направьте на путь истинный, ПОЖАЛУЙСТА! ! !

#include <LiquidCrystal.h>

    LiquidCrystal lcd(12, 11, 2, 3, 4, 5) ;
   
    int ledPin = 13;
    int value = LOW;  // 
    int sensor0 = 0;    //
    int sensor1 = 1;   //
    long previousMillis = 0;
    long previousMillis1 = 0;
    long interval0 = 1000;
    long interval1 = 1000;
   
    void setup() {
        lcd.begin(16, 2);
        pinMode(ledPin, OUTPUT);
    }
    void loop() {
            interval0 = analogRead(sensor0) * 10;
            interval1 = analogRead(sensor1) * 10;
        if (millis() - previousMillis >= interval0) {
            previousMillis = millis();
            if (value == LOW)
                value = HIGH;
        //    else
        //        value = LOW;

            digitalWrite(ledPin, value);
             
        }
        if (millis() >= previousMillis + interval1) {
            previousMillis1 = previousMillis + interval1;

            if (value == HIGH)
                value = LOW;
            // else
            //    value = HIGH;

            digitalWrite(ledPin, value);
        }
        lcd.setCursor(0, 0); //
        lcd.print(previousMillis); //
       
        lcd.setCursor(0, 1);   //
        lcd.print(previousMillis1);       //
    }       
}

14

Re: Подскажите по freeduino.

Вот сочинил сам. Работает без нареканий. (дальше раз плюнуть уже)
int ledPin = 13;
int sens0 = 0;
int sens1 = 1;
long previousMillis = 0;

void setup(){
pinMode(ledPin, OUTPUT);
}

void loop(){
  while ((millis() < analogRead(sens0)) || (millis() < previousMillis + analogRead(sens0))) {
  digitalWrite(ledPin,HIGH);
  }
  previousMillis = millis();
 
  while (millis() < previousMillis + analogRead(sens1)){
  digitalWrite(ledPin,LOW);
  }
   previousMillis = millis();
}