Truth or Dare Blog
Are you looking for electronic projects for beginners? Welcome to the Enchanting World of PicoBricks! Today, we invite you to elevate the experience of a traditional game – “Truth or Dare” – by integrating it with Raspberry Pi and an OLED display. Now, you can embrace the excitement of playing this classic game with your friends or family, all infused with the magic of technology. By integrating the core logic of the game into PicoBricks, you have the freedom to add entertaining questions and daring tasks. Personalizing the game is entirely up to you in this truth or dare blog. Wishing you happy coding and delightful gaming adventures!
Details and Algorithm
The algorithm for this electronic project for beginners begins by initializing the system and presenting the message “Spin the Bottle” on the screen, prompting player engagement through a potentiometer and button interface. Upon pressing the button, the code discerns the player’s choice between “truth” or “dare” based on the potentiometer input. Opting for “truth” results in the program displaying a randomly chosen question, requiring the player to provide a correct answer. Alternatively, selecting “dare” leads to the program showcasing a randomly assigned mission, challenging the player to fulfill the specified task. To ensure a smooth experience, the code incorporates suitable delays, preventing unintended or rapid inputs, thereby crafting an entertaining and interactive “Truth or Dare” game tailored for the PicoBricks.
Components
1 x PicoBricks
Wiring Diagram
MicroBlocks Codes of The PicoBricks
PicoBricks IDE Codes for PicoBricks
Since the code is long, we have created a download link for you. I hope you try it with PicoBricks!
DOWNLOADMicroPython Codes of The PicoBricks
from time import sleep
from machine import Pin
from machine import I2C
from picobricks import SSD1306_I2C
import time
import machine
import math
i2c = I2C(0, scl=Pin(5), sda=Pin(4), freq=200000)
oled = SSD1306_I2C(128, 64, i2c, addr=0x3c)
pin_button = machine.Pin(10, machine.Pin.IN)
import random
sentence = ""
sentence_array = " "
dare_question = "Yell out the first word that comes to your mind.Eat a snack without using your hands.Dance without music for two minutes".split(".")
truth_question = "Do you have a hidden talent? When's the last time you apologized, What for?What is your biggest fear?".split("?")
while True:
oled.fill(0)
oled.text("{}".format("Spin "), 35, 30)
oled.text("{}".format(" Bottle"), 20, 40)
oled.show()
time.sleep((1))
oled.fill(0)
while (pin_button.value()) == (0):
truth_or_dare = round( 0 - 0 ) * ( 0 - 0 ) / ( 0 - 0 ) + 0
if truth_or_dare == (0):
oled.fill(0)
oled.text("{}".format("Truth Or Dare"), 0, 10)
oled.text("{}".format("truth"), 10, 40)
oled.show()
else:
oled.fill(0)
oled.text("{}".format("Truth Or Dare"), 0, 10)
oled.text("{}".format("dare"), 10, 40)
oled.show()
time.sleep((0.3))
oled.fill(0)
oled.fill(0)
oled.show()
if truth_or_dare == (0):
sentence = truth_question[random.randint(1, (len(truth_question)) - (1))]
if (len(sentence)) >= (16):
sentence_array = sentence.split(" ")
for i in range((1) + (len(sentence_array))):
oled.text("{}".format(sentence_array[i - (1)]), 32, (10) * (i - (1)))
oled.show()
time.sleep((1))
else:
oled.text("{}".format(sentence), 0, 25)
oled.show()
time.sleep((1))
else:
sentence = dare_question[random.randint(1, (len(dare_question)) - (1))]
if (len(sentence)) >= (16):
sentence_array = sentence.split(" ")
for i in range((1) + (len(sentence_array))):
oled.text("{}".format(sentence_array[i - (1)]), 32, (10) * (i - (1)))
oled.show()
time.sleep((1))
else:
oled.text("{}".format(sentence), 0, 25)
oled.show()
time.sleep((1))
Arduino C Codes for PicoBricks
#ifndef ACROBOTIC_SSD1306_H
#define ACROBOTIC_SSD1306_H
#if ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif
#ifdef __AVR__
#include
#define OLEDFONT(name) static const uint8_t __attribute__ ((progmem)) name[]
#elif defined(ESP8266)
#include
#define OLEDFONT(name) static const uint8_t name[]
#else
#define pgm_read_byte(addr) (*(const unsigned char *)(addr))
#define OLEDFONT(name) static const uint8_t name[]
#endif
#include "Wire.h"
#include "fonts/font8x8.h"
#include "fonts/font5x7.h"
// Default screen size is 128x64. Using a #define in your sketch before
// the #include statement can change the default size.
#if !defined SSD1306_128_64 && !defined SSD1306_128_32
#define SSD1306_128_64
#endif
#if defined SSD1306_128_64
#define SSD1306_Max_X 127
#define SSD1306_Max_Y 63
#endif
#if defined SSD1306_128_32
#define SSD1306_Max_X 127
#define SSD1306_Max_Y 31
#endif
#define PAGE_MODE 01
#define HORIZONTAL_MODE 02
#define SSD1306_Address 0x3C
#define SSD1306_Command_Mode 0x80
#define SSD1306_Data_Mode 0x40
#define SSD1306_Display_Off_Cmd 0xAE
#define SSD1306_Display_On_Cmd 0xAF
#define SSD1306_Normal_Display_Cmd 0xA6
#define SSD1306_Inverse_Display_Cmd 0xA7
#define SSD1306_Activate_Scroll_Cmd 0x2F
#define SSD1306_Dectivate_Scroll_Cmd 0x2E
#define SSD1306_Set_Brightness_Cmd 0x81
#define Scroll_Left 0x00
#define Scroll_Right 0x01
#define Scroll_2Frames 0x7
#define Scroll_3Frames 0x4
#define Scroll_4Frames 0x5
#define Scroll_5Frames 0x0
#define Scroll_25Frames 0x6
#define Scroll_64Frames 0x1
#define Scroll_128Frames 0x2
#define Scroll_256Frames 0x3
class ACROBOTIC_SSD1306 {
public:
char addressingMode;
void init(TwoWire& wire=Wire);
void setNormalDisplay();
void setInverseDisplay();
void sendCommand(unsigned char command);
void sendData(unsigned char Data);
void setPageMode();
void setHorizontalMode();
void setTextXY(unsigned char Row, unsigned char Column);
void clearDisplay();
void setBrightness(unsigned char Brightness);
bool putChar(unsigned char c);
void putString(const char *string);
void putString(String string);
unsigned char putNumber(long n);
unsigned char putFloat(float floatNumber,unsigned char decimal);
unsigned char putFloat(float floatNumber);
void drawBitmap(unsigned char *bitmaparray,int bytes);
void setHorizontalScrollProperties(
bool direction,
unsigned char startPage,
unsigned char endPage,
unsigned char scrollSpeed);
void activateScroll();
void deactivateScroll();
void displayOn();
void displayOff();
void setFont(const uint8_t* font, bool inverse=false);
private:
const uint8_t* m_font; // Current font.
uint8_t m_font_offset = 2; // Font bytes for meta data.
uint8_t m_font_width; // Font witdth.
uint8_t m_col; // Cursor column.
uint8_t m_row; // Cursor row (RAM).
bool m_inverse=false; // Inverse text.
TwoWire* m_wire;
};
extern ACROBOTIC_SSD1306 oled; // ACROBOTIC_SSD1306 object
#endif