sunnuntai 27. helmikuuta 2022

HexNoppa_62

Lautapelit ovat nousseet jälleen suosioon. On siis näin digitaaliaikana syytä päivittää arpakuutio. Tässä tapauksessa ei tietenkään ole kuutio, vaan arvottavat luvut välillä 0 ..15, eli hexaluvut 0..F. 

Arpakuutiossa on mahdollista saada luvut välillä 1..6, mutta mikä estäisi vaeltamasta Afrikan tähdessä hiukan pidempiäkin matkoja samalla kertaa. Tai saamalla nollan (0), siirtää vuoro seuraavalle. Toki luvut 1..6 ovat tässäkin mahdollisia, ja silloin LEDejäkin tarvitaan ainoastaan kolme kappaletta. 

Itse asiassa tärkeämpänä tavoitteena oli harjoitella sitä, miten kokonaisluvun arvo voidaan muuntaa biteiksi ja osoittaa Arduinon lähdössä binäärinumerona. Näin digitaalivaltakautena on kunkin hyvä oppia myös tämä järjestelmä, millä meidän arkemme käytännössä toimii. Tietysti, ja varmaan varsinkin alussa, tämä keino herättää myös keskustelua siitä, minkä numeron arpa tällä kerralla tarjosi. Tuossa kuvassa on tietysti luku 11 eli oikealta vasemmalle laskien 1 + 2 + 8 = 11. 

 

/***************************************

* Ohjelman nimi: HexNopB

* 27.2.2022

* Lyhyt toimintaselostus:

* Arvotaan hexaluvut välillä 0 .. F, ja

* tulostetaan ne neljällä LEDillä

**************************************/


// MÄÄRITTELYT:

// Liityntöjen määrittelyt

const int Con_DO_0 = 11;

const int Con_DO_1 = 10;

const int Con_DO_2 = 9;

const int Con_DO_3 = 8;

const int Con_In = 2;

boolean Bol_In = 0;

// Muita määrittelyjä

const int Con_Vi = 100;

int Int_Vi = 0;

int Seq_Kytkin = 1;

int Int_Arpa = 0;

byte Bin_0 = 0;

byte Bin_1 = 0;

byte Bin_2 = 0;

byte Bin_3 = 0;

// ALIOHJELMAT

void Fun_Tulostus(){

Serial.print("Arpaluku: "); Serial.println(Int_Arpa);

}// Tulostuksen loppu

// ASETUKSET:

void setup(){

Serial.begin(9600);

pinMode(Con_DO_0, OUTPUT);

pinMode(Con_DO_1, OUTPUT);

pinMode(Con_DO_2, OUTPUT);

pinMode(Con_DO_3, OUTPUT);

pinMode(Con_In, INPUT_PULLUP);

}// Asetuksen loppu


// PÄÄLOOPPI

void loop(){

Bol_In = digitalRead(Con_In);

// Muodostetaan satunnaisluku

switch (Seq_Kytkin) {

case 1:

if (!Bol_In) {Int_Vi += 1;} // kosketinvärähtelyviive

if (Int_Vi > Con_Vi){

Int_Arpa = random(0, 16); // arvonta välillä 0 .. 15

// Fun_Tulostus();

// Luetaan bitit

Bin_0 = bitRead(Int_Arpa, 0); Bin_1 = bitRead(Int_Arpa, 1);

Bin_2 = bitRead(Int_Arpa, 2); Bin_3 = bitRead(Int_Arpa, 3);

// Kirjoitetaan bitit

digitalWrite(Con_DO_0, Bin_0); digitalWrite(Con_DO_1, Bin_1);

digitalWrite(Con_DO_2, Bin_2); digitalWrite(Con_DO_3, Bin_3);

Seq_Kytkin = 2;}

break;

case 2:

if (!Bol_In == 0){

Int_Vi = 0;

Seq_Kytkin = 1;

}

break;

} // Arvonnan loppu

delay(1);

} // Pääohjelma LOPPU