Ардуино нано некорректная работа

ALF99
Offline
Зарегистрирован: 31.03.2016
/*
 таймер кнопка 1 ->2  (btn1_pin) 0- нажата /1 нет
                 GND->GND
          светодиод 1->3 (Led1_pin) 1- горит8 /0 нет
                 Ucc->Ucc
*/

const int btn1_pin = 3; // нога кнопки 1
uint8_t btn1 = 0xFF;
const int Led1_pin = 8; // нога реле
uint8_t Led1;
const int Led2_pin = 2; // нога светодиода 2
uint8_t Led2;


void setup() {
  
  pinMode(btn1_pin, INPUT_PULLUP);
  pinMode(7, INPUT_PULLUP);
  pinMode(6, INPUT_PULLUP);
  pinMode(5, INPUT_PULLUP);
  pinMode(Led1_pin, OUTPUT);
  digitalWrite(Led1_pin, Led1 = 0);
  pinMode(Led2_pin, OUTPUT);
  digitalWrite(Led2_pin, Led2 = 0);
}

void loop() {  
  static uint32_t MILLIS ;
  MILLIS = millis() ;
  //200 миллисекунд вычислит. поток 1
  static uint32_t future1 = 0 ;
  static uint32_t fut1 = 0 ;
  if (Led1 & MILLIS >= fut1) // если прошло время и светодиод еще горит
   { 
    digitalWrite(Led1_pin, Led1 = 0); // то выключим его
    digitalWrite(Led2_pin, Led2 = 0);
     future1 = 0 ;
     fut1 = 0 ;
    }
  if (MILLIS >= future1) {   
    future1 = MILLIS + 200 ;
    btn1 = btn1 << 1 | digitalRead(btn1_pin);
       if ((btn1 & 3) == 2) {       //  если нажата клавиша (переход с 1 в 0)
           if (!Led1) {             // и светодиод не горит
              if (digitalRead(5) == 0) {
              fut1 = MILLIS + 600000 ; // то выставим время на 600 000 = 10 минутам
                                          }
              else // а иначе
                 if (digitalRead(6) == 0) { 
                 fut1 = MILLIS + 1200000 ; // то выставим время на 1 200 000 = 20 минутам
                                            }
                 else // а иначе
                     if (digitalRead(7) == 0) {
                     fut1 = MILLIS + 1800000 ; // то выставим время на 1 800 000 = 30 минутам
                                                }
              {    digitalWrite(Led1_pin, Led1 = 1)   ; //и зажжем
                   digitalWrite(Led2_pin, Led2 = 1)   ;}
                       }  
           else // а иначе
               {
                digitalWrite(Led1_pin, Led1 = 0)   ; //погасим
                digitalWrite(Led2_pin, Led2 = 0)   ;
               }
                              }
                          }
  }

Откатал скейтч на ардуино уно всё работает. Загружаю этот же скейтч в ардуино нано он работает вообще не понятно как и близко нет к скейтчу. Таймер по кругу идёт .Питание что от блока питания что от юсб всёравно одно и тоже. Нано проверял, простые свечения светодиодом и кнопки на этих контактах отрабатывае нормально.В чём может быть проблема такого поведения нано в отличии от уно.Уно и нано китайские.

 

b707
Offline
Зарегистрирован: 26.05.2017

взяли чужой скетч и "слегка подправили"? = налепили ошибок.

Вы разницу между операторами "&" и "&&", равно как между  "|" и "||" улавливаете? - вот теперь пройдитесь по коду и посмотрите, где какой должен стоять. У вас с ними полная каша. В частности в строке 34 - явная ошибка.

Ну и код работы с временными интервалами - строки 42, 47, 51 и 55 - неверный. Классическая ошибка новичка.  Хотя конкретно к тем проблемам, которые вы описали - отношения не имеет

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

И слово Sketch ни при каком раскладе не пишется с буквой "й" . Кто это вообще придумал первый? На кол посадить за это..

ALF99
Offline
Зарегистрирован: 31.03.2016

Это конечно основная проблема в слове Sketch попробую убрать ошибки, но почему уно работает с таким скетчем

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ALF99 пишет:

почему уно работает с таким скетчем

А хрен его знает!

Вы ведь не потрудились объяснить нам:

1. Что этот "скетч" должен делать;
2. Что он в действительности делает на Uno;
3. Что он в действительности делает на Nano.

Или Вы думаете, кто-то станет догадываться или пользоваться хрустальным шаром?

Кроме  того, Вы не привели схемы (и картинок) подключения.

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

При правильном соединении, разницы между УНО и Нано нет никакой (обратное неверно).

evgeny.brn
Offline
Зарегистрирован: 25.09.2017

Думаю это глюки самой НАНы.

Так же бился с одним скетчем, он даже строки нормально отказывался обрабатывать.

При переходе на другую плату, все вдруг заработало.