arduino uno и nano

Сергей Р
Offline
Зарегистрирован: 19.02.2016

Господа всех приветствую, помогите с проблемкой, на ардуинке UNO скетч работает, а на ардуинке NANO не работает, скетчи заливаются без проблем.

Вот простой скетч

[code]
#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)      
    {                                              
    pinMode(LedPin, INPUT);
      
  mySwitch.send(7777777, 24); 
      flag = 1;
        
    }
  
  if(digitalRead(ButPin) == LOW && flag == 1)
    {
       pinMode(LedPin, OUTPUT); //не горит
 mySwitch.send(7777777, 24); 
      flag = 0;
    } 
delay(60);
}
[/code]

 

Сергей Р
Offline
Зарегистрирован: 19.02.2016

И ещё, в NANO blink грузится и работает. NANO поддерживает флаги? Или Ардуино NANO купил г....о?

Сергей Р
Offline
Зарегистрирован: 19.02.2016

Весь мозг вынес, может есть ещё какие тест? или другой комп с кабелем?

sadman41
Offline
Зарегистрирован: 19.10.2016

Что такое - работает/не работает?

В оригинальных устройствах Nano и Uno МК если не эквивалентные, то из одного семейства, отличия в формфакторе и стабилизаторе питания.

Сергей Р
Offline
Зарегистрирован: 19.02.2016

Питание- USB от компа в обоих случаях. NANO с USB портом.

NANO- скетч "blink"грузится и работает, а скетч выше описанный не работает по сравнению с UNO

sadman41
Offline
Зарегистрирован: 19.10.2016

Симптомы описать можете? 

Сергей Р
Offline
Зарегистрирован: 19.02.2016

Буду пробовать на другой ОС и кабелем, посмотрим.

Сергей Р
Offline
Зарегистрирован: 19.02.2016

Горит питание, светик 13 при команде  не включается.  При згрузке скетча tx и rx моргали.

sadman41
Offline
Зарегистрирован: 19.10.2016

Все понятно.  А на Uno, говорите, этот код работает и диод на 13-м пине включается по команде? Фантастика просто.

Сергей Р
Offline
Зарегистрирован: 19.02.2016

Сам удивился, в стопоре уже. Может видео фантастики сделать на ютуб? Лежат два железа, один работет, а другой нет. Хотя оба железа рабочие.

Сергей Р
Offline
Зарегистрирован: 19.02.2016

Может подскажите скетч для теста?

Сергей Р
Offline
Зарегистрирован: 19.02.2016

Может другое условие написать без delay? Подскажите что можно изменить?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Фантастика. Ни одна строчка кода LedPin не включает, а он на Uno горит!!!

Мошт потомушто пины включаюца/выключаюца не функцией pinMode() а digitalWrite()?

alex_r61
Offline
Зарегистрирован: 20.06.2012

А подтяжка есть у кнопки?

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

ButPin у вас выход.
Вы его читаете.
Вы уверены что надо читать этот выход?
LedPin у вас сначала выход.
Потом вы его переключаете на вход и на выход.
Вы уверены?
Зачем вы это делаете?

Гриша
Offline
Зарегистрирован: 27.04.2014

DetSimen пишет:

Фантастика. Ни одна строчка кода LedPin не включает, а он на Uno горит!!!

Мошт потомушто пины включаюца/выключаюца не функцией pinMode() а digitalWrite()?

ГЫ :))))

Сергей Р, заработало?  Настоятельно рекомендую написать комменты для каждой строки и выложить код в топик.

ОСОБЕННО ДЛЯ СТРОК  21 И 30

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

Гриша пишет:
Настоятельно рекомендую написать комменты для каждой строки и выложить код в топик.

ОСОБЕННО ДЛЯ СТРОК  21 И 30

К сожалению, у нас нет раздела "юмор".

Сергей Р
Offline
Зарегистрирован: 19.02.2016

Буду пробовать другие методы кода, и другие НАНО скоро из Китая придут.

Сергей Р
Offline
Зарегистрирован: 19.02.2016

Алгоритм работы такой и он меня полностью устраивает:

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

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

 

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

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

 

Сергей Р
Offline
Зарегистрирован: 19.02.2016

#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(7777777, 24); //of
      flag = 1;
        
    }
  
  if(digitalRead(ButPin) == HIGH && flag == 1)
    {
       digitalWrite(LedPin, OUTPUT); //не горит
     mySwitch.send(7777777, 24); //of
      flag = 0;
    } 
delay(60);
}

 

Сергей Р
Offline
Зарегистрирован: 19.02.2016

Гриша и DetSimen, большое Вам спасибо. Проблема решена , работает на всех ардуинках, заменив   pinMode на digitalWrite

Сергей Р
Offline
Зарегистрирован: 19.02.2016

Всем спасибо, мелочь, а не приятно что где то работает, а где то нет.

sadman41
Offline
Зарегистрирован: 19.10.2016

Кнопки ( pinMode(ButPin, OUTPUT);) нужно конфигурировать как INPUT_PULLUP или INPUT, а не как OUTPUT: https://www.arduino.cc/en/Tutorial/Button

 

Сергей Р
Offline
Зарегистрирован: 19.02.2016

Спасибо sadman41, учту.

OlegK
OlegK аватар
Offline
Зарегистрирован: 26.11.2014

Ещё бы ТС поведал, зачем он юзает так -

digitalWrite(LedPin, INPUT)
digitalWrite(LedPin, OUTPUT)

вместо

digitalWrite(LedPin, HIGH)
digitalWrite(LedPin, LOW)

 

Сергей Р
Offline
Зарегистрирован: 19.02.2016

[code]
#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);
digitalWrite(ButPin, HIGH);
  
  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);
}
[/code]

 

Сергей Р
Offline
Зарегистрирован: 19.02.2016

Можно и так ))

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

OlegK пишет:

Ещё бы ТС поведал, зачем он юзает так -

digitalWrite(LedPin, INPUT)
digitalWrite(LedPin, OUTPUT)

вместо

digitalWrite(LedPin, HIGH)
digitalWrite(LedPin, LOW)

Как говорят военные: "чтобы ввестив заблуждение противника".