(Keep Talking and Nobody Explodes IRL)
 
No edit summary
 
(7 intermediate revisions by the same user not shown)
Line 1: Line 1:
I want to re-create "Keep Talking and Nobody Explodes" in real life.
I want to re-create "Keep Talking and Nobody Explodes" in real life.
Here's the manual: https://bombmanual.com/web/index.html
I'll need supplemental pages for the switches module.


Here's an example: https://heathbar.github.io/keep-talking/
Here's an example: https://heathbar.github.io/keep-talking/
Line 7: Line 9:
Here are some thoughts:
Here are some thoughts:


   Progressively get harder.   
   Progressively get harder.  With a way to re-set the "level".  Ability to select the level that you want to play?  Only after unlocked?
     Shorter Time Allotment
     Shorter Time Allotment
     Fewer Strikes
     Fewer Strikes
Line 13: Line 15:
     More Modules - Initially it looks like you only have to de-fuse the top of the box. After completing it (some number of times, or at a level of efficiency, a key appears that unlocks the bottom of the box with more modules)
     More Modules - Initially it looks like you only have to de-fuse the top of the box. After completing it (some number of times, or at a level of efficiency, a key appears that unlocks the bottom of the box with more modules)
     Switch to turn on / off back modules when the back is on.
     Switch to turn on / off back modules when the back is on.
     Even after opening the back, different difficulty levels turning some modules off, adjusting time, strikes, etc.
     Even after opening the back, different difficulty levels turning some modules off, adjusting time, strikes, etc.  
        Can I make the maze turn from 6x6 to 8x8???




Line 38: Line 41:
     4 x micro buttons
     4 x micro buttons
     5 rectangle LEDs
     5 rectangle LEDs
   Morse Code:
   Switches:
     1 x LED
     5 x switches
     3 x micro buttons
     11 x LEDs
    1 x Larger OLED Display
   Maze:
   Mazes:
     6 x 6 LED array
     6 x 6 LED array
     4 x micro buttons
     4 x micro buttons
   Passwords:
   Password:
     10 x micro buttons
     10 x micro buttons
     1 x Larger OLED Display
     1 x Larger OLED Display
Line 52: Line 54:
     2 x micro buttons
     2 x micro buttons
     2 x Number Display
     2 x Number Display
   Knobs:
   Knob:
     12 x LEDs
     12 x LEDs
     2 x Number Display
     2 x Number Display
Line 59: Line 61:


Front side:
Front side:
   Maze, Big Button, Venting Gas, Timer, Key Pads, Wires
   Maze, Big Button, Venting Gas, Timer, Keypad, Wires


Back Side:
Back Side:
   Simon Says, Who's on First, Knob, Memory, Morse Code, Password
   Simon Says, Who's on First, Knob, Memory, Switches, Password
 
Communication:
  Main Module:  Send active signal to modules.  Listen for complete modules.
  Individual modules:  Listen for active signal.  Send complete signal.
    Each module has:
      Main.ino
      IOManager.h for displays, leds, buttons, etc.
      ModuleState.h for module win/lose logic
      Comms.h for incoming, outgoing, and pass-through communication
 
 
