A0-A4 как цифровые пины

genia1991
Offline
Зарегистрирован: 25.12.2019

пытаюсь подключить 2 клавиатуры по 16 символом.

последнею подключаю к пинам аналоговым и включаю их на вход и выход.

кажется как выход A0-A4 работать не будет?

int PinOut[4] {5, 4, 3, 2}; // пины выходы               
int PinIn[4] {9, 8, 7, 6}; // пины входа             

int PinOut2[4] {14, 12, 11, 10};
int PinIn2[4] {18, 17, 16, 15}; 

const char value[4][4]            
 
{ {'A', '4', '7', '*'},
  {'2', '5', '8', '0' },
  {'3', '6', '9', '#'},
  {'s', 'B', 'C', 'D'}
};

const char value2[4][4]      
 
{ {'A', '4', '7', '*'},
  {'2', '5', '8', '0' },
  {'3', '6', '9', '#'},
  {'s', 'B', 'C', 'D'}
};

void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);

  pinMode (2, OUTPUT); 
  pinMode (3, OUTPUT);
  pinMode (4, OUTPUT);
  pinMode (5, OUTPUT);
 
  pinMode (6, INPUT);
  digitalWrite(6, HIGH);
  pinMode (7, INPUT);
  digitalWrite(7, HIGH);
  pinMode (8, INPUT);
  digitalWrite(8, HIGH);
  pinMode (9, INPUT);
  digitalWrite(9, HIGH);
  //======================вторая клавиатура=====================
   pinMode (10, OUTPUT);     
  pinMode (11, OUTPUT);
  pinMode (12, OUTPUT);
  pinMode (14, OUTPUT);   // ЗДЕСЬ ПРОБЛЕМА 

    pinMode (15, INPUT);      // ЗДЕСЬ ПРОБЛЕМА 
  digitalWrite(15, HIGH);    // ЗДЕСЬ ПРОБЛЕМА 
    pinMode (16, INPUT);     // ЗДЕСЬ ПРОБЛЕМА 
  digitalWrite(16, HIGH);     // ЗДЕСЬ ПРОБЛЕМА 
    pinMode (17, INPUT);      // ЗДЕСЬ ПРОБЛЕМА 
  digitalWrite(17, HIGH);  // ЗДЕСЬ ПРОБЛЕМА 
    pinMode (18, INPUT);   // ЗДЕСЬ ПРОБЛЕМА 
  digitalWrite(18, HIGH);  // ЗДЕСЬ ПРОБЛЕМА 
  //====================конец вторая клавиатура===================
}

void matrix () 
{
  for (int i = 1; i <= 4; i++) 
  {
    digitalWrite(PinOut[i - 1], LOW);
    for (int j = 1; j <= 4; j++) 
    {
      if (digitalRead(PinIn[j - 1]) == LOW)
      {
        Serial.println( value[i - 1][j - 1]);
                                      if ( value[i - 1][j - 1] == 'D' ){ Serial.println("TEST"); }   
        delay(175);
      }
    }
    digitalWrite(PinOut[i - 1], HIGH); 
  }
}

void matrix2 () // создаем функцию для чтения кнопок
{
  for (int z = 1; z <= 4; z++) // цикл, передающий 0 по всем столбцам
  {
    digitalWrite(PinOut2[z - 1], LOW); 
    for (int x = 1; x <= 4; x++) 
    {
      if (digitalRead(PinIn2[x - 1]) == LOW)
      {
        Serial.println( value2[z - 1][x - 1]);
                                      if ( value2[z - 1][x - 1] == 'D' ){ Serial.println("TEST"); }   
        delay(300);
      }
    }
    digitalWrite(PinOut2[z - 1], HIGH); 
  }
}

void loop() {
            matrix();
            matrix2();   //вторая клавиатура  16 кнопок
                      
             //Serial.println( value[1][1]);  //первая цифра номер колонки. вторая это номер столбца  . число 5 из массива
          //delay(1000);

}

 

Weisnar
Weisnar аватар
Offline
Зарегистрирован: 19.07.2018

Поделюсь догадкой. Может Arduino IDE не знает таких названий пинов, как 14, 15 и т.д. И это надо указать в начале?

#define 14 A0

