Bemerkung

Hallo und willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Gemeinschaft auf Facebook! Tauchen Sie tiefer ein in die Welt von Raspberry Pi, Arduino und ESP32 mit anderen Enthusiasten.

Warum beitreten?

  • Expertenunterstützung: Lösen Sie Nachverkaufsprobleme und technische Herausforderungen mit Hilfe unserer Gemeinschaft und unseres Teams.

  • Lernen & Teilen: Tauschen Sie Tipps und Anleitungen aus, um Ihre Fähigkeiten zu verbessern.

  • Exklusive Vorschauen: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und exklusiven Einblicken.

  • Spezialrabatte: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.

  • Festliche Aktionen und Gewinnspiele: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil.

👉 Sind Sie bereit, mit uns zu erkunden und zu erschaffen? Klicken Sie auf [hier] und treten Sie heute bei!

3.1.11 SPIEL – Zahlen raten

Einführung

„Zahlen raten“ ist ein lustiges Partyspiel, bei dem du und deine Freunde abwechselnd eine Zahl (0~99) eingeben. Mit jeder eingegebenen Zahl wird der Bereich kleiner, bis ein Spieler das Rätsel richtig löst. Dann wird der Spieler besiegt und bestraft. Zum Beispiel, wenn die Glückszahl 51 ist, die die Spieler nicht sehen können, und Spieler ① gibt 50 ein, dann ändert sich die Zahlenbereichsanzeige zu 50~99; wenn Spieler ② 70 eingibt, kann der Zahlenbereich 50~70 sein; wenn Spieler ③ 51 eingibt, ist dieser Spieler der Pechvogel. Hier verwenden wir ein Tastenfeld zur Eingabe von Zahlen und ein LCD zur Ausgabe von Ergebnissen.

Benötigte Komponenten

Für dieses Projekt benötigen wir die folgenden Komponenten.

../_images/list_GAME_Guess_Number.png

Es ist definitiv praktisch, ein ganzes Kit zu kaufen, hier ist der Link:

Name

ARTIKEL IN DIESEM KIT

LINK

Raphael Kit

337

Raphael Kit

Sie können diese auch separat über die untenstehenden Links kaufen.

KOMPONENTENBESCHREIBUNG

KAUF-LINK

GPIO-Erweiterungsplatine

BUY

Steckbrett

BUY

Jumper-Kabel

BUY

Widerstand

BUY

Tastenfeld

-

I2C LCD1602

BUY

Schaltplan

T-Board Name

physical

wiringPi

BCM

GPIO18

Pin 12

1

18

GPIO23

Pin 16

4

23

GPIO24

Pin 18

5

24

GPIO25

Pin 22

6

25

SPIMOSI

Pin 19

12

10

GPIO22

Pin 15

3

22

GPIO27

Pin 13

2

27

GPIO17

Pin 11

0

17

SDA1

Pin 3

SDA1(8)

SDA1(2)

SCL1

Pin 5

SCL1(9)

SDA1(3)

../_images/Schematic_three_one12.png

Experimentelle Verfahren

Schritt 1: Schalte den Stromkreis.

../_images/image273.png

Schritt 2: I2C einrichten (siehe Anhang I2C Konfiguration. Wenn Sie I2C bereits eingerichtet haben, überspringen Sie diesen Schritt.)

Schritt 3: Verzeichnis wechseln.

cd ~/raphael-kit/c/3.1.11/

Schritt 4: Kompilieren.

gcc 3.1.11_GAME_GuessNumber.c -lwiringPi

Schritt 5: Ausführen.

sudo ./a.out

Nachdem das Programm gestartet wurde, wird die Startseite auf dem LCD angezeigt:

Bemerkung

  • Wenn ein Fehlerhinweis wiringPi.h: No such file or directory erscheint, bitte beziehen Sie sich auf Installieren und Überprüfen von WiringPi.

  • Wenn Sie den Fehler Unable to open I2C device: No such file or directory erhalten, müssen Sie I2C Konfiguration konsultieren, um I2C zu aktivieren und zu überprüfen, ob die Verkabelung korrekt ist.

  • Wenn der Code und die Verkabelung in Ordnung sind, das LCD jedoch immer noch keinen Inhalt anzeigt, können Sie das Potentiometer auf der Rückseite drehen, um den Kontrast zu erhöhen.

Willkommen!
Drücken Sie A zum Starten!

Drücken Sie „A“, und das Spiel beginnt, und die Spielseite wird auf dem LCD angezeigt.

Nummer eingeben:
0 ‹Punkt‹ 99

Eine zufällige Zahl ‚point‚ wird erzeugt, aber beim Spielstart nicht auf dem LCD angezeigt, und Ihre Aufgabe ist es, diese zu erraten. Die von Ihnen eingegebene Zahl erscheint am Ende der ersten Zeile, bis die endgültige Berechnung abgeschlossen ist. (Drücken Sie „D“, um den Vergleich zu starten. Wenn die eingegebene Zahl größer als 10 ist, beginnt der automatische Vergleich.)

