FA9KM


    -- Грязное это дело, -- сказал капитан. -- Но вы правы,
       деньги спасут нашу офицерскую честь.

       Клайв Касслер, Средиземноморский пират

Починеные скетчи для Hackatronics – Arduino Multi-function Shield
-----------------------------------------------------------------

Напряжение на потенциометре на 4х7-сегментном индикаторе
--------------------------------------------------------

Замеченные дефекты

1. Семисегментный индикатор piggy-back шилда
   закорачивается экраном гнезда USB.
   Исправлено -- прокладка из изоленты.

2. Функции Serial.print, Serial.println имеют сайд-эффект,
   воздействуя на функцию shiftOut.
   Исправлено -- удалено использование класса Serial.

Потенциометр
------------

  #define LATCH_DIO 4
  #define CLK_DIO 7
  #define DATA_DIO 8

  #define Pot1 0

  const byte SEGMENT_MAP[] =
    {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};
  const byte SEGMENT_SELECT[] = {0xF1,0xF2,0xF4,0xF8};

  void setup () {
    pinMode(LATCH_DIO,OUTPUT);
    pinMode(CLK_DIO,OUTPUT);
    pinMode(DATA_DIO,OUTPUT);
  }

  void loop() {
    WriteNumber(analogRead(Pot1));
  }

  void WriteNumber(int Number) {
    WriteNumberToSegment(0 , Number / 1000);
    WriteNumberToSegment(1 , (Number / 100) % 10);
    WriteNumberToSegment(2 , (Number / 10) % 10);
    WriteNumberToSegment(3 , Number % 10);
  }

  void WriteNumberToSegment(byte Segment, byte Value) {
    digitalWrite(LATCH_DIO,LOW);
    shiftOut(DATA_DIO, CLK_DIO, MSBFIRST, SEGMENT_MAP[Value]);
    shiftOut(DATA_DIO, CLK_DIO, MSBFIRST, SEGMENT_SELECT[Segment] );
    digitalWrite(LATCH_DIO,HIGH);
  }

Фонт
----
/*
   --        --   --        --   --   --   --   --
  |  |    |    |    | |  | |    |       | |  | |  |
             --   --   --   --   --        --   --
  |  |    | |       |    |    | |  |    | |  |    |
   --        --   --        --   --        --   --
   --                  --   --   --
  |  | |            | |    |    |  | |    |       |
   --   --   --   --   --   --   --   --
  |  | |  | |    |  | |    |       | |  | |       |
        --   --   --   --        --             --
   --        --             --   --        --
       |                   |  | |  |      |    |
   --        --   --   --   --   --   --   --   --
       |         |  | |  | |       | |       | |
   --   --   --        --                  --   --
        --   --   --        --
                      |  |
        --   --   --   --   --
  |  |                   |
   --   --   --   --   --   --
 */

  #define LATCH_DIO 4
  #define CLK_DIO 7
  #define DATA_DIO 8

  // Note: Hackatronics undefined characters preserved (0xB6)

  const byte SEGMENT_MAP_FONT[] = {
      0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90,
      0x88, 0x83, 0xA7, 0xA1, 0x86, 0x8E, 0x90, 0x8B, 0xCF, 0xF1,
      0xB6, 0xC7, 0xB6, 0xAB, 0xA3, 0x8C, 0x98, 0xAF, 0x92, 0x87,
      0xE3, 0xB6, 0xB6, 0xB6, 0x91, 0xB6
  };

  const byte SEGMENT_SELECT[] =   { 0xF1, 0xF2, 0xF4, 0xF8};

  unsigned long cur_ms_count;
  unsigned long last_ms_count;
  int c;

  void write_code_to_segment(byte asegment, byte avalue) {
    digitalWrite(LATCH_DIO,LOW);
    shiftOut(DATA_DIO, CLK_DIO, MSBFIRST, avalue);
    shiftOut(DATA_DIO, CLK_DIO, MSBFIRST, SEGMENT_SELECT[asegment] );
    digitalWrite(LATCH_DIO,HIGH);
  }

  void setup () {
    pinMode(LATCH_DIO, OUTPUT);
    pinMode(CLK_DIO, OUTPUT);
    pinMode(DATA_DIO, OUTPUT);

    cur_ms_count = millis();
    last_ms_count = c = 0;
  }

  void loop() {
    cur_ms_count = millis();

    if(cur_ms_count - last_ms_count > 500) {
      last_ms_count = cur_ms_count;
      c = c < 35 ? ++c : 0;
    }

    for (int i = 0; i<4; i++)
      write_code_to_segment( i, SEGMENT_MAP_FONT[ (c+i) % 36]);
  }

------

  // Font contributed by Vadim Vürts, Edgar Silickis, Sergei Rjabcev

  const byte SEGMENT_MAP_FONT[] = {
      0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90,
      0x88, 0x83, 0xA7, 0xA1, 0x86, 0x8E, 0xC2, 0x8B, 0xE6, 0xF2,
      0x89, 0xC7, 0xC9, 0xAB, 0xA3, 0x8C, 0x98, 0xAF, 0x92, 0x87,
      0xC1, 0xE3, 0x81, 0xEB, 0x91, 0xD2
  };

Ccылки
------

PDF: Hackatronics-Arduino Multi-function Shield

  http://files.cohesivecomputing.co.uk
       /Hackatronics-Arduino-Multi-function-Shield.pdf

Multi-Function Shield and RTC with ARDUINO

  https://www.youtube.com/watch?v=vbQ3dyM0k-4
  https://drive.google.com/file/d
        /0B31A6BCOEXDlb1AxZURxa1IxYlE/view?pli=1

Digital Clock Using Arduino Multi-function Shield

  https://www.youtube.com/watch?v=LPuy5DUbACU
  http://www.cohesivecomputing.co.uk/hackatronics
       /arduino-multi-function-shield/