#1 Re: Програмування Arduino » Нужна подсказка о том как прописать длительность исполнения функции » 2015-05-28 21:34:04

почитайте вот здесь про многозадачность, мне помогло...http://robotosha.ru/arduino/multi-tasking-arduino.html

#2 Re: Проекти » сравнение принятого звука с записанным ранее. » 2015-05-25 13:36:35

задача расплывчатая, сформулировали бы поточнее... а вообще есть такая контора ЦРТ  в Питере находиться, у них очень серьезные наработки по анализу звука.Они занимаются    системами шумоочистки для субъектов ОРД и не только...

#3 Re: Апаратні питання » сенсорные кнопки и ардуино » 2015-05-22 23:54:03

AT42QT1070 и еще как вариант,  кстати на этом чипе есть готовые  шилды, правда   в моем случае буду травить плату.

#4 Re: Апаратні питання » сенсорные кнопки и ардуино » 2015-05-22 22:45:24

поглядываю на http://www.atmel.com/devices/AT42QT1040.aspx , мне как раз нужен контролер на три кнопки.. только там интерфейс какой то особенный "pin-per-key ", сейчас буду разбираться что за зверь, у атмел есть еще AT42QT1010, но он поддерживает только одну кнопку , не хочется городить огород с трех микрух. народ кто сталкивался с похожими ? хотелось бы узнать ваше мнение...

#5 Апаратні питання » сенсорные кнопки и ардуино » 2015-05-22 14:10:44

cako79
відповідей: 4

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

#6 Re: Програмування Arduino » управление сервоприводом нужен ваш совет. » 2015-05-17 21:16:49

если брать не из дешевых, и если он включается  пару раз за день, то почему и нет?)

#7 Re: Програмування Arduino » управление сервоприводом нужен ваш совет. » 2015-05-16 17:48:17

кстати насчет функции millis, насколько я понял у ее есть предел примерно  50 дней. потом счет переполняться. Как быть  что бы устройство работало допустим около года?

#8 Re: Програмування Arduino » управление сервоприводом нужен ваш совет. » 2015-05-11 13:48:41

спасибо огромное. я так понял  используя функцию  millis() , мне понадобиться переписывать весь код.. sad  Буду разбираться

#9 Re: Програмування Arduino » управление сервоприводом нужен ваш совет. » 2015-05-11 00:55:32

питание сервы отдельной линией идет... а насчет дребезга я кнопки подключал через  подтягивающий резистор номиналом 10к. А каким образом от делеев  можно уйти?

#10 Програмування Arduino » управление сервоприводом нужен ваш совет. » 2015-05-10 22:32:39

cako79
відповідей: 16

Добрый день форумчане, нужна ваша объективная оценка кода,это мой первый код.
Суть кода в следующем , есть три режима управление сервоприводом:1 режим это изменение положения сервы кнопками,2 режим это изменения положения сервы от реле(реле разомкнуто одно положение сервы, при замкнутых контактах серва переходит в другое положение. 3 режим управление удаленно) код работает ,но коряво..(1. пока не переключишь все режимы, серва плохо отзывается на нажатие кнопок 2. есть дрожание сервы в крайних положениях)Пока на железку не переносил, делал симуляцию в программе Proteus 7.Буду рад дельным советам.



#include <Servo.h> 


int angle = 0;          //Текущий угол поворота (при запуске программы будет автоматический вставать в указаное положение)
int maxAngle = 170;      //Максимальный угол поворота сервомотора (градусов)
int minAngle = 10;        //Минимальный угол поворота сервомотора (градусов)
int angleStep = 2;       //Угол единичного шага (градусов)
int stepSpeed = 15;      //Скорость шага (скорость поворота)(задержка шага
int valM; //переменная для блютуза подпрограммы

int ButPinR = 7; // Подключаем реле входа  к выходу 7

