кто в этом что-то шарит?

Тема в разделе "Arduino & Shields", создана пользователем NorimyXXXO, 16 май 2016.

  1. NorimyXXXO

    NorimyXXXO Нуб

    Разработать скетч с четырехразрядным индикатором так, чтобы справа налево передвигалось бы в бесконечном цикле число «10».
    Подключение через сдвиговый регитор, общий анод.
     
  2. Tomasina

    Tomasina Сушитель лампочек Модератор

    число "1" уже умеете выводить на индикатор?
     
  3. NorimyXXXO

    NorimyXXXO Нуб

    да
     
  4. ostrov

    ostrov Гуру

    А "0"? )
     
  5. NorimyXXXO

    NorimyXXXO Нуб

    к чему поставлен вопрос понятно, засчитано) но неужели никто не может помочь??? все только то и делают, что ржут и стебут
     
  6. ostrov

    ostrov Гуру

    Так вы расскажите на чем застряли то? Цифры выводить умеете, не знаете как их менять или что? Тут подскажут, но за готовой программой вам в другой раздел.
     
  7. NorimyXXXO

    NorimyXXXO Нуб

    не знаю( может поможете строчкой-другой кода??
     
  8. ostrov

    ostrov Гуру

    Уточните что уже есть и что не работает конкретно?
     
  9. NorimyXXXO

    NorimyXXXO Нуб

    всё есть, ума не хватает((( а если по-существу, то не могу вывести бесконечный цикл. что бы смена происходила так (возьму для примера число 11) 1100-0110-0011-1001-1100
     
  10. ostrov

    ostrov Гуру

    Выводите на индикатор динамически?
     
  11. NorimyXXXO

    NorimyXXXO Нуб

    да
     
  12. ostrov

    ostrov Гуру

    Тем более не понятно в чем проблема. Числа которые выводите на индикатор в виде чего сформированы? В виде массива или четырех переменных?
     
  13. NorimyXXXO

    NorimyXXXO Нуб

    В виде четырех переменных. скорее всего это я что-то криво собрал(( если есть пошаговое подключение через регистр, а то я не смог найти(((
     
  14. Tomasina

    Tomasina Сушитель лампочек Модератор

    за весь день мы так и не увидели как у тебя программно все реализовано ;)
    Выложи свой код, где цифра "1" на первом индикаторе, а цифра "0" - на третьем.
     
  15. ostrov

    ostrov Гуру

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

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

    NorimyXXXO Нуб

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

    #include <SPI.h>
    // провод CS подсоединяем к 8-му пину Arduino
    enum { reg = 8 };


    void setup()
    {
    // инициализируем SPI
    SPI.begin();
    // определяем 8-й пин Arduino как выход
    pinMode(reg, OUTPUT);
    }
    //мы разобъем число на тысячи, сотни, десятки и единицы, объявляем их здесь
    int thousand=0, hundreds=0, tens=0, ones=0;
    //время отображения каждой цифры
    int delayTime=7;
    //коды цифр на семисегментнике (0-9 и пустота)
    static uint8_t digit[11] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF};
    // коды позиций зажигаемого семисегментника (крайний, левый, центральный, правый)
    static uint8_t pos[4]= {0xE7,0xEB,0xEB,0xF3};


    void loop()
    {
    //число, которое будем выводить
    int f=1000;
    //выделяем тысячи
    thousand=f;
    //выделяем сотни
    hundreds=f/100;
    //выделяем десятки
    tens=(f-hundreds*100)/10;
    //выделяем единицы
    ones=f-hundreds*100-tens*10;
    //если сотен нет, не отображаем ничего в 3м разряде
    if (hundreds==0) hundreds=10;
    //если сотен и десятков нет, не отображаем ничего во 2м разряде
    if (hundreds==10 && tens==0)tens=10;


    //начинаем передачу по SPI
    digitalWrite(reg, LOW);
    //передаем код цифры, соответствующей разряду тисяч
    SPI.transfer(digit[thousand]);
    //выбираем крайний 7-сегментник
    SPI.transfer(pos[0]);
    //заканчиваем передачу
    digitalWrite(reg, HIGH);
    //пауза, равная delayTime
    delay(delayTime);

    //передаем код цифры, соответствующей разряду сотен
    SPI.transfer(digit[hundreds]);
    //выбираем левый 7-сегментник
    SPI.transfer(pos[1]);
    //заканчиваем передачу
    digitalWrite(reg, HIGH);
    //пауза, равная delayTime
    delay(delayTime);


    //передаем код цифры, соответствующей разряду десятков
    digitalWrite(reg, LOW);
    SPI.transfer(digit[tens]);
    //выбираем центральный 7-сегментник
    SPI.transfer(pos[2]);
    digitalWrite(reg, HIGH);
    delay(delayTime);

    //передаем код цифры, соответствующей разряду единиц
    digitalWrite(reg, LOW);
    SPI.transfer(digit[ones]);
    //выбираем правый 7-сегментник
    SPI.transfer(pos[3]);
    digitalWrite(reg, HIGH);
    delay(delayTime);
    }
     
  17. NorimyXXXO

    NorimyXXXO Нуб

    да вот хреново оно всё...
     
  18. ostrov

    ostrov Гуру

    В тег код вставьте. Слева от кавычек листок со стрелками, жмите, откроется окно, туда и суйте.
     
  19. NorimyXXXO

    NorimyXXXO Нуб

    Код (C++):
    // подключаем библиотеку SPI

    #include <SPI.h>
    // провод CS подсоединяем к 8-му пину Arduino
    enum { reg = 8 };


    void setup()
    {
    // инициализируем SPI
      SPI.begin();  
    // определяем 8-й пин Arduino как выход      
      pinMode(reg, OUTPUT);
    }
    //мы разобъем число на тысячи, сотни, десятки и единицы, объявляем их здесь
    int thousand=0, hundreds=0, tens=0, ones=0;
    //время отображения каждой цифры      
    int delayTime=7;      
    //коды цифр на семисегментнике (0-9 и пустота)  
    static uint8_t digit[11] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF};
    // коды позиций зажигаемого семисегментника (крайний, левый, центральный, правый)
    static uint8_t pos[4]= {0xE7,0xEB,0xEB,0xF3};            


    void loop()
    {
    //число, которое будем выводить
      int f=1000;
    //выделяем тысячи  
      thousand=f;                          
    //выделяем сотни  
      hundreds=f/100;  
    //выделяем десятки                  
      tens=(f-hundreds*100)/10;
    //выделяем единицы          
      ones=f-hundreds*100-tens*10;  
    //если сотен нет, не отображаем ничего в 3м разряде      
      if (hundreds==0) hundreds=10;  
    //если сотен и десятков нет, не отображаем ничего во 2м разряде    
      if (hundreds==10 && tens==0)tens=10;


    //начинаем передачу по SPI
      digitalWrite(reg, LOW);
     
    //передаем код цифры, соответствующей разряду тисяч      
      SPI.transfer(digit[thousand]);
    //выбираем крайний 7-сегментник      
      SPI.transfer(pos[0]);    
    //заканчиваем передачу          
      digitalWrite(reg, HIGH);
    //пауза, равная delayTime            
      delay(delayTime);  
           
    //передаем код цифры, соответствующей разряду сотен      
      SPI.transfer(digit[hundreds]);
    //выбираем левый 7-сегментник      
      SPI.transfer(pos[1]);    
    //заканчиваем передачу          
      digitalWrite(reg, HIGH);
    //пауза, равная delayTime            
      delay(delayTime);                  


    //передаем код цифры, соответствующей разряду десятков        
      digitalWrite(reg, LOW);
      SPI.transfer(digit[tens]);
    //выбираем центральный 7-сегментник          
      SPI.transfer(pos[2]);              
      digitalWrite(reg, HIGH);
      delay(delayTime);
           
    //передаем код цифры, соответствующей разряду единиц
      digitalWrite(reg, LOW);
      SPI.transfer(digit[ones]);
    //выбираем правый 7-сегментник        
      SPI.transfer(pos[3]);              
      digitalWrite(reg, HIGH);
      delay(delayTime);
     
    }
     
     
  20. NorimyXXXO

    NorimyXXXO Нуб

    вставил, забыл отписать((