arduino uno и nano

Тема в разделе "Arduino & Shields", создана пользователем Сергей Р, 30 мар 2018.

  1. NikitOS

    NikitOS Король шутов Администратор

    Я имел ввиду на уровне программирования. Т.е о том что программа для Uno идет без правки для Nano
     
  2. parovoZZ

    parovoZZ Гуру

    И не можешь освоить язык Си с булевой алгеброй?
     
  3. parovoZZ

    parovoZZ Гуру

    Да у него всё работает!!! Как ты этого не понимаешь!!!!!
     
  4. NikitOS

    NikitOS Король шутов Администратор

    Ну зачем-же так...
     
    Arduino.ru нравится это.
  5. ostrov

    ostrov Гуру

    Что вы там курите, блин.
     
  6. blink работает как надо.
     
  7. DetSimen

    DetSimen Guest

    да замени уже в loop() pinMode На digitalWrite, чудо.
     
    citRUS_oleg и ostrov нравится это.
  8. Алгоритм работы такой и он меня полностью устраивает:

    Пин 4 замыкаем с "+5в" светодиод не горит , передатчик передаёт радио пакет - прибор откл.

    Пин 4 размыкаем от "+5в" светодиод горит , передатчик передаёт радио пакет - прибор вкл.



    Если скетч без флагов , то прибор включается через раз, т.е. замкнул отпустил пин 4 от "5в" - прибор на приёмнике вкл.

    Ещё замкнул отпустил - прибор на приёмнике выкл. Так не устраивает.
     
  9. ostrov

    ostrov Гуру

    То есть подтяжки к +5 внутренним резистором в одном случае хватает, в другом нет. И голову сломали почему так. А сделать нормально не хочется по каким то убеждениям.
     
  10. NikitOS

    NikitOS Король шутов Администратор

    Афтор, только успокойтесь, идите тестируйте, в ближайшую неделю Вас не ждем!!
    Код (C++):
    #include <RCSwitch.h>
    RCSwitch mySwitch = RCSwitch();
    int LedPin = 13;             // Подключаем светодиод к порту 13
    int ButPin = 4;             // Подключаем кнопку к выходу 4
    int flag = 0;                // флаг состояния

    void setup()
    {
      pinMode(LedPin, OUTPUT);
      pinMode(ButPin, OUTPUT);
    digitalWrite(ButPin, LOW);

    mySwitch.enableTransmit(5);
    }

    void loop()
    {
      if(digitalRead(ButPin) == HIGH && flag == 0)    
        {                                            
        digitalWrite(LedPin, HIGH);
       
      mySwitch.send(7777777, 24);
          flag = 1;
         
        }
      if(digitalRead(ButPin) == LOW && flag == 1)
        {
           difitalWrite(LedPin, LOW); //не горит
    mySwitch.send(7777777, 24);
          flag = 0;
        }
     
  11. Ура, ой спасибо тебе добрый человек что ткнул носом, заработало ведь. И на UNO и HAHO всё как надо.
    Остался вопрос, почему в UNO работало, а HAHO нет.
    Полность рабочий код для всех ардуинок.

    Код (C++):
    [code]
    #include <RCSwitch.h>
    RCSwitch mySwitch = RCSwitch();
    int LedPin = 13;             // Подключаем светодиод к порту 13
    int ButPin = 4;             // Подключаем кнопку к выходу 10
    int flag = 0;                // флаг состояния

    void setup()
    {
      pinMode(LedPin, OUTPUT);
      pinMode(ButPin, OUTPUT);
    digitalWrite(ButPin, LOW);

      mySwitch.enableTransmit(5);
    }

    void loop()
    {
      if(digitalRead(ButPin) == LOW && flag == 0)    
        {                                            
        digitalWrite(LedPin, INPUT);//горит
         
       mySwitch.send(8590337, 24); //of
          flag = 1;
           
        }
     
      if(digitalRead(ButPin) == HIGH && flag == 1)
        {
           digitalWrite(LedPin, OUTPUT); //не горит
         mySwitch.send(8590337, 24); //of
          flag = 0;
        }
    delay(60);
    }
     
    [/code]
     
  12. NikitOS

    NikitOS Король шутов Администратор

    Код (C++):

    pinMode(ledPin, OUTPUT);   //настроит пин как выход
    pinMode(ledPin, INPUT);   //настроит пин как вход и не даст желаемого

    digitalWrite(ledPin,  HIGH);   //подаст на пин высокий сигнал, т.е включит светодиод
    digitalWrite(ledPin,  LOW);   //подаст на пин низкий сигнал, т.е выключит светодиод
     
     
  13. NikitOS

    NikitOS Король шутов Администратор

    весь смысл в том, что pinMode когда задается INPUT может подтянуть его к земле, поэтому светодиод и горел
    здесь похоже, но когда в pinMode указывается OUTPUT то он не управляется без функций которые я описал в предыдущем посте
     
  14. ostrov

    ostrov Гуру

    Если в соответствующем бите порта 1, при OUTPUT будет вкл, при INPUT скорее всего выкл. Но сперва надо этот бит установить явно, скорее всего в УНО так и получилось само, а в Нано нет. А вообще дичь какаякто так включать и выключать.
     
    NikitOS нравится это.
  15. ostrov

    ostrov Гуру

    Код (C++):
    #include <RCSwitch.h>
    RCSwitch mySwitch = RCSwitch();
    #define LedPin 13             // Подключаем светодиод к порту 13
    #define ButPin 4              // Подключаем кнопку к выходу 4
    byte buff[2];

    void setup()
    {
      pinMode(LedPin, OUTPUT);
      pinMode(ButPin, INPUT); // PULLUP?
      mySwitch.enableTransmit(5);
    }

    void loop() {
      buff[0] = buff[1];
      buff[1] = digitalRead(ButPin);
      if (buff[0] < buff[1]) {
        digitalWrite(LedPin, LOW);
        mySwitch.send(7777777, 24);
      }
      if (buff[0] > buff[1]) {
        digitalWrite(LedPin, HIGH);
        mySwitch.send(7777777, 24);
      }
      delay(60);
    }
     
  16. Приветствую всех, есть у кого желание переделать этот скетч для attiny85, за денежку?
    Код (C++):
    #include <RCSwitch.h>
    RCSwitch mySwitch = RCSwitch();
    int LedPin = 13;             // Подключаем светодиод к порту 13
    int ButPin = 4;             // Подключаем кнопку к выходу 10
    int flag = 0;                // флаг состояния

    void setup()
    {
      pinMode(LedPin, OUTPUT);
      pinMode(ButPin, OUTPUT);
    digitalWrite(ButPin, LOW);

      mySwitch.enableTransmit(5);
    }

    void loop()
    {
      if(digitalRead(ButPin) == LOW && flag == 0)  
        {                                          
        digitalWrite(LedPin, INPUT);//горит
       
       mySwitch.send(8590337, 24); //of
          flag = 1;
         
        }
      if(digitalRead(ButPin) == HIGH && flag == 1)
        {
           digitalWrite(LedPin, OUTPUT); //не горит
         mySwitch.send(8590337, 24); //of
          flag = 0;
        }
    delay(60);
    }
     
  17. DIYMan

    DIYMan Guest

    А что с ним? Не влезает? Или не работает? Если не влезает - то навскидку можно избавиться от pinMode и digitalWrite в пользу прямой работы с портами, номера пинов вместо переменных загнать в #define, переменную flag вместо int сделать uint8_t - по итогу то там, то здесь - маленькая экономия ;)
     
  18. ostrov

    ostrov Гуру

    Да скетч то на 100 кб. Если только библиотека огромная.
     
  19. <RCSwitch.h> похоже не лезет, пробую скомпилировать для attiny85 X5 (мах 8kb) , выдаёт ошибку. Думаю всё надо переписывать на С
     
  20. Мигаем светодиодом, а как передатчик включить?

    Код (C++):
    #include <avr/io.h>// подключаем заголовочные файлы

    int main(void)
    {
      DDRB|=(1<<PB2); //Настраиваем ножку PB2 в режим выхода
      DDRB&=~(1<<PB1); //Настраиваем ножку PB1 в режим входа
      PORTB|=(1<<PB1); //Устанавливаем pull-up режим ножки PB1
        while(1) //бесконечный цикл
        {
            if((PINB&(1<<PB1))==0)//Если на PB1 логический ноль
        {
          PORTB|=(1<<PB2);//Зажигаем светодиод
        }
        else// если на PB1 логическая единица
        {
          PORTB&=~(1<<PB2);//Гасим светодиод
        }
        }
    }