Der Zahlenbereich von „Punkt“ wird in der zweiten Zeile angezeigt. Und Sie müssen eine Zahl innerhalb dieses Bereichs eingeben. Wenn Sie eine Zahl eingeben, wird der Bereich enger; wenn Sie zufällig oder unglücklicherweise die Glückszahl bekommen, wird die Meldung „Du hast es geschafft!“ angezeigt.

Code-Erklärung

Zu Beginn des Codes befinden sich die funktionalen Funktionen von keypad und I2C LCD1602. Mehr Details über sie können Sie in 1.1.7 I2C LCD1602 und 2.1.8 Tastenfeld nachlesen.

Hier, was wir wissen müssen, ist folgendes:

/****************************************/
//Start from here
/****************************************/
void init(void){
    fd = wiringPiI2CSetup(LCDAddr);
    lcd_init();
    lcd_clear();
    for(int i=0 ; i<4 ; i++) {
        pinMode(rowPins[i], OUTPUT);
        pinMode(colPins[i], INPUT);
    }
    lcd_clear();
    write(0, 0, "Welcome!");
    write(0, 1, "Press A to go!");
}

Diese Funktion dient dazu, I2C LCD1602 und Keypad initial zu definieren und „Willkommen!“ sowie „Drücken Sie A um fortzufahren!“ anzuzeigen.

void init_new_value(void){
    srand(time(0));
    pointValue = rand()%100;
    upper = 99;
    lower = 0;
    count = 0;
    printf("point is %d\n",pointValue);
}

Die Funktion erzeugt die Zufallszahl ‚point‚ und setzt den Bereichshinweis für den Punkt zurück.

bool detect_point(void){
    if(count > pointValue){
        if(count < upper){
            upper = count;
        }
    }
    else if(count < pointValue){
        if(count > lower){
            lower = count;
        }
    }
    else if(count = pointValue){
        count = 0;
        return 1;
    }
    count = 0;
    return 0;
}

detect_point() vergleicht die eingegebene Nummer mit dem erzeugten „Punkt“. Wenn das Vergleichsergebnis zeigt, dass sie nicht gleich sind, wird count Werte upper und lower zuweisen und ‚0‚ zurückgeben; ansonsten, wenn sie gleich sind, gibt sie ‚1‚ zurück.

void lcd_show_input(bool result){
    char *str=NULL;
    str =(char*)malloc(sizeof(char)*3);
    lcd_clear();
    if (result == 1){
        write(0,1,"You've got it!");
        delay(5000);
        init_new_value();
        lcd_show_input(0);
        return;
    }
    write(0,0,"Enter number:");
    Int2Str(str,count);
    write(13,0,str);
    Int2Str(str,lower);
    write(0,1,str);
    write(3,1,"<Point<");
    Int2Str(str,upper);
    write(12,1,str);
}

Diese Funktion dient zur Anzeige der Spielseite. Beachten Sie die Funktion Int2Str(str,count), sie konvertiert diese Variablen count, lower und upper von Integer zu character string für die korrekte Anzeige des lcd.

int main(){
    unsigned char pressed_keys[BUTTON_NUM];
    unsigned char last_key_pressed[BUTTON_NUM];
    if(wiringPiSetup() == -1){ //when initialize wiring failed,print messageto screen
        printf("setup wiringPi failed !");
        return 1;
    }
    init();
    init_new_value();
    while(1){
        keyRead(pressed_keys);
        bool comp = keyCompare(pressed_keys, last_key_pressed);
        if (!comp){
            if(pressed_keys[0] != 0){
                bool result = 0;
                if(pressed_keys[0] == 'A'){
                    init_new_value();
                    lcd_show_input(0);
                }
                else if(pressed_keys[0] == 'D'){
                    result = detect_point();
                    lcd_show_input(result);
                }
                else if(pressed_keys[0] >='0' && pressed_keys[0] <= '9'){
                    count = count * 10;
                    count = count + (pressed_keys[0] - 48);
                    if (count>=10){
                        result = detect_point();
                    }
                    lcd_show_input(result);
                }
            }
            keyCopy(last_key_pressed, pressed_keys);
        }
        delay(100);
    }
    return 0;
}

Main() enthält den gesamten Prozess des Programms, wie unten dargestellt:

  1. Initialisierung von I2C LCD1602 und Keypad.

  2. Verwenden von init_new_value(), um eine Zufallszahl 0-99 zu erstellen.

  3. Prüfen, ob die Taste gedrückt wurde und den Tastenwert abrufen.

  4. Wenn die Taste ‚A‚ gedrückt wird, erscheint eine Zufallszahl 0-99 und das Spiel beginnt.

  5. Wenn festgestellt wird, dass die Taste ‚D‚ gedrückt wurde, tritt das Programm in die Ergebnisbewertung ein und zeigt das Ergebnis auf dem LCD an. Dieser Schritt gewährleistet, dass Sie das Ergebnis auch dann beurteilen können, wenn Sie nur eine Nummer drücken und anschließend die Taste ‚D‚ betätigen.

  6. Wenn eine Taste 0-9 gedrückt wird, ändert sich der Wert von count; wenn count größer als 10 ist, beginnt die Beurteilung.

  7. Die Änderungen des Spiels und seiner Werte werden auf LCD1602 angezeigt.

Phänomen-Bild

../_images/image274.jpeg