Mastermind spel Tinkerkit

Projecten die niet passen in bovenstaande onderwerpen
Berichten: 1
Geregistreerd: 19 Dec 2018, 14:10

Mastermind spel Tinkerkit

Berichtdoor multikoen » 19 Dec 2018, 15:09

Hallo,

ik ben bezig met het maken van een mastermind spel via een Arduino Tinkerkit.
Ik heb al veel op internet gevonden, maar het wordt mij nog steeds niet duidelijk hoe ik een random code kan genereren en deze vervolgens checken.
Het is mij al wel gelukt om een kleur selectie te doen door middel van potentiometers.
Ik moet de tinkerkit gebruiken en zo veel mogelijk sensoren.
De kleuren worden getoond op een neopixelstrip met 8 LEDs.
De eerste 4 kleuren zijn de kleuren die de gebruiker kiest.
De laatste 4 LEDs dienen als feedback.
Deze kunnen dus groen, rood of leeg zijn.

Ik zit nog met een aantal problemen:
Hoe kan ik de Arduino een random 4 kleurige code laten generen?
Hoe kan Arduino checken of mijn code overeen komt met de random code?
Hoe kan ik die output weergeven op de laatste 4 LEDs van de Neopixel strip?

Dank

Hierbij de code die ik tot nu toe heb:

//Download Adafruit_NeoPixel.h here: https://github.com/adafruit/Adafruit_NeoPixel

#include <Adafruit_NeoPixel.h>

// Which pin on the Arduino is connected to the NeoPixels?
#define ledpin 6

// How many NeoPixels are attached to the Arduino?
#define NUMPIXELS 8

#define Pot A4 // Hiermee maken we arduino duidelijk dat als wij sensor typen dat we die sensor bedoelen die op pin A4 zit.


#define Schuif A5 // Hiermee maken we arduino duidelijk dat als wij sensor typen dat we die sensor bedoelen die op pin A5 zit.


int potVal = 0; // Variable to store the input from the potentiometer
int potPin = A4; // Potentiometer output connected to analog pin 3

int schuifVal = 0; // Variable to store the input from the potentiometer
int schuifPin = A5; // Potentiometer output connected to analog pin A5

int kleur_led1;
int kleur_led2;
int kleur_led3;
int kleur_led4;
long kleur1, kleur2, kleur3, kleur4, kleur5, kleur6;

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, ledpin, NEO_GRB + NEO_KHZ800);

int delayval = 100; // delay for 0,1 second


void setup() {
Serial.begin(9600); //Start verbinding met de pc

pixels.begin(); // This initializes the NeoPixel library.
pixels.setBrightness(20);
kleur1 = pixels.Color(225, 225, 0); //Geel
kleur2 = pixels.Color(0, 225, 0); //Groen
kleur3 = pixels.Color(0, 0, 225); //Blauw
kleur4 = pixels.Color(225, 0, 225); //Paars
kleur5 = pixels.Color(150, 150, 225); //Wit
kleur6 = pixels.Color(225, 0, 0); //Rood

}

void loop() {

schuifVal = analogRead (Schuif);
potVal = analogRead(Pot);


pixels.show(); // This sends the updated pixel color to the hardware.
delay(delayval); // Delay for a period of time (in milliseconds).

//potVal = analogRead(potPin); // read the potentiometer value at the input pin
//Serial.println(potVal);
schuifVal = analogRead(schuifPin); // read the schuifmeter value at the input pin
Serial.println(schuifVal);

Color();

}

