Страница 10 из 19 ПерваяПервая ... 45678910111213141516 ... ПоследняяПоследняя
Показано с 91 по 100 из 184
  1. #91
    Ломастер Аватар для basurman971
    Регистрация
    13.02.2011
    Возраст
    52
    Сообщений
    396
    Вес репутации
    322

    По умолчанию Re: Замена ручного управления печкой

    SBorovkov
    Да не люблю людей озадачивать всякой фигней.А тут приспичило ну никак сам.Обычно и так все всегда доступно(не считая писания и главное понимания МК).

  2. #92
    Ломастер Аватар для basurman971
    Регистрация
    13.02.2011
    Возраст
    52
    Сообщений
    396
    Вес репутации
    322

    По умолчанию Re: Замена ручного управления печкой

    Н-да просто вставить не получилось.Бился-бился плюнул,ардуина ругается,как злая собака.Попытаюсь позже,сил уже нет.
    Миниатюры Миниатюры Нажмите на изображение для увеличения. 

Название:	Снимок.JPG 
Просмотров:	919 
Размер:	61.4 Кб 
ID:	14210  
    Последний раз редактировалось basurman971; 03.04.2012 в 03:03.

  3. #93
    Модератор
    Регистрация
    06.07.2008
    Возраст
    46
    Сообщений
    414
    Вес репутации
    441

    По умолчанию Re: Замена ручного управления печкой

    Забыл # перед дефайном. В остальном вроде все правильно.
    Проект ниже компиляется в среде arduino

    Код:
    #define m3_l  43 //третий влево(заслонка горячий-холодный) 
    #define m3_r  44 //третий вправо(заслонка горячий-холодный) 
    
    #define var 7 //АЦП третьего мотора 
    
    int temp_s=17; 
    
    #define DeltaConst 3
    int16_t vars[16]={132,144,162,206,275,342,396,451,506,561,620,685,760,805,856,896};
    
      
    void setup(void) 
    { 
    } 
    
    void loop(void) 
    {  
      int8_t TempIndex=(temp_s-10)/2;//при temp_s=10 на выходе 0, при temp_s=40 на выходе 15, конец массива, что и требуется.
      int16_t var_n=vars[TempIndex]; // получили var_n
    
      int16_t CurrentInput=5; //получили положение 
    
      if (CurrentInput<var_n+DeltaConst)
        digitalWrite(m3_r,HIGH);
      else
        digitalWrite(m3_r,LOW);
      if (CurrentInput>var_n-DeltaConst)
        digitalWrite(m3_l,HIGH);
      else
        digitalWrite(m3_l,LOW);
      
    }

  4. #94
    Ломастер Аватар для basurman971
    Регистрация
    13.02.2011
    Возраст
    52
    Сообщений
    396
    Вес репутации
    322

    По умолчанию Re: Замена ручного управления печкой

    О супер, эта работает,вечером залью.Спасибо за помощь.

  5. #95
    Ломастер Аватар для basurman971
    Регистрация
    13.02.2011
    Возраст
    52
    Сообщений
    396
    Вес репутации
    322

    По умолчанию Re: Замена ручного управления печкой

    Что то никак не выходит аленький цветочек.
    PHP код:
    #include <OneWire.h>
    #include <DallasTemperature.h>
    #include <EEPROM.h>
    #include <ks0108.h>

    #include "ks0108_Mega.h"  // include this for the Arduino Mega other ATmega1280 boards
    #include "SystemFont5x7.h"//шрифт 5х7 
    #include "legs1.h"//значек(воздух вниз)
    #include "both1.h"//значек(воздух вверх-вниз)
    #include "screen1.h"//значек(воздух вверх)
    #include "side1.h"//значек (воздух вперед)
    #include "DS1.h"//шрифт крупный(температура)
    int address 0;

    #define ONE_WIRE_BUS 50 //датчики на 50 ноге
    #define TEMPERATURE_PRECISION 9

    OneWire oneWire(ONE_WIRE_BUS);
    DallasTemperature sensors(&oneWire);

    uint8_t  Thermometer2[8], Thermometer3[8];//адреса датчиков
    float  temp2temp3;// t2 - улица, t3-салон
    byte bytes[8];
    int err2err3;
    int error=0;
    int vent_set=2;

    #define m1_l  39 //первый влево (ноги)
    #define m1_r  40 //первый вправо (ноги)
    #define m2_l  41 //второй влево (боковые)
    #define m2_r  42 //второй вправо(стекло)
    #define m3_l  43 //третий влево(заслонка горячий-холодный)
    #define m3_r  44 //третий вправо(заслонка горячий-холодный)
    #define enl  38 //enable
    #define JOY 1 //АЦП джойстик
    #define val2 5 //АЦП второго мотора
    #define val1 6 //АЦП первого мотора
    #define var 7 //АЦП третьего мотора
    #define DeltaConst 7
    int16_t vars[16]={132,144,162,206,275,342,396,451,506,561,620,685,760,805,856,896};
    #define vent 31 //ШИМ вентилятора


    int res_dt1;//джойстик
    int motor1motor2motor3;//АЦП приводов
    int min_2 185//боковые
    int max_2 450//стекло
    int centr_1 310//среднее первый
    int min_1 310//ноги
    int max_1 490//ноги закрыто
    int centr_2 370//среднее второй
    int vent_s=3;
    int vent_speed=3;
    int t=5f=0;
    int flow=5;
    int temp_s=17;
    unsigned long time;


    void setup(void)
    {
      
    pinMode(m1_l,OUTPUT); 
      
    pinMode(m1_r,OUTPUT);
      
    pinMode(m2_l,OUTPUT); 
      
    pinMode(m2_r,OUTPUT);
      
    pinMode(m3_l,OUTPUT);
      
    pinMode(m3_r,OUTPUT);
      
    pinMode(enl,OUTPUT);
      
    pinMode(vent,OUTPUT);
      
    digitalWrite(m1_l,LOW);
      
    digitalWrite(m1_r,LOW);
      
    digitalWrite(m2_l,LOW);
      
    digitalWrite(m2_r,LOW);
      
    digitalWrite(m3_l,LOW);
      
    digitalWrite(m3_r,LOW);
      
    digitalWrite(enl,HIGH);
      
    digitalWrite(vent,LOW );
      
    sensors.begin();
      
    Serial.begin(115200);
      
    TCCR2B TCCR2B 0b11111000 0x04;

      
    //devices=sensors.getDeviceCount();//считаем сколько датчиков подключено  
      
    if (!sensors.getAddress(Thermometer22)) err2=1;//ошибка. нет датчика 2 - улица
      
    if (!sensors.getAddress(Thermometer33)) err3=1;//ошибка. нет датчика 3 - салон

      
    sensors.setResolution(Thermometer29);
      
    sensors.setResolution(Thermometer39);

      
    GLCD.Init(NON_INVERTED);   // initialise the library, non inverted writes pixels onto a clear screen
      
    GLCD.ClearScreen(); 

      
    GLCD.SelectFont(System5x7);
      
    GLCD.CursorTo(0,5);
      
    GLCD.Puts("OUTSIDE:");
      
    GLCD.CursorTo(0,6);
      
    GLCD.Puts("VENT SPEED:");

      
    /*
      if(analogRead(val1) > max_1-10 && analogRead(val2) < min_2+10) flow=2;
       if(analogRead(val1) > max_1-10 && analogRead(val2) > max_2-10) flow=0;
       if(analogRead(val1) > min_1-10 && analogRead(val1) < min_1+10) flow=1; 
        */

      
    temp_s EEPROM.read(address);//читаем заданую температуру из еепром
      
    bytes[0] = 0xFF
      
    bytes[1] = temp_s;
      
    bytes[2] = flow;
      
    bytes[3] = 0;
      
    Serial.writebytes,4);//отправляем ее в комп
      //Serial.println(analogRead(var)); 
    }

    void loop(void)

       
    res_dt1 analogRead(JOY); // прочитать данные АЦП
       
    buttons();
       
    motor1 analogRead(val1); // прочитать данные АЦП 
       
    motor2 analogRead(val2); // прочитать данные АЦП
       
    motor3 analogRead(var); // прочитать данные АЦП 
       
      
      
    byte ab;
      if (
    Serial.available() > 1)
       { 
        
    Serial.read();  
        
    Serial.read();
        if(
    a==0x64)temp_s=b;
        if(
    a==0xFF)f=b;
        if(
    a==0x78)vent_s=b*10;
      }

      
    analogWrite(ventvent_s);//вентилятор
      
    if ((millis()-time)>500 && res_dt1 == 1023//запуск процедур по таймеру
      
    {    
        
    time millis();
        
    termometer();
      }
      
    motors();
      
    lcd(); 
      
    vent_speed=vent_s/17
    }

    void termometer()
    {
      
    int m0m1m;
      
    sensors.requestTemperatures();
      
    temp2 sensors.getTempC(Thermometer2);
      
    temp3 sensors.getTempC(Thermometer3);

      if(
    temp3<0)
      {
        
    m0=1;
        
    temp3=-temp3;
      }
      else 
    m0=0;

      if(
    temp2<0)
      {
        
    m1=1;
        
    temp2=-temp2;
      }
      else 
    m1=0;

      
    m=m0*10+m1;

      
    bytes[0] = 0x64//префикс
      
    bytes[1] = temp3//салон
      
    bytes[2] = m;
      
    bytes[3] = temp2//улица
      
    Serial.writebytes,4);
    }
     
     
    void motors()
    {
      if(
    temp_s)//
      
    {
      
    int8_t TempIndex=(temp_s-10)/2;//при temp_s=10 на выходе 0, при temp_s=40 на выходе 15.
      
    int16_t var_n=vars[TempIndex]; // получили var_n

      
    int16_t CurrentInput=5//получили положение 

      
    if (CurrentInput<var_n+DeltaConst)
        
    digitalWrite(m3_r,HIGH);
      else
        
    digitalWrite(m3_r,LOW);
      if (
    CurrentInput>var_n-DeltaConst)
        
    digitalWrite(m3_l,HIGH);
      else
        
    digitalWrite(m3_l,LOW);
      }
      
      if(
    flow==0)//стекло
      
    {
        if (
    analogRead(val2)<max_2)digitalWrite(m2_r,HIGH);
        else 
    digitalWrite(m2_r,LOW);
        if (
    analogRead(val1)<max_1)digitalWrite(m1_l,HIGH);
        else 
    digitalWrite(m1_l,LOW);
        
      }

      if(
    flow==1)//в ноги
      
    {
        if (
    analogRead(val1)>min_1)digitalWrite(m1_r,HIGH);
        else 
    digitalWrite(m1_r,LOW);
      }
      if(
    flow==2)//боковые
      
    {
        if (
    analogRead(val2)>min_2)digitalWrite(m2_l,HIGH);
        else 
    digitalWrite(m2_l,LOW);
        if (
    analogRead(val1)<max_1)digitalWrite(m1_l,HIGH);
        else 
    digitalWrite(m1_l,LOW);
      }
      if(
    flow==3)//стекло и ноги 
      
    {
        if (
    analogRead(val2)<max_2)digitalWrite(m2_r,HIGH);
        else 
    digitalWrite(m2_r,LOW);
        if (
    analogRead(val1)>min_1)digitalWrite(m1_r,HIGH);
        else 
    digitalWrite(m1_r,LOW);
      }
     
    }

    void buttons()
    {
      if(
    res_dt1>=715 && res_dt1<=725)//temp_s++. кнопка VOL UP
      
    {
        if(
    temp_s<38)
        {
         
    temp_s=temp_s+2;
          
    delay(30);
        }
        
    bytes[0] = 0x5A//префикс
        
    bytes[1] = temp_s;
        
    bytes[2] = 0;
        
    bytes[3] = 0
        
    Serial.writebytes,4);
        
    delay(150);
       }
       
      if(
    res_dt1>=635 && res_dt1<=645)//temp_s--. кнопка VOL DOWN
      
    {  
         if(
    temp_s>12)
        {
         
    temp_s=temp_s-2;
         
    delay(30);
        }
        
    bytes[0] = 0x5A//префикс
        
    bytes[1] = temp_s;
        
    bytes[2] = 0;
        
    bytes[3] = 0
        
    Serial.writebytes,4);
        
    delay(150);
      }
      
      if(
    res_dt1>=176 && res_dt1<=186)//кнопка SOURCE
      
    {
        
    EEPROM.write(addresstemp_s);//пишем в еепром temp_set
        
    delay(500);
      }

      if(
    res_dt1>=556 && res_dt1<=566)//vent_s ++. кнопка TRACK UP
      
    {
        
    vent_s=vent_s+10;
        
    delay(30);
        if(
    vent_s 250)vent_s=255;
        
    bytes[0] = 0xC8//префикс
        
    bytes[1] = vent_s/10;
        
    bytes[2] = 0;
        
    bytes[3] = 0;
        
    Serial.writebytes,4);
        
    delay(80);
      }

      if(
    res_dt1>=475 && res_dt1<=485)//vent_s --. кнопка TRACK DOWN
      
    {
        
    vent_s=vent_s-10;
        
    delay(30);
        if(
    vent_s <=0)vent_s=0;
        
    bytes[0] = 0xC8//префикс
        
    bytes[1] = vent_s/10;
        
    bytes[2] = 0;
        
    bytes[3] = 0;
        
    Serial.writebytes,4);
        
    delay(80);
      }

      if((
    res_dt1>=843 && res_dt1<=853) || f==0)// на стекло. кнопка MODE
      
    {
        
    flow=0;
        
    f=5;
        
    bytes[0] = 0x4B;
        
    bytes[1] = flow;
        
    bytes[2] = 0;
        
    bytes[3] = 0
        
    Serial.writebytes,4);
        
    delay(80);
      }

      if((
    res_dt1>=401 && res_dt1<=411) || f==1)//в ноги. кнопка FILE
      
    {
        
    flow=1;
        
    f=5;
        
    bytes[0] = 0x4B;
        
    bytes[1] = flow;
        
    bytes[2] = 0;
        
    bytes[3] = 0
        
    Serial.writebytes,4);
        
    delay(80);
      }

      if((
    res_dt1>=784 && res_dt1<=794) || f==2)//боковые. кнопка SEL
      
    {
        
    flow=2;
        
    f=5;
        
    bytes[0] = 0x4B;
        
    bytes[1] = flow;
        
    bytes[2] = 0;
        
    bytes[3] = 0
        
    Serial.writebytes,4);
        
    delay(80);
      }

      if((
    res_dt1>=307 && res_dt1<=327) || f==3)//на стекло и в ноги. кнопка ATT
      
    {
        
    flow=3;
        
    f=5;
        
    bytes[0] = 0x4B;
        
    bytes[1] = flow
        
    bytes[2] = 0;
        
    bytes[3] = 0;
        
    Serial.writebytes,4);
        
    delay(80);
      }
    }

    void lcd()
    {

      
    GLCD.SelectFont(DS);
      
    GLCD.CursorTo(0,0);
      
    GLCD.PrintNumber(temp3);
      
    GLCD.Puts("/  ");
      if(
    temp_s>=10)GLCD.CursorTo(5,0);
      else 
    GLCD.CursorTo(6,0);
      
    GLCD.PrintNumber(temp_s);
      
    GLCD.Puts("/");
      
    GLCD.SelectFont(System5x7);
      
    GLCD.CursorTo(8,5);
      
    GLCD.PrintNumber(temp2);
      
    GLCD.Puts(" C");

      
    int i=0;
      for(
    i=0;i<vent_speed;i++)
      {
        
    GLCD.CursorTo(i,7);
        
    GLCD.Puts("0");
      }
      
    int j=0;
      for(
    j=vent_speed;j<15;j++)
      {
        
    GLCD.CursorTo(j,7);
        
    GLCD.Puts(" ");
      }

      if(
    flow==0)GLCD.DrawBitmap(screen96,32BLACK);
      if(
    flow==1)GLCD.DrawBitmap(legs96,32BLACK);
      if(
    flow==2)GLCD.DrawBitmap(side96,32BLACK);
      if(
    flow==3)GLCD.DrawBitmap(both96,32BLACK); 

    Странно.Мотор уходит на макс и не реагирует.
    Последний раз редактировалось basurman971; 04.04.2012 в 01:41.

  6. #96
    Продвинутый
    Регистрация
    15.12.2008
    Возраст
    38
    Сообщений
    229
    Вес репутации
    397

    По умолчанию Re: Замена ручного управления печкой

    Current input замени на motor3 или analogwrite(var).
    Сейчас получается, что Current input=5, т.е. всегда меньше, чем любое значение var_n. Поэтому постоянно выполняется if (CurrentInput<var_n+DeltaConst) и, соответственно, digitalWrite(m3_r,HIGH);

  7. #97
    Модератор
    Регистрация
    06.07.2008
    Возраст
    46
    Сообщений
    414
    Вес репутации
    441

    По умолчанию Re: Замена ручного управления печкой

    чорт!
    есесно вместо

    int16_t CurrentInput=5; //получили положение
    надо
    int16_t CurrentInput=analogRead(var); //получили положение

    Звиняй, невнимательность - мой конек! :-)

  8. #98
    Ломастер Аватар для basurman971
    Регистрация
    13.02.2011
    Возраст
    52
    Сообщений
    396
    Вес репутации
    322

    Сообщение Re: Замена ручного управления печкой

    О,все работает, прикольно, только мотор в некоторых положениях дергается.Нда видимо не всегда правильно когда подсказывают,хотя сам
    я бы никаких массивов не написал.
    Сам попробую разобраться,а то вы так и будете за меня думать.
    Подскажите если можно что это значит:
    PHP код:
    #define DeltaConst 3-----?
    int16_t vars[16]={132,144,162,206,275,342,396,451,506,561,620,685,760,805,856,896};
    #define vent 31 //ШИМ вентилятора


    int res_dt1;//джойстик
    int motor1motor2motor3;//АЦП приводов
    int min_2 185//боковые
    int max_2 450//стекло
    int centr_1 310//среднее первый
    int min_1 310//ноги
    int max_1 490//ноги закрыто
    int centr_2 370//среднее второй
    int vent_s=3;-----------?
    int vent_speed=3;-------?
    int t=5f=0;  ---?
    int flow=5;     ---?
    int temp_s=17;---?
    unsigned long time;

     
    sensors.setResolution(Thermometer29);-?
      
    sensors.setResolution(Thermometer39);---?

     
    /*
      if(analogRead(val1) > max_1-10 && analogRead(val2) < min_2+10) flow=2;
       if(analogRead(val1) > max_1-10 && analogRead(val2) > max_2-10) flow=0;
       if(analogRead(val1) > min_1-10 && analogRead(val1) < min_1+10) flow=1; 
        */ 
    как это закоментировано--?


      
    analogWrite(ventvent_s);//вентилятор ---что это значит?
      
    if ((millis()-time)>500 && res_dt1 == 1023//запуск процедур по таймеру
      
    {    
        
    time millis();
        
    termometer();
      }
      
    motors();
      
    lcd(); 
      
    vent_speed=vent_s/17
    }

    void termometer()
    {
      
    int m0m1m;                  --    ?
      
    sensors.requestTemperatures(); ---  ?
      
    temp2 sensors.getTempC(Thermometer2);
      
    temp3 sensors.getTempC(Thermometer3);

      if(
    temp3<0)----------?
      {
        
    m0=1;
        
    temp3=-temp3;
      }
      else 
    m0=0;

      if(
    temp2<0)
      {
        
    m1=1;
        
    temp2=-temp2;
      }
      else 
    m1=0;

      
    m=m0*10+m1
    Заранее спасибо.
    Последний раз редактировалось basurman971; 04.04.2012 в 21:52.

  9. #99
    Ломастер Аватар для basurman971
    Регистрация
    13.02.2011
    Возраст
    52
    Сообщений
    396
    Вес репутации
    322

    По умолчанию Re: Замена ручного управления печкой

    И еще вопрос по лсд.
    И гуглил,и яндексил но про лсд только для уже продвинутых пользователей.А для чайников ничего не нашел.Может подскажете,где почитать, а то боюсь эта ветка на войну и мир станет похожа,если я буду столько вопросов задавать.

  10. #100
    Продвинутый
    Регистрация
    15.12.2008
    Возраст
    38
    Сообщений
    229
    Вес репутации
    397

    По умолчанию Re: Замена ручного управления печкой

    1. #define DeltaConst 3 установлен диапазон значений для АЦП
    2. int vent_s;
    int vent_speed; одна переменная для вывода в ШИМ вентилятора, вторая для передачи значения. для экономии можно объявить char вместо int. (char 1 бат от 0 до 255, int 2 байта).
    3. int flow=5; направление потока воздуха. тоже по идее должно было быть char
    4. int temp_s=17; установленная температура. 17 для отладки. потом необходимое значение запоминается в еепром.
    5.
    sensors.setResolution(Thermometer2, 9);
    sensors.setResolution(Thermometer3, 9); настройка дачтиков.
    6.
    /*
    if(analogRead(val1) > max_1-10 && analogRead(val2) < min_2+10) flow=2;
    if(analogRead(val1) > max_1-10 && analogRead(val2) > max_2-10) flow=0;
    if(analogRead(val1) > min_1-10 && analogRead(val1) < min_1+10) flow=1;
    */ закомментировано /**/ позволяет определить направление потока воздуха при старте для последующей отправки в карПС, если нужна такая функция.
    7.
    analogWrite(vent, vent_s); ШИМ вентилятора отопителя.
    8.
    int m0, m1, m; для передачи отрицательной температуры. в зависимости от софта на компьютере лучше иначе. temp+40 например.
    9. sensors.requestTemperatures(); функция чтения температуры с датчиков

    По lcd вот например http://robocraft.ru/blog/821.html
    А сейчас на ЖК что-нибудь выводится? Что-то не получается у меня запустить ЖК в эмуляции на ардуино-мега. Причем на ардуино нано все работает.

Страница 10 из 19 ПерваяПервая ... 45678910111213141516 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •