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
Ei kommentteja:
Lähetä kommentti