void Color() {

//Alleen de eerste 4 leds van de strip worden van kleur veranderd door de potentiometer. De laatste 4 leds dienen voor feedback of de code goed is.

if ( schuifVal < 185) //als de schuif-potentiometer zich in het de eerste 12,5% (1/8) van de balk zich bevind, dan gaat de eerste van de 8 leds van kleur veranderen.

{
if (potVal < 170) // Lowest third of the potentiometer's range (0-170)
{
led(0, 1);
}


else if (potVal < 340) //
{
led(0, 2);
}

else if (potVal < 510) //
{
led(0, 3);
}


else if (potVal < 682) //
{
led(0, 4);
}


else if (potVal < 850) //

{
led(0, 5);
}


else if (potVal < 1024) //
{
led(0, 6);
}

}

else if (schuifVal < 370) //als de schuif-potentiometer zich in het de eerste 25% (2/8) van de balk zich bevind, dan gaat de eerste van de 8 leds van kleur veranderen.

{

if (potVal < 170) // Lowest third of the potentiometer's range (0-170)
{
led(1, 1);
}


else if (potVal < 340) //
{
led(1, 2);
}

else if (potVal < 510) //
{
led(1, 3);
}


else if (potVal < 682) //
{
led(1, 4);
}


else if (potVal < 850) //

{
led(1, 5);
}


else if (potVal < 1024) //
{
led(1, 6);
}

}

else if (schuifVal < 550) //als de schuif-potentiometer zich in het de eerste 37,5% (3/8) van de balk zich bevind, dan gaat de eerste van de 8 leds van kleur veranderen.

{
if (potVal < 170) // Lowest third of the potentiometer's range (0-170)
{
led(2, 1);
}


else if (potVal < 340) //
{
led(2, 2);
}

else if (potVal < 510) //
{
led(2, 3);
}


else if (potVal < 682) //
{
led(2, 4);
}


else if (potVal < 850) //

{
led(2, 5);
}


else if (potVal < 1024) //
{
led(2, 6);
}


}

else if (schuifVal < 740) //als de schuif-potentiometer zich in het de eerste 50% (4/8) van de balk zich bevind, dan gaat de eerste van de 8 leds van kleur veranderen.

{
if (potVal < 170) // Lowest third of the potentiometer's range (0-170)
{
led(3, 1);
}


else if (potVal < 340) //
{
led(3, 2);
}

else if (potVal < 510) //
{
led(3, 3);
}


else if (potVal < 682) //
{
led(3, 4);
}


else if (potVal < 850) //

{
led(3, 5);
}


else if (potVal < 1024) {
led(3, 6);
}



}

}

void led(int led, int kleur) {
long ledkleur;
switch (led) { //Het opslaan van de kleur in de LEDs
case 1:
kleur_led1 = kleur;
break;
case 2:
kleur_led2 = kleur;
break;
case 3:
kleur_led3 = kleur;
break;
case 4:
kleur_led4 = kleur;
break;
}
switch (kleur) {
case 1:
ledkleur = kleur1;
break;
case 2:
ledkleur = kleur2;
break;
case 3:
ledkleur = kleur3;
break;
case 4:
ledkleur = kleur4;
break;
case 5:
ledkleur = kleur5;
break;
case 6:
ledkleur = kleur6;
break;
}

pixels.setPixelColor(led, ledkleur); //
pixels.show();
}

Advertisement

Gebruikers-avatar
Berichten: 2048
Geregistreerd: 06 Aug 2016, 01:03

Re: Mastermind spel Tinkerkit

Berichtdoor Koepel » 20 Dec 2018, 00:51

Hallo, welkom op dit forum.

Bedoel je een random kleur kiezen, waarbij de kleur gekozen wordt uit vier mogelijke kleuren ?
Dan zet je de kleuren in een array, en je kiest random de index.

Ik kan niet de sketch voor je maken, maar ik hoop dat je verder komt met het onderstaande voorbeeld. Het voorbeeld is onder andere voor een Arduino Uno.

cpp code
// Hier gebruik ik getallen in plaats van pixels.Color()
const uint32_t kleurTabel[] =
{
100, // een kleur
500, // een andere kleur
3000, // de derde kleur
8, // de vierde kleur
};


void setup()
{
Serial.begin( 9600);


// Gebruik de ruis op de analoge ingangen,
// om iedere keer een andere random reeks te laten genereren.
unsigned long zomaarwat = 0;
for( int i=A0; i<=A5; i++)
{
zomaarwat += analogRead( i);
}
randomSeed( zomaarwat);
}


void loop()
{
// Een random getal kiezen van 0 tot en met 3.
int index = random( 0, 4);

// Die index hoort bij een kleur.
uint32_t kleur = kleurTabel[index];

Serial.print(F( "Een random kleur: "));
Serial.println( kleur);

delay(750);
}


De 'const' is om aan de compiler door te geven dat die getallen constanten zijn en niet meer veranderen. Je mag dat weglaten.

De 'uint32_t' is op een Arduino Uno hetzelfde als een 'unsigned long'.
Jij hebt 'long' voor de kleuren, maar volgens mij is 'unsigned long' beter, en 'uint32_t' misschien nog beter.

De random() functie staat hier beschreven: https://www.arduino.cc/reference/en/language/functions/random-numbers/random/.
De upper bound is exclusive, dus "random( 0,4)" geeft de getallen 0,1,2,3.

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: shooter en 1 gast