#define 15 A1

#define 16 A2

#define 17 A3

#define 18 A4

 

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

genia1991 пишет:

пытаюсь подключить 2 клавиатуры по 16 символом.

последнею подключаю к пинам аналоговым и включаю их на вход и выход.

кажется как выход A0-A4 работать не будет?

Если речь идет об ардуино Уно, Нано, Микро, Мега и тп, то прины А0-А4 прекрасно работают как цифровые и на вход и на выход.

Цитата:

    pinMode (15, INPUT);      // ЗДЕСЬ ПРОБЛЕМА 
  digitalWrite(15, HIGH);    // ЗДЕСЬ ПРОБЛЕМА 
    pinMode (16, INPUT);     // ЗДЕСЬ ПРОБЛЕМА 
  digitalWrite(16, HIGH);     // ЗДЕСЬ ПРОБЛЕМА 
    pinMode (17, INPUT);      // ЗДЕСЬ ПРОБЛЕМА 
  digitalWrite(17, HIGH);  // ЗДЕСЬ ПРОБЛЕМА 
    pinMode (18, INPUT);   // ЗДЕСЬ ПРОБЛЕМА 
  digitalWrite(18, HIGH);  // ЗДЕСЬ ПРОБЛЕМА

А в чем, конкретно, проблема?

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

genia1991 пишет:

кажется как выход A0-A4 работать не будет?

Перекреститесь и, кстати, используйте нормальные имена A0-A4, а не большие номера. Всё нормально работает.

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

Weisnar пишет:

Поделюсь догадкой. Может Arduino IDE не знает таких названий пинов, как 14, 15 и т.д. И это надо указать в начале?

#define 14 A0

#define 15 A1

#define 16 A2

#define 17 A3

#define 18 A4

Не сразу, но оценил! Зачётно!

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Weisnar пишет:

Поделюсь догадкой. Может Arduino IDE не знает таких названий пинов, как 14, 15 и т.д. И это надо указать в начале?

#define 14 A0

А разве у ардуин на базе amega328 они по дефолту так не замаплены?

Onkel
Offline
Зарегистрирован: 22.02.2016

я на 1.8.5. попробовал - 

 pinMode(15, OUTPUT);

компилирует. Может в разных версиях IDE по разному?

 

Weisnar
Weisnar аватар
Offline
Зарегистрирован: 19.07.2018

Onkel пишет:
компилирует. Может в разных версиях IDE по разному?

У него может быть какой-то особенный контроллер, для которого не указаны эти цифровые названия. 

nik182
Offline
Зарегистрирован: 04.05.2015

Это всё от не понимания сути микроконтроллера. Основные ноги МК изначально всегда цифровые и настроенны как вход по сбросу. (328 в квадратном корпусе пока пропускаем). Что бы их сделать выходами или аналоговыми входами или какими либо функциональными, типа i2c, надо дать команды на их инициализацию. Ардуина ИДЕ это делает незаметно для пользователя в процедуре init, которую вызывает до setup. Кроме того обзывает все ноги согласно проведённой инициализации. В чём легко убедиться, посмотрев в ядре ардуино .h файл с дефайнами по пинам. Там можно увидеть, что все ноги пронумерованы от нуля до максимума простыми числами, потом некоторым даны функциональные имена - синонимы, типа А0. Так что при написании программы оказывается что одну и ту же ногу-пин можно называть например и A0 и 14 и PC0 . Конечная программа от этого не изменится.

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

asam пишет:

Weisnar пишет:

#define 14 A0

А разве у ардуин на базе amega328 они по дефолту так не замаплены?

Так - нет :-)

genia1991
Offline
Зарегистрирован: 25.12.2019

спасибо всем.

странно конечно. попробую все варианты с постов. основной провод A0 вроде может на нем контакта нет.

контроллер wavgat 328 pro mini 5v

до этого проверял через digitalRead(14);

работало нормально

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

genia1991 пишет:

контроллер wavgat 328 pro mini 5v

genia1991
Offline
Зарегистрирован: 25.12.2019

DetSimen пишет:

genia1991 пишет:

контроллер wavgat 328 pro mini 5v

сам в шоке от его работы :)

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

ЕвгенийП пишет:

genia1991 пишет:

