Велоспидометр

next-999
Offline
Зарегистрирован: 30.09.2013

Всем привет! Хочу сделать велоспидометр на двух 7-ми сигментных индикаторах в виде восьмерки.

для тех кто поможет с кодом - поделюсь чипами atmega328p-pu(ардуино уно) и au (ардуино нано) - чипы уже с загрузчиком) при необходимости отправлю почтой)

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

не понял. что значит в виде вомьмерки?

http://radioparty.ru/images/stories/scheme_atmel/279-05.gif

типа такого?

next-999
Offline
Зарегистрирован: 30.09.2013

Да именно они там 4 а будут 2)

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

могу помочь просто так. а отправлять или нет сами решайте

1. для начала вам нужно узнать распиновку и тип индикатора: с общим анодом или катодом

2. зачем 2 индикатора?

3. владеете ли вы паяльником?

next-999
Offline
Зарегистрирован: 30.09.2013

я отправлю полюбому что нибудь ;) 

я умею паять обсалютно все) 

мне нужен только код - остальную схему я сам сделаю

Общий - катод (-)

Эта хрень светодиодная

2 индикатора чтобы были десятичные числа

если я буду ехать 30 - как он покажет на одном индикаторе 30км\ч?)

поэтому нужно 2

например еду 10 км\ час - загораються лампы на 1-ом : 3 и 7, на втором 1,2,3,5,6,7

Распиновка:

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

все равно не понял. у вас 2 штуки одноразрядных вроде таких?

http://dic.academic.ru/pictures/wiki/files/83/Seven_segment_02_Pengo.jpg

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

лучше всего магнитный на датчике холла, да и стоит копейки ну и магнит конечно на колесо

а код набросаю

next-999
Offline
Зарегистрирован: 30.09.2013

датчик холла есть, да именно такие, одноразрядные!)

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

ну тогда проблемм нет. схему если тогда сами набросайте, я код набросаю

только сегменты паралельно у каждого разряда, катоды отдельно

 

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

next-999, сделать что-то полезное своими руками конечно прекрасно, только вы ведь понимаете, что по параметрам энергопотребления и габаритам ваше изделие совсем не конкурент промышленным велоспидометрам. И светодиодные индикаторы -это не очень хороший выбор. Несмотря на их кажущуюся яркость -на солнце может быть  видно хуже, чем на жидкокристаллических, к тому же энергопотребление у них  больше. Cуществуют LCD индикаторы, у которых потребление тока -несколько микроампер, имеют втроенные часы, и от одной батарейки работают по нескольку лет, типа ht1613 И ему подобных. Вот на такой штуке сделать, и на тиньке, тогда получится нормальный прибор.

PS: На ардуино встречаются примеры в сети, например http://www.instructables.com/id/Arduino-Bike-Speedometer/ Что интересно автор этой конструкции- девушка :) На этом же сайте есть и другие варианты спидометра.

next-999
Offline
Зарегистрирован: 30.09.2013

 я видел эту статью, там lcd а мне нужно именно индикаторами светодиода. 

next-999
Offline
Зарегистрирован: 30.09.2013

схему я сам соберу, есть большой опыт в этом. в коде опыта очень мало именно поэтому и обратился. Отпишите тогда сюда, может кому тоже пригодиться, обязательно отблагодарю за проделанную работу.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

на самом деле lcd например nokia 1110 в разы лучше на солнце видно. но дело ваше, делаем на светодиодных

next-999
Offline
Зарегистрирован: 30.09.2013

тут дело не в том что лучше а что хуже. просто у меня есть определенная идея. Когда я сделаю я обязательно выложу и вам покажу.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

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


#define sim_A    4 
#define sim_B    5 
#define sim_C    6 
#define sim_D    7 
#define sim_E    8 
#define sim_F    9 
#define sim_G    10 
#define sim_H    11
#define dig_1    12 
#define dig_2    13

volatile unsigned long time = 0;        //Время срабатывания первого датчика
volatile int skorost = 0;    
const float radius = 0.4;
const float pi_n = 3.1415;
volatile float okruznost;


