Подскажите пожалуйста номера контактов MEGA2560

Здравствуйте.1. Есть схема спортивного табло, все прошивки и порядок программирования. С ардуино не был связан и не могу понять какие номера контактов платы соответствуют D6-D13 для подключения к панелям отображения. 2. Если кто сталкивался, вопрос по светодиодным модулям. Устанавливается в табло P10 320x160mm. монохром. По распиновке, все модули P10 одинаково подключаются, главное что бы одной фирмы были?


Спасибо.

Вы плату видели? Они там подписаны, только без букв D!

Главное чтобы они были такие-же как и указано в проекте! И подавать 5В на Vin Меги - так себе идея. И вопросы логичнее разработчику задавать.

Табло работает под программу посчета очков. Схема и остальное взяты с зарубежного сайта где есть и сноски на комплектующие с алиэкспресс. часть уже не рабочие.
https://aliexpress.ru/item/32768883851.html?spm=a2g0s.9042311.0.0.4b884c4dYDh6qy&gatewayAdapt=glo2rus&sku_id=62255109705
это один из модулей. Есть смысл брать модули другой фирмы или под них должно менятся програмное обеспечение?

Ссылку можно?

Главное обращать внимание на тип интерфейса. На схеме у вас обозначены модули с типом подключения HUB12. Фирма и производитель модулей не имеет значения, все модули HUB12 совместимы между собой.

https://archeryclock.com/ сам сайт
https://archeryclock.com/fullmatrixconf1.html ссылка на табло

Спасибо.
Сайт красивый, мужик молодец. Код… лучше промолчу :slight_smile:

Образчик кода для желающих позырить :slight_smile:

Код

//Copyright (C) 2010-2014  Henk Jegers
//This program is free software: you can redistribute it and/or modify
//it under the terms of the GNU General Public License as published by
//the Free Software Foundation, either version 3 of the License, or
//(at your option) any later version.
//This program is distributed in the hope that it will be useful,
//but WITHOUT ANY WARRANTY; without even the implied warranty of
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//GNU General Public License for more details.
//You should have received a copy of the GNU General Public License
//along with this program.  If not, see <http://www.gnu.org/licenses/>.

//for questions email to info@archeryclock.com  

// version MEGA01   Initial version
// version MEGA01_1 Adding robustness for receiving ABCD detailes which is implemented in AC 232. Using the ABCD details information is not yet implemented in MEGA01_1 Needs archeryclock version 2320 or newer.
// version MEGA01_2 Added end number information. Needs Archeryclock2401 or newer. (older archeryclock versions don't sent the end number information to arduine)
// version MEGA02_1 Changes because of a change in protocoll for AC 241 (nr of archers and E and F shooters) and added functionality: emergency stop, add archers E and F.  Changes for signal robustness. (0 (0000) is sent as 12 (1100) to prevent decoding issues when 3 times 0 is sent (000000000000) 


String inputString;
int serialvalue;
int statevalue; //received data for state details.
int trafficvalue; //received data for traffic lights, and ABCD lights
int leftcountvalue; //received data for left countdown.
int rightcountvalue; //received data for rightcountdown.
int abcdvalue;   //received data for abcd details
int endnrvalue;  //received data for end nr
int buttonvalue;
int remember1;
int loop1;
int blinkk;
int blinkkk;
int blinkl;
int blinkr;
int rightdigit; //value of left digit   (0..10  (10 means dashes))
int middigit; //value of middle digit (0..10  (10 means dashes))
int leftdigit; //value of light digit  (0..10  (10 means dashes))

int lefend; //value of left digit to indicate end nr  (0..9 or 15  (15 means P to indicate practise end))
int midend; //value of middle digit to indicate end nr  (0..9)
int rigend; //value of middle digit to indicate end nr  (0..9)
int comend; //value of combined left and middle digit. In case of practise end the P from the left digit should be projected. else the middle digit (0..9 or 15  (15 means P to indicate practise end)) 

int segment[16]={0x03f,0x006,0x05b,0x04f,0x066,0x06d,0x07d,0x007,0x07f,0x06f,0x040,0x000,0x03f,0x000,0x000,0x073}; //0,1,2,3,4,5,6,7,8,9,-, , , , ,P