кажется как выход A0-A4 работать не будет?

Перекреститесь и, кстати, используйте нормальные имена A0-A4, а не большие номера. Всё нормально работает.

у меня работает и с ненормальными )))
 

#define DIR_RUDER1  18    //A4  MRINA
#define DIR_RUDER2  19    //A5  MRINB
#define PWM_RUDER   11    //    MRPWM PWM outputs
#define MRENAB            //    MRENA/B  - HIGH разрешение выхода  

 

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

genia1991 пишет:
контроллер wavgat 328 pro mini 5v
Так вот с этого нужно было начинать! Люди время теряют, посты Вам пишут как чинить телевизор, а через день узнают, что у Вас на самом деле стиральная машина.

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

ua6em пишет:

у меня работает и с ненормальными )))

У всех работает, просто, когда ТС плавает ВО ВСЁМ - не надо полодить сущности. Нет ведь никакой уверенности, что он правильные номера поставит - так что пусть пишет то, что написано шелкографией возле пинов и не выпендривается (впрочем, уже выяснилось, что у него вавгат, только он сразу не сказал, чтобы потроллить и поиздеваться).

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

ЕвгенийП пишет:

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

да, а троллинг тут  - надо ещё заслужить )))

genia1991
Offline
Зарегистрирован: 25.12.2019

ЕвгенийП пишет:

genia1991 пишет:
контроллер wavgat 328 pro mini 5v
Так вот с этого нужно было начинать

да забыл дописать. туплю :)

с ним постоянные проблемы.  на нормальное человеческой атмеге все заработало.

правда в скетче стояла скорость 9600 а в мониторе что бы не было крякозябры выставил 4800 кажется. на 1 ниже. но это из за TTL преобразователя дешевого. кто то писал об этом раньше что такое же было. а вот менять скорость на 1 ниже для wavgat не надо :)

 

а как можно этот суперКитайский wavgat заставить и на A0-A4 работать?

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

genia1991 пишет:

а как можно этот суперКитайский wavgat заставить и на A0-A4 работать?

заменить на атмегу328?

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

b707 пишет:

заменить на атмегу328?

Не наш метод! А как же "всегда есть место подвигу"?

genia1991
Offline
Зарегистрирован: 25.12.2019

да хотел бы этот wavgat все таки пихнуть на клавиатуру и забыть за него :)

атмегу328 жалко :) 

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

genia1991 пишет:

ЕвгенийП пишет:

genia1991 пишет:
контроллер wavgat 328 pro mini 5v
Так вот с этого нужно было начинать

да забыл дописать. туплю :)

с ним постоянные проблемы.  на нормальное человеческой атмеге все заработало.

правда в скетче стояла скорость 9600 а в мониторе что бы не было крякозябры выставил 4800 кажется. на 1 ниже. но это из за TTL преобразователя дешевого. кто то писал об этом раньше что такое же было. а вот менять скорость на 1 ниже для wavgat не надо :)

 

а как можно этот суперКитайский wavgat заставить и на A0-A4 работать?

это не из-за TTL, а то, что аддон используете кривой

genia1991
Offline
Зарегистрирован: 25.12.2019

ua6em пишет:

genia1991 пишет:

ЕвгенийП пишет:

genia1991 пишет:
контроллер wavgat 328 pro mini 5v
Так вот с этого нужно было начинать

да забыл дописать. туплю :)

с ним постоянные проблемы.  на нормальное человеческой атмеге все заработало.

правда в скетче стояла скорость 9600 а в мониторе что бы не было крякозябры выставил 4800 кажется. на 1 ниже. но это из за TTL преобразователя дешевого. кто то писал об этом раньше что такое же было. а вот менять скорость на 1 ниже для wavgat не надо :)

 

а как можно этот суперКитайский wavgat заставить и на A0-A4 работать?

это не из-за TTL, а то, что аддон используете кривой

я снова ошибся. я запрограммировал нормальную атмегу38 через wavgat.  забыл поменять на pro mini в меню инструменты - плата :)

поэтому наверное из за этого и тупило

 

инфы в интернете нет о wavgat и A0 как digital. наверное просто придется выбросить 4 кнопки с клавиатуры .

а вообще надо было делать на mega все (