void Start(){
  skorost = (okruznost)/(millis()-time);
  time=millis();
}

  
void setup(){
  pinMode(sim_A, OUTPUT);
  pinMode(sim_B, OUTPUT);
  pinMode(sim_C, OUTPUT);
  pinMode(sim_D, OUTPUT);
  pinMode(sim_E, OUTPUT);
  pinMode(sim_F, OUTPUT);
  pinMode(sim_G, OUTPUT);
  pinMode(sim_H, OUTPUT);
  pinMode(dig_1, OUTPUT);
  pinMode(dig_2, OUTPUT);
  attachInterrupt(0, Start, RISING);     //Прерывание по нарастающему фронту на D2
  okruznost = 2*pi_n*radius*1000;
}

void loop(){
  sped(skorost);
}


void sped(int skor){
  int c2=skor/10;                        // вторая цифра скорости 
  int c1=skor%10;                        // первая цифра скорости
  vivod(c2);
  digitalWrite(dig_1, 0);
  delay(20);
  digitalWrite(dig_1, 1);
  vivod(c1);
  digitalWrite(dig_2, 0);
  delay(20);
  digitalWrite(dig_2, 1);
}

void vivod(int n){
  if((n!=1)&&(n!=4))digitalWrite(sim_A,1);                     // сегмент A
  else digitalWrite(sim_A,0);
  if((n!=5)&&(n!=6))digitalWrite(sim_B,1);                     // сегмент B
  else digitalWrite(sim_B,0);
  if(n!=2)digitalWrite(sim_C,1);                               // сегмент C
  else digitalWrite(sim_C,0);
  if((n!=1)&&(n!=4)&&(n!=7))digitalWrite(sim_D,1);             // сегмент D
  else digitalWrite(sim_D,0);
  if((n==0)||(n==2)||(n==6)||(n==8))digitalWrite(sim_E,1);     // сегмент E
  else digitalWrite(sim_E,0);
  if((n!=1)&&(n!=2)&&(n!=3)&&(n!=7))digitalWrite(sim_F,1);     // сегмент F
  else digitalWrite(sim_F,0);
  if((n!=0)&&(n!=1)&&(n!=7))digitalWrite(sim_G,1);             // сегмент G
  else digitalWrite(sim_G,0);
}


next-999
Offline
Зарегистрирован: 30.09.2013

так, а почему подключено только 10 выходов? если должно быть 14 подключено.

7 в 1 и 7 в другом

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

писал уже ранее что сегменты двух индикаторов паралельно (сегмент А первого индикатора подключен к сегменту А второго и все подключено к ардуине на 4 вывод через резистор, а каторы обоих индикаторов по отдельнсти, каждый через транзистор на 12 и 13 выводы). а вообще точку можно убрать если показываем только целую часть


#define sim_A    4 
#define sim_B    5 
#define sim_C    6 
#define sim_D    7 
#define sim_E    8 
#define sim_F    9 
#define sim_G    10 
#define dig_1    12 
#define dig_2    13

volatile unsigned long time = 0;        //Время срабатывания первого датчика
volatile int skorost = 0;    
const float radius = 0.4;
const float pi_n = 3.1415;
volatile float okruznost;


void Start(){
  skorost = (okruznost)/(millis()-time);
  time=millis();
}

  
void setup(){
  pinMode(sim_A, OUTPUT);
  pinMode(sim_B, OUTPUT);
  pinMode(sim_C, OUTPUT);
  pinMode(sim_D, OUTPUT);
  pinMode(sim_E, OUTPUT);
  pinMode(sim_F, OUTPUT);
  pinMode(sim_G, OUTPUT);
  pinMode(sim_H, OUTPUT);
  pinMode(dig_1, OUTPUT);
  pinMode(dig_2, OUTPUT);
  attachInterrupt(0, Start, RISING);     //Прерывание по нарастающему фронту на D2
  okruznost = 2*pi_n*radius*1000;
}

void loop(){
  sped(skorost);
}