void setup() {
  
  DDRC = B00000000;               // Pins A0 to A5 are inputs
  buttonvalue=0;
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(14, OUTPUT);
  pinMode(15, OUTPUT);
  pinMode(16, OUTPUT);
  pinMode(17, OUTPUT);
  pinMode(18, OUTPUT);
  pinMode(19, OUTPUT);
  pinMode(20, OUTPUT);
  pinMode(21, OUTPUT);
  pinMode(22, OUTPUT);
  pinMode(23, OUTPUT);
  pinMode(24, OUTPUT);
  pinMode(25, OUTPUT);
  pinMode(26, OUTPUT);
  pinMode(27, OUTPUT);
  pinMode(28, OUTPUT);
  pinMode(29, OUTPUT);
  pinMode(30, OUTPUT);
  pinMode(31, OUTPUT);
  pinMode(32, OUTPUT);
  pinMode(33, OUTPUT);
  pinMode(34, OUTPUT);
  pinMode(35, OUTPUT);
  pinMode(36, OUTPUT);
  pinMode(37, OUTPUT);
  pinMode(38, OUTPUT);
  pinMode(39, OUTPUT);
  pinMode(40, OUTPUT);
  pinMode(41, OUTPUT);
  pinMode(42, OUTPUT);
  pinMode(43, OUTPUT);
  pinMode(44, OUTPUT);
  pinMode(45, OUTPUT);
  pinMode(46, OUTPUT);
  pinMode(47, OUTPUT);
  pinMode(48, OUTPUT);
  pinMode(49, OUTPUT);
  pinMode(50, OUTPUT);
  pinMode(51, OUTPUT);
  pinMode(52, OUTPUT);
  pinMode(53, OUTPUT);
  pinMode(A8, OUTPUT);
  pinMode(A9, OUTPUT);
  pinMode(A10, OUTPUT);
  pinMode(A11, OUTPUT);
  pinMode(A12, OUTPUT);
  pinMode(A13, OUTPUT);
  pinMode(A14, OUTPUT);
  pinMode(A15, OUTPUT);

  remember1=0;
  loop1=0;
  blinkk=0;
  blinkkk=0;
  blinkl=0;
  blinkr=0;

  rightcountvalue=0xAAA0;
  leftcountvalue=0xAAA0;
  serialvalue=0x0000;
  
  Serial.begin(9600);
  Serial.println("Arduino Serial Link");
  Serial.println("connected!") ;
  

}