int R_LedPin = 13; // Подключаем красный светодиод к порту 13
int G_LedPin = 12; // Подключаем зеленый светодиод к порту 12
int B_LedPin = 11; // Подключаем синий светодиод к порту 11
int ButPin = 10; // Подключаем кнопку управление режимами  к выходу 10
int L  = 5; // Подключаем кнопку  управление сервой вверх к выходу 5
int R  = 4; // Подключаем кнопку к управлению сервой вниз к выходу 4
int flag = 0; // флаг состояния
int regim = 0; // Переключалка

int valL = 0;            //Переменная вверх кнопки
int valR = 0;            //Переменная вниз кнопки

Servo servoMain;   // название сервомашины
int servoPin = 3;   // сервомотор подключен на пин 3

void setup()
{
Serial.begin(9600);
servoMain.attach(3);
servoMain.write(90); // выставляем начальный угол сервы
pinMode(L,INPUT);        //Цифровой PIN 2 входной сигнал для кнопки "Влево"
pinMode(R,INPUT);        //Цифровой PIN 3 входной сигнал для кнопки "Вправо"
pinMode(R_LedPin, OUTPUT);
pinMode(G_LedPin, OUTPUT);
pinMode(B_LedPin, OUTPUT);
pinMode(ButPinR,INPUT);        // реле
}

void loop()
{
if(digitalRead(ButPin) == HIGH && flag == 0)
{
regim ++;
flag = 1;

if(regim > 3) // Если номер режима превышает требуемого
{ // то отсчет начинается с нуля
regim = 1;
}
}

if(digitalRead(ButPin) == LOW && flag == 1)
{
flag = 0;
}

// ======= Вполняем задачу при выборе режима =======

// РЕЖИМ 1: R                                     // РЕЖИМ УПРАВЛЕНИЕ СЕРВЫ кнопками
if(regim == 1)
{
digitalWrite(R_LedPin, HIGH);
digitalWrite(G_LedPin, LOW);
digitalWrite(B_LedPin, LOW);


{
valR=digitalRead(L);      //Читает и запоминает положение левой кнопки
valL=digitalRead(R);      //Читает и запоминает положение правой кнопки

if((valL==HIGH)&&(valR==LOW))       //Если левая кнопка нажата а правая нет тогда:
{angle=angle+angleStep;             //тогда угол поворота сервомотора меняется по шагово на величину шага (то есть движется  влево по 2 градуса до максималтного угла 180 градусов)
if(angle>maxAngle)                  //Если угол поворота достиг максимального равного 180 градусам,тогда:
{angle=maxAngle;} 
                //он остается равным максимальному
}



if((valL==LOW)&&(valR==HIGH))       //Все тоже самое как для предыдущей функции но с !инверсией
{angle=angle-angleStep;             //
if(angle<minAngle)                  //
{angle=minAngle;} 
                   //
}

{servoMain.write(angle);
delay(stepSpeed);}                 //Скорость шагов (задержки шагов)


}
}
// РЕЖИМ 2: G
if(regim == 2)                           // РЕЖИМ УПРАВЛЕНИЕ СЕРВЫ ОТ  РЕЛЕ
{
digitalWrite(R_LedPin, LOW);
digitalWrite(G_LedPin, HIGH);
digitalWrite(B_LedPin, LOW);




     if(digitalRead(ButPinR)==HIGH)//если контакты реле  замкнуты ...

     {
        servoMain.write(5);
     }

     else//если не замкнуты...

     {

     servoMain.write(90);
         delay(500);
     }}

      

    


// РЕЖИМ 3: B                          // РЕЖИМ УПРАВЛЕНИЕ СЕРВЫ ПО COM-порту         
if(regim == 3)
{digitalWrite(R_LedPin, LOW);
digitalWrite(G_LedPin, LOW);
digitalWrite(B_LedPin, HIGH);
if (Serial.available())
{
valM = Serial.read();

if (valM == 'W')
{
  servoMain.write(5),Serial.println("серва w "); // При символе "W" серва принимает нулевую позицию
}

if ( valM == 'S')
{
  servoMain.write(170),Serial.println("серва s "); //При символе "S" серва принимает 90 градусов позицию
delay(250);
}

}

}}

Підвал форуму