void sped(int skor){
  int c2=skor/10;                        // вторая цифра скорости 
  int c1=skor%10;                        // первая цифра скорости
  vivod(c2);
  digitalWrite(dig_1, 0);
  delay(20);
  digitalWrite(dig_1, 1);
  vivod(c1);
  digitalWrite(dig_2, 0);
  delay(20);
  digitalWrite(dig_2, 1);
}

void vivod(int n){
  if((n!=1)&&(n!=4))digitalWrite(sim_A,1);                     // сегмент A
  else digitalWrite(sim_A,0);
  if((n!=5)&&(n!=6))digitalWrite(sim_B,1);                     // сегмент B
  else digitalWrite(sim_B,0);
  if(n!=2)digitalWrite(sim_C,1);                               // сегмент C
  else digitalWrite(sim_C,0);
  if((n!=1)&&(n!=4)&&(n!=7))digitalWrite(sim_D,1);             // сегмент D
  else digitalWrite(sim_D,0);
  if((n==0)||(n==2)||(n==6)||(n==8))digitalWrite(sim_E,1);     // сегмент E
  else digitalWrite(sim_E,0);
  if((n!=1)&&(n!=2)&&(n!=3)&&(n!=7))digitalWrite(sim_F,1);     // сегмент F
  else digitalWrite(sim_F,0);
  if((n!=0)&&(n!=1)&&(n!=7))digitalWrite(sim_G,1);             // сегмент G
  else digitalWrite(sim_G,0);
}

и в одном не 7 а 8 (если без точки), тут сделана динамическая индикация, понадобиться всего 9 выводов

next-999
Offline
Зарегистрирован: 30.09.2013

Да точки и не будет. блин, я думал то что там подключаеться тупо каждый вывод к каждой лампочке. Тут мне определнно нужна помощ со схемой а то я уже чуток запутался)))

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

так написал уже как подключать.

вот картинка что я вам пытался объяснить

http://rln.nnov.ru/eph/images/4d1a7d9ab252acf2bdf48e10d7ea3fbd.jpg

+ надо формулу править. там по моему скорость неверно считается. сделаю попозже сейчас занят, соберите пока железо

next-999
Offline
Зарегистрирован: 30.09.2013

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

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

я думал уже все есть осталось собрать и зашить программу

next-999
Offline
Зарегистрирован: 30.09.2013

Я думал что код будет писаться как минимум несколько дней) Как только все придет сразу же протестирую и отпишусь в теме

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

да нет. надо подумать, формула неверная немного, рассчитал врде в метрах в секунду. надо посмотреть. если точно в метрах в секунду надо просто домножить на 3,6 чтобы получить километры в час

next-999
Offline
Зарегистрирован: 30.09.2013

Да вы пока поработайте с кодом никуда не спеша))) 

Мне только интересно. как работать будут 2 модуля если они подключены к одной цепи?

на обоих дисплеях будут показывать одинаковые цифры вроде как

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

нет. почитайте про динамическую индикацию. вот например

http://radiokot.ru/start/mcu_fpga/avr/15/

повторяю катоды отдельно!!!

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

next-999
Offline
Зарегистрирован: 30.09.2013

Нифига, прикольно, я не знал про такое)))Спасибо за пояснение)

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

например для 4 разрядов с обычным подключением нужно 28 пинов, для динамической нужно 11 пинов. разница чувствуется

next-999
Offline
Зарегистрирован: 30.09.2013

Да, теперь я понимаю зачем то придумали и как это работает)

next-999
Offline
Зарегистрирован: 30.09.2013

Привет, я готов собирать его)) так, я закачал код в ардуино, мне датчик хола подключать к 0 аналогу? 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

нет на прерывание 2 или 3 пин

next-999
Offline
Зарегистрирован: 30.09.2013