void loop() {
  inputString = "";               // Clear inputString
  if(Serial.available()){
    while ((Serial.available())) {
      char digit = Serial.read();   // Read serial buffer
      if(digit != '\n'){inputString += digit;};         // Add new character to the string inputString
      delay(2);                     // Let the serial buffer catch its breath.
      serialvalue = inputString.toInt();
    };
   
//16 bits data received. 
//first bit is telling if the data is about traffic lights and ABCD lights (true). or about the digits of the countdown (false). 
//second bit is telling:
//    -in case of digits (first bit is 0)if the digits are from the right side countdown (true) or left side countdown (false).
//    -in case of trafic/ABCD lights: not implemented jet. Proposal is to use this for ABCD light depending on sequence (For example CDAB is also possible to show)
    
  
    if((serialvalue&0x01) && not(serialvalue&0x06)){ trafficvalue=serialvalue;};     //traficlights
 //   if((serialvalue&0x03) && not(serialvalue&0x0C)){ abcdvalue=serialvalue;};     //ABCD details
    if((serialvalue&0x01) && (serialvalue&0x02) && (serialvalue&0x04)&& not(serialvalue&0x08)){ endnrvalue=serialvalue;};     //endnr info
    if((serialvalue&0x01) && (serialvalue&0x02) && (serialvalue&0x04)&& (serialvalue&0x08)){ statevalue=serialvalue;};     //state info
    
    if ((not(serialvalue&0x01)) && ((serialvalue&0x02)or (serialvalue&0x04))){rightcountvalue=serialvalue;};     //determine the digits value of the rightside
    if ((not(serialvalue&0x01)) && ((not(serialvalue&0x02))or (serialvalue&0x04))){leftcountvalue=serialvalue;}; //determine the digits value of the leftside
  };

//Trafic lights and ABCD lights switching (independent to left/right switch connected to A5) 
//Traficvalue bit 3 -14 show buzzer, green right side, orange right side, red right side, green left side, orange left side, red left side, A, B, C and D.
  //digitalWrite(X,  (trafficvalue&0x0008)?HIGH:LOW);        //buzzer
  //digitalWrite(X,  (trafficvalue&0x0010)?HIGH:LOW);        //green right side
  //digitalWrite(X,  (trafficvalue&0x0020)?HIGH:LOW);        //orange right side
  //digitalWrite(X,  (trafficvalue&0x0040)?HIGH:LOW);        //red right side
  //digitalWrite(X,  (trafficvalue&0x0080)?HIGH:LOW);        //green left side
  //digitalWrite(X,  (trafficvalue&0x0100)?HIGH:LOW);        //orange left side
  //digitalWrite(X,  (trafficvalue&0x0200)?HIGH:LOW);        //red left side
  digitalWrite(17,  (trafficvalue&0x0400)?HIGH:LOW);        //A
  digitalWrite(16,  (trafficvalue&0x0800)?HIGH:LOW);        //B
  digitalWrite(15,  (trafficvalue&0x1000)?HIGH:LOW);        //C
  digitalWrite(14,  (trafficvalue&0x2000)?HIGH:LOW);        //D
  
  digitalWrite(6, ((((statevalue>>7)&B00000111)==2)?LOW:HIGH)and((trafficvalue&0x4000)?HIGH:LOW));  //E
  digitalWrite(7, ((((statevalue>>7)&B00000111)==2)?LOW:HIGH)and((trafficvalue&0x8000)?HIGH:LOW));  //F
  digitalWrite(A15, ((((statevalue>>7)&B00000111)!=2)?LOW:HIGH)and((trafficvalue&0x4000)?HIGH:LOW));  //green right arrow for fita finals
  digitalWrite(39, ((((statevalue>>7)&B00000111)!=2)?LOW:HIGH)and((trafficvalue&0x8000)?HIGH:LOW)); //green left arrow for fita finals
  
//(((((statevalue>>7)&B00000111)=2)?LOW:HIGH) and )


  
  if (digitalRead(A4)){ //buzzer yes/no switch
     digitalWrite(18,  (trafficvalue&0x0008)?HIGH:LOW);        //buzzer
  }else{
     digitalWrite(18, LOW);                                    //if switch on A4 is off, buzzer must be always off
  } ;
  
  //last 2 bits of trafic value show the number of archers. In this way we can determine notA, notB, notC and notD
    if (blinkk==0){blinkk=300;}else {blinkk--;};
  if (blinkkk==0){blinkkk=2400;}else {blinkkk--;};
  if (blinkkk>1200){
    blinkr=0;
    blinkl=((blinkk>200)?HIGH:LOW);
  }else{
    blinkr=((blinkk>200)?HIGH:LOW);
    blinkl=0;
  };

  
  if ((((statevalue>>4)&B00000111)!=6)?HIGH:LOW){
  digitalWrite(2,   (((((statevalue>>13)&B00000111)<1)?LOW:HIGH) and ((((statevalue>>7)&B00000111)==2)?LOW:HIGH) and ((((statevalue>>7)&B00000111)==4)?LOW:HIGH) and (not(trafficvalue&0x0400)?HIGH:LOW)));  //notA. Is on if Archer A exist but it is not his/her turn to shoot
  digitalWrite(3,   (((((statevalue>>13)&B00000111)<1)?LOW:HIGH) and ((((statevalue>>7)&B00000111)==2)?LOW:HIGH) and ((((statevalue>>7)&B00000111)==4)?LOW:HIGH) and (not(trafficvalue&0x0800)?HIGH:LOW)));  //notB. Is on if Archer B exist but it is not his/her turn to shoot
  digitalWrite(4,   (((((statevalue>>13)&B00000111)<2)?LOW:HIGH) and ((((statevalue>>7)&B00000111)==2)?LOW:HIGH) and ((((statevalue>>7)&B00000111)==4)?LOW:HIGH) and (not(trafficvalue&0x1000)?HIGH:LOW)));  //notC. Is on if Archer C exist but it is not his/her turn to shoot
  digitalWrite(5,   (((((statevalue>>13)&B00000111)<3)?LOW:HIGH) and ((((statevalue>>7)&B00000111)==2)?LOW:HIGH) and ((((statevalue>>7)&B00000111)==4)?LOW:HIGH) and (not(trafficvalue&0x2000)?HIGH:LOW)));  //notD. Is on if Archer D exist but it is not his/her turn to shoot
  digitalWrite(8,   (((((statevalue>>13)&B00000111)<4)?LOW:HIGH) and ((((statevalue>>7)&B00000111)==2)?LOW:HIGH) and ((((statevalue>>7)&B00000111)==4)?LOW:HIGH) and (not(trafficvalue&0x4000)?HIGH:LOW)));  //notE. Is on if Archer E exist but it is not his/her turn to shoot
  digitalWrite(9,   (((((statevalue>>13)&B00000111)<5)?LOW:HIGH) and ((((statevalue>>7)&B00000111)==2)?LOW:HIGH) and ((((statevalue>>7)&B00000111)==4)?LOW:HIGH) and (not(trafficvalue&0x8000)?HIGH:LOW)));  //notF. Is on if Archer F exist but it is not his/her turn to shoot
  }else{
  
  digitalWrite(2, (blinkl));
  digitalWrite(3, (blinkl));
  digitalWrite(4, (blinkr));
  digitalWrite(5, (blinkr));
  digitalWrite(8, (blinkl));
  digitalWrite(9, (blinkl));

  };
  
   
//outputs depending on switch (A5 input) if right side or leftside is used

  if (digitalRead(A5)){  //right side
    //Trafic lights:
    digitalWrite(19,  (trafficvalue&0x0010)?HIGH:LOW);        //green right side
    digitalWrite(20,  (trafficvalue&0x0020)?HIGH:LOW);        //orange right side
    digitalWrite(21,  (trafficvalue&0x0040)?HIGH:LOW);        //red right side
    //digits
    digitalWrite(23,  ((rightcountvalue&0x0008)?HIGH:LOW)and((segment[leftdigit]==0x040)?LOW:HIGH) );      //dots to indicate minutes or seconds indication
    rightdigit=((rightcountvalue>>4)&B00001111);  
    middigit=((rightcountvalue>>8)&B00001111);
    leftdigit=((rightcountvalue>>12)&B00001111);
  }
  else  //left side
  {
    //Trafic lights:
    digitalWrite(19,  (trafficvalue&0x0080)?HIGH:LOW);        //green left side
    digitalWrite(20,  (trafficvalue&0x0100)?HIGH:LOW);        //orange left side
    digitalWrite(21,  (trafficvalue&0x0200)?HIGH:LOW);        //red left side
    //digits
    digitalWrite(23,  ((leftcountvalue&0x0008)?HIGH:LOW)and((segment[leftdigit]==0x040)?LOW:HIGH) );      //dots to indicate minutes or seconds indication
    rightdigit=((leftcountvalue>>4)&B00001111);
    middigit=((leftcountvalue>>8)&B00001111);
    leftdigit=((leftcountvalue>>12)&B00001111);
  };

  digitalWrite(37, ((segment[leftdigit]&0x001))?HIGH:LOW); //left digit segment A
  digitalWrite(35, ((segment[leftdigit]&0x002))?HIGH:LOW); //left digit segment B
  digitalWrite(33, ((segment[leftdigit]&0x004))?HIGH:LOW); //left digit segment C
  digitalWrite(31, ((segment[leftdigit]&0x008))?HIGH:LOW); //left digit segment D
  digitalWrite(29, ((segment[leftdigit]&0x010))?HIGH:LOW); //left digit segment E
  digitalWrite(27, ((segment[leftdigit]&0x020))?HIGH:LOW); //left digit segment F
  digitalWrite(25, ((segment[leftdigit]&0x040))?HIGH:LOW); //left digit segment G

  digitalWrite(53, ((segment[middigit]&0x001))?HIGH:LOW); //middle digit segment A
  digitalWrite(51, ((segment[middigit]&0x002))?HIGH:LOW); //middle digit segment B
  digitalWrite(49, ((segment[middigit]&0x004))?HIGH:LOW); //middle digit segment C
  digitalWrite(47, ((segment[middigit]&0x008))?HIGH:LOW); //middle digit segment D
  digitalWrite(45, ((segment[middigit]&0x010))?HIGH:LOW); //middle digit segment E
  digitalWrite(43, ((segment[middigit]&0x020))?HIGH:LOW); //middle digit segment F
  digitalWrite(41, ((segment[middigit]&0x040))?HIGH:LOW); //middle digit segment G
    
  digitalWrite(A8, ((segment[rightdigit]&0x001))?HIGH:LOW); //right digit segment A
  digitalWrite(A9, ((segment[rightdigit]&0x002))?HIGH:LOW); //right digit segment B
  digitalWrite(A10, ((segment[rightdigit]&0x004))?HIGH:LOW); //right digit segment C
  digitalWrite(A11, ((segment[rightdigit]&0x008))?HIGH:LOW); //right digit segment D
  digitalWrite(A12, ((segment[rightdigit]&0x010))?HIGH:LOW); //right digit segment E
  digitalWrite(A13, ((segment[rightdigit]&0x020))?HIGH:LOW); //right digit segment F
  digitalWrite(A14, ((segment[rightdigit]&0x040))?HIGH:LOW); //right digit segment G
 
 lefend=((endnrvalue>>4)&B00001111);
 midend=((endnrvalue>>8)&B00001111);
 rigend=((endnrvalue>>12)&B00001111);
 if (lefend==15){comend=lefend;}else {comend=midend;};
  

  digitalWrite(24, ((segment[comend]&0x001))?HIGH:LOW); //left combined end digit segment A
  digitalWrite(26, ((segment[comend]&0x002))?HIGH:LOW); //left combined end digit segment B
  digitalWrite(28, ((segment[comend]&0x004))?HIGH:LOW); //left combined end digit segment C
  digitalWrite(30, ((segment[comend]&0x008))?HIGH:LOW); //left combined end digit segment D
  digitalWrite(32, ((segment[comend]&0x010))?HIGH:LOW); //left combined end digit segment E
  digitalWrite(34, ((segment[comend]&0x020))?HIGH:LOW); //left combined end digit segment F
  digitalWrite(36, ((segment[comend]&0x040))?HIGH:LOW); //left combined end digit segment G
    
  digitalWrite(40, ((segment[rigend]&0x001))?HIGH:LOW); //right end digit segment A
  digitalWrite(42, ((segment[rigend]&0x002))?HIGH:LOW); //right end digit segment B
  digitalWrite(44, ((segment[rigend]&0x004))?HIGH:LOW); //right end digit segment C
  digitalWrite(46, ((segment[rigend]&0x008))?HIGH:LOW); //right end digit segment D
  digitalWrite(48, ((segment[rigend]&0x010))?HIGH:LOW); //right end digit segment E
  digitalWrite(50, ((segment[rigend]&0x020))?HIGH:LOW); //right end digit segment F
  digitalWrite(52, ((segment[rigend]&0x040))?HIGH:LOW); //right end digit segment G
    
//Read buttons
  buttonvalue=0;
 // if (digitalRead(A4)){buttonvalue=5;};
 // if (digitalRead(A3)){buttonvalue=4;};
 // if (digitalRead(A0)){buttonvalue=1;};  //next
 // if (digitalRead(A1)){buttonvalue=2;};  
 // if (digitalRead(A2)){buttonvalue=3;};
  if (loop1==0){
    if (buttonvalue!=remember1){
      Serial.print(buttonvalue);
      delay(3);
      remember1=buttonvalue;
      loop1=15;
      //digitalWrite(2, 1);
    };
  }
  else
  {delay(10);
   //if (loop1>7){blinkr=1;};
    loop1--;
  };
   
}

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

