Trastejant amb arduino

De Jose Castillo Aliaga
Revisión del 21:20 8 dic 2013 de Admin (discusión | contribs.) (Página creada con «Aquest són els projectes extranys, inconclusos o frikis amb Arduino, però que vull documentar. ==Ruleta numèrica== En la meua col·lecció de fem tecnológic, he t...»)
(difs.) ← Revisión anterior | Revisión actual (difs.) | Revisión siguiente → (difs.)
Ir a la navegación Ir a la búsqueda

Aquest són els projectes extranys, inconclusos o frikis amb Arduino, però que vull documentar.

Ruleta numèrica

En la meua col·lecció de fem tecnológic, he trobat una espècie de ruleta, probablement, de una màquina de premi. Com que són displays de 7 segments de LEDs, pareixía fàcil tornar a donar vida al circuit.

Si voleu vorer la foto: [1]

El primer problema és que no és un circuit fet per ser reutilitzable. És molt específic. Té dos connectors per darrere estàndars, però sols utilitza una fracció dels cables. Calía detectar la funció de cadascun.

El segon problema és que els displays de LEDs són de ánode comú, quant jo tinc un integrat cd4511be, fet per a càtode comú. No podia utilitzar l'integrat. Necessitava 7 eixides d'arduino per als segments i pensar al contrari. (El 0 és encés i el 1 és apagat.)

Vaig utlitzar 7 eixides per als segments i 7 per a cadascun dels displays. El del mig va sempre.

El codi sols és una demo del que es pot fer:

const int leds[] = {2,3,4,5,6,7,8};

int n=0;
int d=0;
byte displays[10]={0,1,9,10,11,12,13};
byte numbers[10][7]={
{0,0,1,1,1,1,1},
{0,1,0,0,1,0,0},
{0,0,0,0,1,1,0},
{0,0,1,1,0,1,0},
{1,0,0,0,0,1,0},
{1,0,1,0,0,0,0},
{0,0,0,1,1,1,1},
{0,0,0,0,0,0,0},
{0,0,0,1,0,1,0},
{0,0,0,0,0,0,1}

};

float idelay=1;

void setup()
{
 
  for (int i=0;i<14;i++){ 
   pinMode(i,OUTPUT);
   
  }
 
 // digitalWrite(10,HIGH);
}

void loop()
{
  digitalWrite(displays[d],HIGH);
  int r=random(10);
  for(int i=0;i<7;i++){
  digitalWrite(leds[i],HIGH);
  digitalWrite(leds[i],numbers[r][i]);
  }
  
  delay(idelay);
  digitalWrite(displays[d],LOW);
  n=(n+1)%10;
  d=(d+1)%7;
  idelay=idelay*1.1;
  
}