Не работает(( все подключил согласно картинке 

next-999
Offline
Зарегистрирован: 30.09.2013

когда прирывается 2-3 нечего не происходит, висит вот такая фигня  и нече не меняется(

(Нижний сигмент у второго дисплея не работает сам светодиод)

значение показывает обе шестерки зеркальные)

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

датчик холла на 2 пин повесили? надо еще подтяжку вроде включить

почему на индикаторах разные значения? может подключили по разному?

next-999
Offline
Зарегистрирован: 30.09.2013

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

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

И кстати

когда я прошиваю чип - появляются циферки,когда я отключаю от питания и заново подключаю - то чтобы появились циферки приходится заново прошивать

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

насчет перепрошивки не понял

next-999
Offline
Зарегистрирован: 30.09.2013

расскажу подробно:

я подключаю ардуино ЮЗБ, открываю программу ардуино, заливаю код, загораются непонятные символы, при замыкании 2рого порта меняются значния но они не похожи на цифры, и значенния меняются не так как на велоспедометре. если я например быстро замыкаю, и резко перестаю, остается одно и то же значение, т.е  оно не уменьшается постепенно. Если я ардуино отключаю от питания, и подключаю снова - то на дисплеях нечего не горит, и чтобы заново загорелись экраны нужно снова заливать код

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

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

next-999
Offline
Зарегистрирован: 30.09.2013

Хорошо, еще подробнее:

Я беру ардуино, беру провод USB, вставляю его в ардуино, открываю программу, там вписываю в строчку код и нажимаю "Загрузить" , после того как прошла загрузка, у меня на 2-х дисплеях появляются непонятные значения, когда я провожу магнитом мимо датчика холла - значения меняются (но какие они это не понятно) всякие палочки и черточки, если я например провожу магнитом быстро, а потом резко перестаю им водить, то значение резко остается таким какие было.

ЕСЛИ я отключаю ардуино от питания и снова подключаю - то цифры уже не показываются, и чтобыони показались нужно снова нажимать "загрузить"

Например в спидометре когда я раскручиваю колесо у меня показывает 00, 02,05,10,14,20,25 и тд если колесо прям резко останавливаю то оно 25,20,15,5,0.

у меня показывает : _- _- , -|=_, и тд

если я резко перестаю проводить датчиком то оно оставляет последнее значение - не падая в 0.

Мне нужно помочь с распиновкой, видимо не верно подключены провода, нужно поправить в коде распиновку проводов, по схеме они подключены так : 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

понятно. чтобы понятнее было нужно для начала добиться стабильной работы от инидкаторов. без этого дальше глупо что то делать. сделайте вывод цифра от 0 до 99 например и посмотрите на дисплее

next-999
Offline
Зарегистрирован: 30.09.2013

можно мне код если не трудно?) от 0 до 99) а то я совсем даун в коде)

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

блин я тоже сейчас даун. под пивом. если будет возможность накидаю

next-999
Offline
Зарегистрирован: 30.09.2013

Да если не трудно) я теперь без вас никуда) свои благодарности обязательно вышлю по почте как только все сделаю четко)))

ZagZag
Offline
Зарегистрирован: 08.05.2014

wheel_round_cm = константа - внешняя длина окружности колеса, в сантиметрах

В прошивке нужно реализовать 2 прерывания:

1. по каждому срабатыванию сенсора, для увеличения счетчика пройденного расстояния

{

    distance_cm += wheel_round_cm;

    // Тут проверить на переполнение ;)

}

2. по таймеру, для обновления показаний на экране

{

    /* WatchDog Timer срабатывает каждые 8 секунд */

    float speed_cm_per_sec = distance_cm / 8; // Скорость в сантиметрах в секунду (см/с)

}

Потом, перевести скорость из см/с в км/ч

см/ч = см/с * 3600

м/ч = см/ч / 100

км/ч = м/ч / 1000

или сразу км/ч = см/с * 0.036

Пример:

distance_cm = 4440; // Нащелкало сантиметров за 8 секунд

speed_kmh = 4440 / 8 * 0.036 = 19.98 км/ч

Калькулятор скоростей Online

next-999
Offline
Зарегистрирован: 30.09.2013