Вы спрашивали про совместимость панелей - я вам ответил.

Спасибо. про панели понял. по схематике замечаний, улучшений нет?

Вперёд!

Ношкой топнуть не забудьте!

Можно. Если что, скажете, что я разрешил.

Тогда погнали! Всем спасибо кто откликнулся! надеюсь в секции появится уличное табло для соревнований! :handshake:

Вы понимаете, что оценить подобный проект и разработать замечания и предложения - это приличная такая работа?

В целом проект выглядит полным трешаком, начиная от применения двух Мег там, где легко справится одна. Про код я уже упомянул выше.

Но переделать его малой кровью вряд ли выйдет, проще выкинуть это в помойку и сделать заново. Но это стоит денег.

Поэтому просто пробуйте - вдруг и это заработает.

Будут проблемы - пишите, возможно смогу помочь.

Про питание Мег уже писал, можно ещё про конвертеры уровней напомнить.
А так: повторяйте проект один в один не отклоняясь от инструкций.

Спасибо!

Да, точно.
Это однозначная ошибка в схеме, так работать не будет.
Закрадываются сомнения - а собирал ли автор эту схему в реале.

Там ещё управляющие 5В на ESP напрямую :slightly_smiling_face: Но это уже потом, на сладкое(когда всё прошьётся и установится)

Вот и успокоили -(

а они там не 5V-толерантны?