Помогите новичку написать код к проекту индикаторной панели

XoXoL007
Offline
Зарегистрирован: 09.01.2015

Добрый день уважаемые формумчане. Мне крайне срочно требуется помощь в важном для меня задании, индикация.

Точнее о задаче, планируется засветка цифр 3-х значных на 4-х панелях, всё должно работать через SPI как я понимаю и используется динамическая индикация, так как панель 3-х разрядные, так вот, к мк 4 панели будут подключены через всем известные сдвиговые регистры, по 2 регистра на 1 панель, я думаю догадались зачем) Вооот... Теперь мне нужен код который через ком порт будет получать цифру и засвечевать на конкретном индикаторе, а ещё внедрить в код строчку, суть которой заключается в том, чтобы получить следующую цифру для индикатора (т.е. каждому своя кнопочка), повторяюсь связь должна быть через RS-232, желательно с ответами, даже не желательно, а требуется, чтобы в терминале отображалось происходящее типа:

 

 

Terminal:

P1 - 232

P2 - 246

P1 - 233

 

 

ну короче говоря, приходил отчёт о том какая цифра где включена и когда получена следующая. Суть ясна или описать боооооолее подробнее? Уважаемые мне нужна ваша помощь в кратчайшие сроки.

Datak
Offline
Зарегистрирован: 09.10.2014

XoXoL007 пишет:
всё должно работать через SPI как я понимаю...

...повторяюсь связь должна быть через RS-232, желательно с ответами

Аффигеть техническое задание. :)

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Зачем подключать 4 панели, если требуется отображать всего 3 цифры? Вам понятно, мы теряемся в догадках.
Про протокол уже задали вопрос.
Rs232 - это 12 вольтовый или uart-ttl? Видимо где то Вы нашли дедушку rs232.
Короче, нарисуйте, как и на какие панели нужно отображать три цифры и с какого интерфейса, SPI или RS232 нужно задавать эти цифры. Атакде о каких кнопках идёт речь? Кнопки клавиатуры с персоналки, кнопки, подключенные к ардуине или ещё какие-то кнопки?

XoXoL007
Offline
Зарегистрирован: 09.01.2015
Вот картинк плана действий:
1. Общий обзор
2. Работа с терминалом через Rx и Tx мк,  так называемый com
 
 
 
Действительно, может я был не тактичен указав RSR-232 в виде целевого, планируется использовать usb-uart переходник, точно такой же как в адруино уно, (собственно на ней всё и разрабатывается), но желательно мк со скетчем использовать отдельно от платы, но это уже другая история.
В общем нужен скетч, лучше всего написанный на чем то типа С++, чтобы код можно было компилировать под любой мк, код должен общаться с пк.
Вы спросили зачем 4 панели, если цифр 3, а для того чтобы на каждой панели были свои цифры, наверное будет понятно если я скажу проект "электронной очереди".
Об общении с пк, когда через терминал отправлена цифра на панель, мк должен дать ответ, что цифра засвечена, и когда получит новую, объявить что засвеченна новая, т.е. контролировать из терминала что сейчас твориться с панелями, не бегая и проверяя, что где и как горит.
я думаю сделать диапозон цифр для панелей т.е. :
1 -0-200
2 - 201-400
3- 401-600
4- 601-800
 
что то типа такого диапозона, чтобы не путались панели, хотя говоря о использовании SPI, этого вроде делать не обязательно, потому что если я правильно понял при использовании этого протокола, каждому регистру должен будет присвоен свой уникальный номер (имя, название, кому как угодно) и путаницы так и так возникать не будет, если мы скажем мк на какой из панелей хотим увидить нашу цифру.
 
Если у Вас есть желание помочь мне с написанием кода, как насчёт Вк? чтобы быстрее общаться, тут и дураку ясно что если бы я шарил в программировании, вопросов бы не возникло, строк хоть и много придётся написать, но задача не самая трудная как я понимаю.
 
Забыл упамянуть о кнопках, 4 кнопки к 4м панелям, как только кнопка нажимается панель должна получить следующую цифру, проще говоря время горения цифр на одной панели будет задаваться не таймером, а кнопкой "щёлк - следующий", вот зачем она нужна. Надеюсь на Вашу помощь.
 
У меня есть скетч, который непрерывно по SPI просто засвечивает цифры, найденный в интернете.
 
#include <SPI.h> 
enum { reg = 8 }; 


void setup()
{
  SPI.begin();   
  pinMode(reg, OUTPUT); 
}


int hundreds=0, tens=0, ones=0, fnn=0, fn=1, f=0; 
int delayTime=7;        
static uint8_t digit[11] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF}; 
static uint8_t pos[3]= {0xE7,0xEB,0xF3};
unsigned long timer=0, timerPrev=0, thinkingTime=1000;             


void output(int f)
{ 

  hundreds=f/100;    
  tens=(f-hundreds*100)/10; 
  ones=f-hundreds*100-tens*10;   
  if (hundreds==0) hundreds=10;   
  if (hundreds==10 && tens==0)tens=10; 


  digitalWrite(reg, LOW);       
  SPI.transfer(digit[hundreds]);
  SPI.transfer(pos[0]);      
  digitalWrite(reg, HIGH);
  delay(delayTime);                    


  digitalWrite(reg, LOW); 
  SPI.transfer(digit[tens]);
  SPI.transfer(pos[1]);                
  digitalWrite(reg, HIGH); 
  delay(delayTime); 
        
  digitalWrite(reg, LOW); 
  SPI.transfer(digit[ones]);  
  SPI.transfer(pos[2]);                
  digitalWrite(reg, HIGH); 
  delay(delayTime); 
}



void loop()
{

 timer=millis();
   if(timer-timerPrev>thinkingTime){
      //вычисляем элемент последовательности Фибоначчи номер n      
      f=fnn+fn;
      //элементу номер n-2 присваиваем значение элемента n-1
      fnn=fn;
      //элементу номер n-1 присваиваем значение элемента n
      fn=f;
      //запоминаем время 
      timerPrev=timer;
      //увеличиваем время "раздумий"
      thinkingTime+=f;
      //если f дорос до 1000, возвращаем все как было
      if (f>1000){f=0;fn=1;fnn=0;thinkingTime=1000;}
  }
  //выводим число
  output(f);

  
}

 

 
 
kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Для таких задач есть раздел "Ищу исполнителя". На счёт "дураку понятно", здесь много людей, которые хотят научиться.
Слово 'цифра' это один символ от 0 до 9. Здесь было правильней написать про 4 панели, на каждой своё 3-хзначное число. Если я правильно понял.
Теперь о главном. Предполагаю, что с компа предполагается вводить число и номер панели. Далее кнопками определяется момент, когда число, полученное с компа, нужно отобразить на соответствующей панели. Так?
Да, картинки не отображаются.
ПС Я сам не возьмусь, поскольку у меня нет таких деталек, да и времени. Думаю на форуме есть те, кто это сделает. Я лишь попытался раскрыть тайну ТЗ.

XoXoL007
Offline
Зарегистрирован: 09.01.2015

ясно, спасибо, общащусь в этот раздел, Кнопка - определяет момент когда будет нужда засветить следующее число, на картинку нажать, перебросит на ресурс, сюда по какой то причине загрузить не удалось