я несмогу ее сам написать:( Мне бы готовую.. готов отблагодарить за это. + я думаю она много кому пригодится

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

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

#define sim_A    4 
#define sim_B    5 
#define sim_C    6 
#define sim_D    7 
#define sim_E    8 
#define sim_F    9 
#define sim_G    10 
#define dig_1    12 
#define dig_2    13

volatile unsigned long time = 0;        //Время срабатывания первого датчика
volatile int skorost = 0;    
const float radius = 0.4;
const float pi_n = 3.1415;
volatile float okruznost;


void Start(){
  skorost = (okruznost)/(millis()-time);
  time=millis();
}

  
void setup(){
  pinMode(sim_A, OUTPUT);
  pinMode(sim_B, OUTPUT);
  pinMode(sim_C, OUTPUT);
  pinMode(sim_D, OUTPUT);
  pinMode(sim_E, OUTPUT);
  pinMode(sim_F, OUTPUT);
  pinMode(sim_G, OUTPUT);
  pinMode(dig_1, OUTPUT);
  pinMode(dig_2, OUTPUT);
  attachInterrupt(0, Start, RISING);     //Прерывание по нарастающему фронту на D2
  okruznost = 2*pi_n*radius*1000;
}

void loop(){
  //sped(skorost);
  for(int i=0;i<100;i++){
    sped(i);
    delay(500);
  }
}


void sped(int skor){
  int c2=skor/10;                        // вторая цифра скорости 
  int c1=skor%10;                        // первая цифра скорости
  vivod(c2);
  digitalWrite(dig_1, 0);
  delay(20);
  digitalWrite(dig_1, 1);
  vivod(c1);
  digitalWrite(dig_2, 0);
  delay(20);
  digitalWrite(dig_2, 1);
}

void vivod(int n){
  if((n!=1)&&(n!=4))digitalWrite(sim_A,1);                     // сегмент A
  else digitalWrite(sim_A,0);
  if((n!=5)&&(n!=6))digitalWrite(sim_B,1);                     // сегмент B
  else digitalWrite(sim_B,0);
  if(n!=2)digitalWrite(sim_C,1);                               // сегмент C
  else digitalWrite(sim_C,0);
  if((n!=1)&&(n!=4)&&(n!=7))digitalWrite(sim_D,1);             // сегмент D
  else digitalWrite(sim_D,0);
  if((n==0)||(n==2)||(n==6)||(n==8))digitalWrite(sim_E,1);     // сегмент E
  else digitalWrite(sim_E,0);
  if((n!=1)&&(n!=2)&&(n!=3)&&(n!=7))digitalWrite(sim_F,1);     // сегмент F
  else digitalWrite(sim_F,0);
  if((n!=0)&&(n!=1)&&(n!=7))digitalWrite(sim_G,1);             // сегмент G
  else digitalWrite(sim_G,0);
}

 

next-999
Offline
Зарегистрирован: 30.09.2013

Да, подключил все верно согластно картинке как тут 

показываются непонятные циферки( 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

попробуйте два кода. один из них должен показать 72 если вы все правильно подключили

первый

#define sim_A    4 
#define sim_B    5 
#define sim_C    6 
#define sim_D    7 
#define sim_E    8 
#define sim_F    9 
#define sim_G    10 
#define dig_1    12 
#define dig_2    13

volatile unsigned long time = 0;        //Время срабатывания первого датчика
volatile int skorost = 0;    
const float radius = 0.4;
const float pi_n = 3.1415;
volatile float okruznost;


void Start(){
  skorost = (okruznost)/(millis()-time);
  time=millis();
}

  
void setup(){
  pinMode(sim_A, OUTPUT);
  pinMode(sim_B, OUTPUT);
  pinMode(sim_C, OUTPUT);
  pinMode(sim_D, OUTPUT);
  pinMode(sim_E, OUTPUT);
  pinMode(sim_F, OUTPUT);
  pinMode(sim_G, OUTPUT);
  pinMode(dig_1, OUTPUT);
  pinMode(dig_2, OUTPUT);
  attachInterrupt(0, Start, RISING);     //Прерывание по нарастающему фронту на D2
  okruznost = 2*pi_n*radius*1000;
}

void loop(){
  //sped(skorost);
    sped(72);
}


void sped(int skor){
  int c2=skor/10;                        // вторая цифра скорости 
  int c1=skor%10;                        // первая цифра скорости
  vivod(c2);
  digitalWrite(dig_1, 0);
  delay(20);
  digitalWrite(dig_1, 1);
  vivod(c1);
  digitalWrite(dig_2, 0);
  delay(20);
  digitalWrite(dig_2, 1);
}

void vivod(int n){
  if((n!=1)&&(n!=4))digitalWrite(sim_A,1);                     // сегмент A
  else digitalWrite(sim_A,0);
  if((n!=5)&&(n!=6))digitalWrite(sim_B,1);                     // сегмент B
  else digitalWrite(sim_B,0);
  if(n!=2)digitalWrite(sim_C,1);                               // сегмент C
  else digitalWrite(sim_C,0);
  if((n!=1)&&(n!=4)&&(n!=7))digitalWrite(sim_D,1);             // сегмент D
  else digitalWrite(sim_D,0);
  if((n==0)||(n==2)||(n==6)||(n==8))digitalWrite(sim_E,1);     // сегмент E
  else digitalWrite(sim_E,0);
  if((n!=1)&&(n!=2)&&(n!=3)&&(n!=7))digitalWrite(sim_F,1);     // сегмент F
  else digitalWrite(sim_F,0);
  if((n!=0)&&(n!=1)&&(n!=7))digitalWrite(sim_G,1);             // сегмент G
  else digitalWrite(sim_G,0);
}

второй

#define sim_A    4 
#define sim_B    5 
#define sim_C    6 
#define sim_D    7 
#define sim_E    8 
#define sim_F    9 
#define sim_G    10 
#define dig_1    12 
#define dig_2    13

volatile unsigned long time = 0;        //Время срабатывания первого датчика
volatile int skorost = 0;    
const float radius = 0.4;
const float pi_n = 3.1415;
volatile float okruznost;


void Start(){
  skorost = (okruznost)/(millis()-time);
  time=millis();
}

  
void setup(){
  pinMode(sim_A, OUTPUT);
  pinMode(sim_B, OUTPUT);
  pinMode(sim_C, OUTPUT);
  pinMode(sim_D, OUTPUT);
  pinMode(sim_E, OUTPUT);
  pinMode(sim_F, OUTPUT);
  pinMode(sim_G, OUTPUT);
  pinMode(dig_1, OUTPUT);
  pinMode(dig_2, OUTPUT);
  attachInterrupt(0, Start, RISING);     //Прерывание по нарастающему фронту на D2
  okruznost = 2*pi_n*radius*1000;
}

void loop(){
  //sped(skorost);
    sped(72);
}


void sped(int skor){
  int c2=skor/10;                        // вторая цифра скорости 
  int c1=skor%10;                        // первая цифра скорости
  vivod(c2);
  digitalWrite(dig_1, 1);
  delay(20);
  digitalWrite(dig_1, 0);
  vivod(c1);
  digitalWrite(dig_2, 1);
  delay(20);
  digitalWrite(dig_2, 0);
}

void vivod(int n){
  if((n!=1)&&(n!=4))digitalWrite(sim_A,0);                     // сегмент A
  else digitalWrite(sim_A,1);
  if((n!=5)&&(n!=6))digitalWrite(sim_B,0);                     // сегмент B
  else digitalWrite(sim_B,1);
  if(n!=2)digitalWrite(sim_C,0);                               // сегмент C
  else digitalWrite(sim_C,1);
  if((n!=1)&&(n!=4)&&(n!=7))digitalWrite(sim_D,0);             // сегмент D
  else digitalWrite(sim_D,1);
  if((n==0)||(n==2)||(n==6)||(n==8))digitalWrite(sim_E,0);     // сегмент E
  else digitalWrite(sim_E,1);
  if((n!=1)&&(n!=2)&&(n!=3)&&(n!=7))digitalWrite(sim_F,0);     // сегмент F
  else digitalWrite(sim_F,1);
  if((n!=0)&&(n!=1)&&(n!=7))digitalWrite(sim_G,0);             // сегмент G
  else digitalWrite(sim_G,1);
}

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

вот на всякий случай проверил в протеусе последние 2 кода. один под общий катод, другой под общий анод (ну мало ли вы ошиблись с типом индикатора)

так что все работает. добивайтесь того же

если все правильно подключили значит один из 2 заработает

next-999
Offline
Зарегистрирован: 30.09.2013

незнаюче за глюк был, когдазагрузил код он показал 72, потом обратно тот загрузил код  -появились нормальные цифры и они меняются) ооднако есть другая проблема про которую я говорил

что при отключении арудино от компа и снова при подключении цифры не загораются, приходится снова загружать прошивку

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

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

next-999
Offline
Зарегистрирован: 30.09.2013

Платы 2 оригинал, пробовал на одной и другой, кабель тоже в порядке. по сути при подключении к питанию должны автоматом загоратся нолики. а они горят только после прошивки. такое ощущение что прошивка работает толькотогда когда он подключен к компу

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

теперь нули будут с самого начала

#define sim_A    4 
#define sim_B    5 
#define sim_C    6 
#define sim_D    7 
#define sim_E    8 
#define sim_F    9 
#define sim_G    10 
#define sim_H    11
#define dig_1    12 
#define dig_2    13

volatile unsigned long time = 0;        //Время срабатывания первого датчика
volatile int skorost = 0;    
const float radius = 0.4;
const float pi_n = 3.1415;
volatile float okruznost;


void Start(){
  skorost = (okruznost)/(millis()-time);
  time=millis();
}

  
void setup(){
  pinMode(sim_A, OUTPUT);
  pinMode(sim_B, OUTPUT);
  pinMode(sim_C, OUTPUT);
  pinMode(sim_D, OUTPUT);
  pinMode(sim_E, OUTPUT);
  pinMode(sim_F, OUTPUT);
  pinMode(sim_G, OUTPUT);
  pinMode(sim_H, OUTPUT);
  pinMode(dig_1, OUTPUT);
  pinMode(dig_2, OUTPUT);
  attachInterrupt(0, Start, RISING);     //Прерывание по нарастающему фронту на D2
  okruznost = 2*pi_n*radius*1000;
  skorost = 0;
}

void loop(){
  sped(skorost);
}


void sped(int skor){
  int c2=skor/10;                        // вторая цифра скорости 
  int c1=skor%10;                        // первая цифра скорости
  vivod(c2);
  digitalWrite(dig_1, 0);
  delay(20);
  digitalWrite(dig_1, 1);
  vivod(c1);
  digitalWrite(dig_2, 0);
  delay(20);
  digitalWrite(dig_2, 1);
}

void vivod(int n){
  if((n!=1)&&(n!=4))digitalWrite(sim_A,1);                     // сегмент A
  else digitalWrite(sim_A,0);
  if((n!=5)&&(n!=6))digitalWrite(sim_B,1);                     // сегмент B
  else digitalWrite(sim_B,0);
  if(n!=2)digitalWrite(sim_C,1);                               // сегмент C
  else digitalWrite(sim_C,0);
  if((n!=1)&&(n!=4)&&(n!=7))digitalWrite(sim_D,1);             // сегмент D
  else digitalWrite(sim_D,0);
  if((n==0)||(n==2)||(n==6)||(n==8))digitalWrite(sim_E,1);     // сегмент E
  else digitalWrite(sim_E,0);
  if((n!=1)&&(n!=2)&&(n!=3)&&(n!=7))digitalWrite(sim_F,1);     // сегмент F
  else digitalWrite(sim_F,0);
  if((n!=0)&&(n!=1)&&(n!=7))digitalWrite(sim_G,1);             // сегмент G
  else digitalWrite(sim_G,0);
}