Go Down

### Topic: 16-seg 5 Way Switch (Read 1 time)previous topic - next topic

#### 3dprinter

##### Nov 21, 2011, 05:17 pmLast Edit: Nov 21, 2011, 05:21 pm by Msquare Reason: 1

Question:
Quote
Hi!
Being a novice, for the displaying part of your test here: is? there anywhere I could read a schematic (limiting resistors and all) on how to hook up this 16seg digit to my arduino? Most greatful...

`/* Driving the Alpha 16seg display from the 5way switch  Requires the Mega (number of pins)     Pinout          Arduino pins   --2--  -19--     -30-  -35-  |  \   |  /  |  | \   |  /  |         +-v-+  4  3  20 18 17  34 32 31 33 37   14 U |   | R 18  |   \  | /   |  |   \ | /   |    15 E | * | Com GND   --6--  --15-     -36-  -39-     16 L |   | D 17  |   /  | \   |  |   / | \   |         +---+  7  8  10 13 14  38 42 44 43 41  | /    |   \ |  | /   |  \  |   --9--  --12-     -40-  -45-     5, 15 +veMode 0 : Just flash segments on Alpha display         (Serial "echo" of 5Way)Mode 1 : "Echo" joy stick position with spokes in middle. E lights edge, tooMode 2 : Show Alphabet, L/R scroll through, U/D Digit/Alpha (Not Yet Written)*/#define MODE1const byte AP[] = { // arranged: outer ring, inner spokes, clockwise  35, 37, 41, 45, 40, 38, 34, 30,  31, 33, 39, 43, 44, 42, 36, 32  } ;const byte WP[] = { // arranged U-R-D-L-E (clockwise)  14, 18, 17, 16, 15 } ;  const byte ZP[] = { // Maps calculated switch value to a segment entry (inner spokes)  0, 8, 10, 9, 12, 0, 11, 0, 14, 15, 0, 0, 13 } ;const byte QP[] = { // Maps calculated switch value to two segment entries (outer ring)  7,0, 1,2, 0,1, 3,4, 0,0, 2,3, 0,0, 5,6, 6,7, 0,0, 0,0, 4,5  } ;int Q = 0 ;void setup() {  pinMode(13,OUTPUT);  // Setup for driving 16 output ports  for (int p=0; p<16; p++) {    pinMode(AP[p],OUTPUT) ;    digitalWrite(AP[p],HIGH) ; // display is active LOW (common Anode)  }  // Setup for driving 5 input ports  for (int p=0; p<5; p++)  {    pinMode(WP[p],INPUT) ;    digitalWrite(WP[p],HIGH) ;  // Pullup resistor  }//  Serial.begin(9600) ;}void loop() {#ifdef MODE0  for (int p=0; p<16; p++) {    // clockwise wheel    digitalWrite(AP[p],LOW) ;    delay(100);    digitalWrite(AP[p],HIGH) ;    digitalWrite(13,(p%2)?LOW:HIGH) ; // blink  }#endif#ifdef MODE1  byte Z = 0 ;  for (int q=0; q<16; q++) digitalWrite(AP[q],HIGH) ; // turn everything off  for (int p=0; p<4; p++)    if (digitalRead(WP[p])==LOW)  Z += 1<<p ;//  delay(1000) ; Serial.print(Z,DEC) ; Serial.print(":");Serial.print(ZP[Z],DEC) ; Serial.print(" ");  if (Z) {    digitalWrite(AP[ZP[Z]],LOW) ;      if (digitalRead(WP[4])==LOW) {      digitalWrite(AP[QP[(Z-1)*2  ]],LOW) ;      digitalWrite(AP[QP[(Z-1)*2+1]],LOW) ;    }  } else {    if (digitalRead(WP[4])==LOW)      for (int q=0; q<8; q++) digitalWrite(AP[q],LOW) ; // outer ring ON  }#endif}`