Main Module
  Timer
  Strikes indicators 
  Big Button
    LCD for Word
    LEDs for color
    LED Strip for bar color
    LED for "Active/Disarmed"
  Battery LCDs (needed for Big Button module)
  Ports LCD (needed for Big Button module)
  Indicator LCD(s) (needed for Big Button module)
 
  setup() {
    mode = startup
  }
   
  loop(){
    switch mode:
      case idle:
        Do some coordinated light flashing across the front modules
        if button press:
          mode = startup
      case startup:
        check connections to each module
        read last level
        display battery level, current level (based on last level), current level info (# modules, strikes, time limit)
        if button press:
          if button release:
            if button duration >= 10 seconds:
              current level = 1
            else if button duration >= 5 seconds:
              current level -= 1
            else:
              beep, beep, beep, beeeeeeep
              based on level:
                set timer
                set up strikes indicators
                BigButtonModels.begin()
                  set battery lcds
                  set ports lcds
                  set indicator lcds
                  set Big Button Word
                  set Big Button Color
 
                send active signals to modules
                listen for acks from active modules
              mode = running
            end if
        end if
      case running:
        if timer = 0:
          mode = lose
        if strikes = 3:
          mode = lose
        for each module in activeModules[]:
          if module = lose:
            mode = lose
          if module = strike:
            strikes += 1
            update strike indicator
            module = Active
          if module = Active:
            mode = running
        if no modules Active:
          mode = won
      case lose:
        Kapow
        flashing lights
        You lose!!!!
        if button press:
          mode = startup
      case won:
        You won!!!!
        final level += 1
        if button press:
          mode = startup
  } 
 
Simon Says / Wires Modules
  Serial Number LCD (needed for Simon Says module)
  4 color buttons
  LED for "Active/Disarmed"
 
 
[[Category:K]]
[[Category:Projects]]

Latest revision as of 21:01, 8 April 2026

I want to re-create "Keep Talking and Nobody Explodes" in real life. Here's the manual: https://bombmanual.com/web/index.html I'll need supplemental pages for the switches module.

Here's an example: https://heathbar.github.io/keep-talking/

I think I can use my extra Adafruit Metro M7 with AirLift and CircuitPython to do the whole thing instead of a separate microcontroller for each module.

Here are some thoughts:

 Progressively get harder.  With a way to re-set the "level".  Ability to select the level that you want to play?  Only after unlocked?
   Shorter Time Allotment
   Fewer Strikes
   Repeat Solutions - Some modules go through multiple rounds to be de-fused.  Eg: Who's on First, Memory
   More Modules - Initially it looks like you only have to de-fuse the top of the box. After completing it (some number of times, or at a level of efficiency, a key appears that unlocks the bottom of the box with more modules)
   Switch to turn on / off back modules when the back is on.
   Even after opening the back, different difficulty levels turning some modules off, adjusting time, strikes, etc. 
       Can I make the maze turn from 6x6 to 8x8???


Modules:

 Wires:
   Just like Heathbar.  Add resistors to wires so the controller knows which wire is where.
 Big Button:
   1 x Larger OLED Display    
     under a big button with a fold down cover.  
   RGB LED strip
 Keypad:
   4 x 0.66” Arduino OLED Displays - see https://hackaday.io/project/176239-keybon-adaptive-macro-keyboard
   4 x micro buttons
 Simon Says:
   4 x Arcade Buttons w / LED
 Who's on First:
   6 x 0.66” Arduino OLED Displays
   6 x micro buttons
   1 x Larger OLED Display
   5 rectangle LEDs
 Memory:
   1 x Larger OLED Display
   4 x 0.66” Arduino OLED Displays
   4 x micro buttons
   5 rectangle LEDs
 Switches:
   5 x switches
   11 x LEDs
 Maze:
   6 x 6 LED array
   4 x micro buttons
 Password:
   10 x micro buttons
   1 x Larger OLED Display
 Venting Gas:
   1 x Larger OLED Display
   2 x micro buttons
   2 x Number Display
 Knob:
   12 x LEDs
   2 x Number Display
   1 x 4 position knob


Front side:

 Maze, Big Button, Venting Gas, Timer, Keypad, Wires

Back Side:

 Simon Says, Who's on First, Knob, Memory, Switches, Password

Communication:

 Main Module:  Send active signal to modules.  Listen for complete modules.
 Individual modules:  Listen for active signal.  Send complete signal.
   Each module has: 
     Main.ino
     IOManager.h for displays, leds, buttons, etc.
     ModuleState.h for module win/lose logic
     Comms.h for incoming, outgoing, and pass-through communication


Main Module

 Timer
 Strikes indicators  
 Big Button
   LCD for Word
   LEDs for color
   LED Strip for bar color
   LED for "Active/Disarmed"
 Battery LCDs (needed for Big Button module)
 Ports LCD (needed for Big Button module)
 Indicator LCD(s) (needed for Big Button module)
 
 setup() {
   mode = startup
 }
   
 loop(){
   switch mode:
     case idle:
       Do some coordinated light flashing across the front modules
       if button press:
         mode = startup
     case startup:
       check connections to each module
       read last level
       display battery level, current level (based on last level), current level info (# modules, strikes, time limit)
       if button press:
         if button release:
           if button duration >= 10 seconds:
             current level = 1
           else if button duration >= 5 seconds:
             current level -= 1
           else:
             beep, beep, beep, beeeeeeep
             based on level:
               set timer
               set up strikes indicators
               BigButtonModels.begin()
                 set battery lcds
                 set ports lcds
                 set indicator lcds
                 set Big Button Word
                 set Big Button Color
               send active signals to modules
               listen for acks from active modules
             mode = running
           end if
        end if
     case running:
       if timer = 0:
         mode = lose
       if strikes = 3:
         mode = lose
       for each module in activeModules[]:
         if module = lose:
           mode = lose
         if module = strike:
           strikes += 1
           update strike indicator
           module = Active
         if module = Active:
           mode = running
       if no modules Active:
         mode = won
     case lose:
       Kapow
       flashing lights
       You lose!!!!
       if button press:
         mode = startup
     case won:
       You won!!!!
       final level += 1
       if button press:
         mode = startup
 }  

Simon Says / Wires Modules

 Serial Number LCD (needed for Simon Says module)
 4 color buttons
 LED for "Active/Disarmed"