Model Railroad Random Selector
Randomly select a destination for one wagon on a Timesaver layout or randomly select order of wagons for an Inglenook layout.
Components and supplies
1
I2C Port Expander Module for LCD
1
Momentary Push Button Switch
1
20x4 LCD display
1
1 pole 12 position rotary switch
1
Arduino UNO
Project description
Code
Code for random selector
arduino
1//random destination and car selector 2 3// include the library code: 4#include <Wire.h> 5#include <LiquidCrystal_PCF8574.h> 6 7LiquidCrystal_PCF8574 lcd(0x27); // set the LCD address to 0x27 for a 16 chars and 2 line display 8 9 10 11//set random number value to atart 12int randnumber = 0; 13 14void setup() { 15 16 Wire.begin(); 17 Wire.beginTransmission(0x27); 18 //start random generator 19 randomSeed(analogRead(0)); 20 //set digital pins 2-5 to pullup input 21 pinMode(2,INPUT_PULLUP); 22 pinMode(3,INPUT_PULLUP); 23 pinMode(4,INPUT_PULLUP); 24 pinMode(5,INPUT_PULLUP); 25 pinMode(A1,INPUT_PULLUP); 26 lcd.setBacklight(HIGH); 27 // set up the LCD's number of columns and rows: 28 lcd.begin(20, 4); 29 } 30 31void loop() { 32 //read switch state 33 int selectA = digitalRead(2); 34 int selectB = digitalRead(3); 35 int selectC = digitalRead(4); 36 int selectD = digitalRead(5); 37 38 if (selectA==LOW){ 39 //run garland 40 //print starting info on lcd 41 42 lcd.setCursor(0,0); 43 lcd.print("Garland "); 44 lcd.setCursor(0,1); 45 lcd.print(" "); 46 lcd.setCursor(0,2); 47 lcd.print("Move car to "); 48 lcd.setCursor(0, 3); 49 50 51 //read button state 52 int button = analogRead(A1); 53 if(button>800){ 54 delay(100); 55 }else{ 56 57 //find new random number and check that it is different to previous random number 58 int newrandnumber = random(1,5); 59 while(newrandnumber==randnumber){ 60 newrandnumber = random(1,5); 61 } 62 63 //replace old random number with new random number and print appropriate destination on lcd 64 randnumber=newrandnumber; 65 if(randnumber==1){ 66 lcd.print("workshop "); 67 }else if(randnumber==2){ 68 lcd.print("warehouse "); 69 }else if(randnumber==3){ 70 lcd.print("freighthouse "); 71 }else if(randnumber==4){ 72 lcd.print("team track "); 73 } 74 delay(1000); 75 } 76 77 }else if(selectB==LOW){ 78 //run n scale timesaver 79 //print starting info on lcd 80 81 lcd.setCursor(0,0); 82 lcd.print("N Scale Timesaver "); 83 lcd.setCursor(0,1); 84 lcd.print(" "); 85 lcd.setCursor(0,2); 86 lcd.print("Move car to "); 87 lcd.setCursor(0, 3); 88 89 //read button state 90 int button = analogRead(A1); 91 if(button>800){ 92 delay(100); 93 }else{ 94 95 //find new random number and check that it is different to previous random number 96 int newrandnumber = random(1,6); 97 while(newrandnumber==randnumber){ 98 newrandnumber = random(1,6); 99 } 100 101 //replace old random number with new random number and print appropriate destination on lcd 102 randnumber=newrandnumber; 103 if (randnumber==1){ 104 lcd.print("dockside "); 105 }else if (randnumber==2){ 106 lcd.print("depot "); 107 }else if (randnumber==3){ 108 lcd.print("jetty "); 109 }else if (randnumber==4){ 110 lcd.print("ramp "); 111 }else if (randnumber==5){ 112 lcd.print("factory "); 113 } 114 delay(1000); 115 } 116 117 }else if(selectC==LOW){ 118 //run steen manufacturing 119 //print starting info on lcd 120 lcd.setCursor(0,0); 121 lcd.print("Steen Manufacturing "); 122 lcd.setCursor(0,1); 123 lcd.print(" "); 124 lcd.setCursor(0,3); 125 lcd.print(" "); 126 //read button state 127 int button = analogRead(A1); 128 if(button>800){ 129 delay(100); 130 } else { 131 132 //find random numbers and check that they are all different 133 int numberOne = random(1,6); 134 int numberTwo = random(1,6); 135 while(numberTwo==numberOne){ 136 numberTwo = random(1,6); 137 } 138 int numberThree = random(1,6); 139 while((numberThree==numberOne)||(numberThree==numberTwo)){ 140 numberThree = random(1,6); 141 } 142 143 //print first car selection on lcd 144 lcd.setCursor(0, 2); 145 lcd.print(" "); 146 lcd.setCursor(0, 2); 147 if (numberOne==1){ 148 lcd.print("van, "); 149 }else if (numberOne==2){ 150 lcd.print("tank, "); 151 }else if (numberOne==3){ 152 lcd.print("hopper, "); 153 }else if (numberOne==4){ 154 lcd.print("flat, "); 155 }else if (numberOne==5){ 156 lcd.print("open, "); 157 } 158 //print second car selecion on lcd 159 if (numberTwo==1){ 160 lcd.print("van, "); 161 }else if (numberTwo==2){ 162 lcd.print("tank, "); 163 }else if (numberTwo==3){ 164 lcd.print("hopper, "); 165 }else if (numberTwo==4){ 166 lcd.print("flat, "); 167 }else if (numberTwo==5){ 168 lcd.print("open, "); 169 } 170 //print third car selected on lcd 171 172 if (numberThree==1){ 173 lcd.print("van"); 174 }else if (numberThree==2){ 175 lcd.print("tank"); 176 }else if (numberThree==3){ 177 lcd.print("hopper"); 178 }else if (numberThree==4){ 179 lcd.print("flat"); 180 }else if (numberThree==5){ 181 lcd.print("open"); 182 } 183 delay(1000); 184 } 185 186 }else if(selectD==LOW){ 187 //run OO inglenook 188 //print starting info on lcd 189 lcd.setCursor(0,0); 190 lcd.print("OO Inglenook "); 191 192 //read button state 193 int button = analogRead(A1); 194 if(button>800){ 195 delay(100); 196 } else { 197 198 //find random numbers and check that they are all different 199 int numberOne = random(1,9); 200 int numberTwo = random(1,9); 201 while(numberTwo==numberOne){ 202 numberTwo = random(1,9); 203 } 204 int numberThree = random(1,9); 205 while((numberThree==numberOne)||(numberThree==numberTwo)){ 206 numberThree = random(1,9); 207 } 208 int numberFour = random(1,9); 209 while((numberFour==numberOne)||(numberFour==numberTwo)||(numberFour==numberThree)){ 210 numberFour = random(1,9); 211 } 212 int numberFive = random(1,9); 213 while((numberFive==numberOne)||(numberFive==numberTwo)||(numberFive==numberThree)||(numberFive==numberFour)){ 214 numberFive = random(1,9); 215 } 216 217 //print first car selection on lcd 218 lcd.setCursor(0, 1); 219 if (numberOne==1){ 220 lcd.print("van |"); 221 }else if (numberOne==2){ 222 lcd.print("tanker |"); 223 }else if (numberOne==3){ 224 lcd.print("hopper |"); 225 }else if (numberOne==4){ 226 lcd.print("flatcar |"); 227 }else if (numberOne==5){ 228 lcd.print("5 plank |"); 229 }else if (numberOne==6){ 230 lcd.print("chinaclay|"); 231 }else if (numberOne==7){ 232 lcd.print("salt van |"); 233 }else if (numberOne==8){ 234 lcd.print("livestock|"); 235 } 236 //print second car selection on lcd 237 if (numberTwo==1){ 238 lcd.print(" van "); 239 }else if (numberTwo==2){ 240 lcd.print(" tanker "); 241 }else if (numberTwo==3){ 242 lcd.print(" hopper "); 243 }else if (numberTwo==4){ 244 lcd.print(" flatcar "); 245 }else if (numberTwo==5){ 246 lcd.print(" 5 plank "); 247 }else if (numberTwo==6){ 248 lcd.print(" chinaclay"); 249 }else if (numberTwo==7){ 250 lcd.print(" salt van "); 251 }else if (numberTwo==8){ 252 lcd.print(" livestock"); 253 } 254 //print third car selection on lcd 255 lcd.setCursor(0,2); 256 if (numberThree==1){ 257 lcd.print("van |"); 258 }else if (numberThree==2){ 259 lcd.print("tanker |"); 260 }else if (numberThree==3){ 261 lcd.print("hopper |"); 262 }else if (numberThree==4){ 263 lcd.print("flatcar |"); 264 }else if (numberThree==5){ 265 lcd.print("5 plank |"); 266 }else if (numberThree==6){ 267 lcd.print("chinaclay|"); 268 }else if (numberThree==7){ 269 lcd.print("salt van |"); 270 }else if (numberThree==8){ 271 lcd.print("livestock|"); 272 } 273 //print forth car selection on lcd 274 if (numberFour==1){ 275 lcd.print(" van "); 276 }else if (numberFour==2){ 277 lcd.print(" tanker "); 278 }else if (numberFour==3){ 279 lcd.print(" hopper "); 280 }else if (numberFour==4){ 281 lcd.print(" flatcar "); 282 }else if (numberFour==5){ 283 lcd.print(" 5 plank "); 284 }else if (numberFour==6){ 285 lcd.print(" chinaclay"); 286 }else if (numberFour==7){ 287 lcd.print(" salt van "); 288 }else if (numberFour==8){ 289 lcd.print(" livestock"); 290 } 291 //print fifth car selection on lcd 292 lcd.setCursor(0,3); 293 if (numberFive==1){ 294 lcd.print("van "); 295 }else if (numberFive==2){ 296 lcd.print("tanker "); 297 }else if (numberFive==3){ 298 lcd.print("hopper "); 299 }else if (numberFive==4){ 300 lcd.print("flatcar "); 301 }else if (numberFive==5){ 302 lcd.print("5 plank "); 303 }else if (numberFive==6){ 304 lcd.print("china clay "); 305 }else if (numberFive==7){ 306 lcd.print("salt van "); 307 }else if (numberFive==8){ 308 lcd.print("livestock "); 309 } 310 311 delay(1000); 312 } 313 } 314 } 315 316
Code for random selector
arduino
1//random destination and car selector 2 3// include the library code: 4#include 5 <Wire.h> 6#include <LiquidCrystal_PCF8574.h> 7 8LiquidCrystal_PCF8574 lcd(0x27); 9 // set the LCD address to 0x27 for a 16 chars and 2 line display 10 11 12 13//set 14 random number value to atart 15int randnumber = 0; 16 17void setup() { 18 19 20 Wire.begin(); 21 Wire.beginTransmission(0x27); 22 //start random generator 23 24 randomSeed(analogRead(0)); 25 //set digital pins 2-5 to pullup input 26 pinMode(2,INPUT_PULLUP); 27 28 pinMode(3,INPUT_PULLUP); 29 pinMode(4,INPUT_PULLUP); 30 pinMode(5,INPUT_PULLUP); 31 32 pinMode(A1,INPUT_PULLUP); 33 lcd.setBacklight(HIGH); 34 // set up the LCD's 35 number of columns and rows: 36 lcd.begin(20, 4); 37 } 38 39void loop() { 40 41 //read switch state 42 int selectA = digitalRead(2); 43 int selectB = digitalRead(3); 44 45 int selectC = digitalRead(4); 46 int selectD = digitalRead(5); 47 48 if 49 (selectA==LOW){ 50 //run garland 51 //print starting info on lcd 52 53 54 lcd.setCursor(0,0); 55 lcd.print("Garland "); 56 lcd.setCursor(0,1); 57 58 lcd.print(" "); 59 lcd.setCursor(0,2); 60 lcd.print("Move 61 car to "); 62 lcd.setCursor(0, 3); 63 64 65 //read button 66 state 67 int button = analogRead(A1); 68 if(button>800){ 69 delay(100); 70 71 }else{ 72 73 //find new random number and check that it is different 74 to previous random number 75 int newrandnumber = random(1,5); 76 while(newrandnumber==randnumber){ 77 78 newrandnumber = random(1,5); 79 } 80 81 //replace old random number 82 with new random number and print appropriate destination on lcd 83 randnumber=newrandnumber; 84 85 if(randnumber==1){ 86 lcd.print("workshop "); 87 }else 88 if(randnumber==2){ 89 lcd.print("warehouse "); 90 }else if(randnumber==3){ 91 92 lcd.print("freighthouse "); 93 }else if(randnumber==4){ 94 lcd.print("team 95 track "); 96 } 97 delay(1000); 98 } 99 100 }else if(selectB==LOW){ 101 102 //run n scale timesaver 103 //print starting info on lcd 104 105 lcd.setCursor(0,0); 106 107 lcd.print("N Scale Timesaver "); 108 lcd.setCursor(0,1); 109 lcd.print(" 110 "); 111 lcd.setCursor(0,2); 112 lcd.print("Move car 113 to "); 114 lcd.setCursor(0, 3); 115 116 //read button state 117 118 int button = analogRead(A1); 119 if(button>800){ 120 delay(100); 121 }else{ 122 123 124 //find new random number and check that it is different to previous random 125 number 126 int newrandnumber = random(1,6); 127 while(newrandnumber==randnumber){ 128 129 newrandnumber = random(1,6); 130 } 131 132 //replace old random number 133 with new random number and print appropriate destination on lcd 134 randnumber=newrandnumber; 135 136 if (randnumber==1){ 137 lcd.print("dockside "); 138 }else 139 if (randnumber==2){ 140 lcd.print("depot "); 141 }else if 142 (randnumber==3){ 143 lcd.print("jetty "); 144 }else if (randnumber==4){ 145 146 lcd.print("ramp "); 147 }else if (randnumber==5){ 148 lcd.print("factory 149 "); 150 } 151 delay(1000); 152 } 153 154 }else if(selectC==LOW){ 155 156 //run steen manufacturing 157 //print starting info on lcd 158 lcd.setCursor(0,0); 159 160 lcd.print("Steen Manufacturing "); 161 lcd.setCursor(0,1); 162 lcd.print(" 163 "); 164 lcd.setCursor(0,3); 165 lcd.print(" "); 166 167 //read button state 168 int button = analogRead(A1); 169 if(button>800){ 170 171 delay(100); 172 } else { 173 174 //find random numbers and check that 175 they are all different 176 int numberOne = random(1,6); 177 int numberTwo 178 = random(1,6); 179 while(numberTwo==numberOne){ 180 numberTwo = random(1,6); 181 182 } 183 int numberThree = random(1,6); 184 while((numberThree==numberOne)||(numberThree==numberTwo)){ 185 186 numberThree = random(1,6); 187 } 188 189 //print first car selection on 190 lcd 191 lcd.setCursor(0, 2); 192 lcd.print(" "); 193 194 lcd.setCursor(0, 2); 195 if (numberOne==1){ 196 lcd.print("van, "); 197 198 }else if (numberOne==2){ 199 lcd.print("tank, "); 200 }else if (numberOne==3){ 201 202 lcd.print("hopper, "); 203 }else if (numberOne==4){ 204 lcd.print("flat, 205 "); 206 }else if (numberOne==5){ 207 lcd.print("open, "); 208 } 209 210 //print second car selecion on lcd 211 if (numberTwo==1){ 212 lcd.print("van, 213 "); 214 }else if (numberTwo==2){ 215 lcd.print("tank, "); 216 }else 217 if (numberTwo==3){ 218 lcd.print("hopper, "); 219 }else if (numberTwo==4){ 220 221 lcd.print("flat, "); 222 }else if (numberTwo==5){ 223 lcd.print("open, 224 "); 225 } 226 //print third car selected on lcd 227 228 if (numberThree==1){ 229 230 lcd.print("van"); 231 }else if (numberThree==2){ 232 lcd.print("tank"); 233 234 }else if (numberThree==3){ 235 lcd.print("hopper"); 236 }else if (numberThree==4){ 237 238 lcd.print("flat"); 239 }else if (numberThree==5){ 240 lcd.print("open"); 241 242 } 243 delay(1000); 244 } 245 246 }else if(selectD==LOW){ 247 //run OO 248 inglenook 249 //print starting info on lcd 250 lcd.setCursor(0,0); 251 lcd.print("OO 252 Inglenook "); 253 254 //read button state 255 int button = analogRead(A1); 256 257 if(button>800){ 258 delay(100); 259 } else { 260 261 //find random 262 numbers and check that they are all different 263 int numberOne = random(1,9); 264 265 int numberTwo = random(1,9); 266 while(numberTwo==numberOne){ 267 numberTwo 268 = random(1,9); 269 } 270 int numberThree = random(1,9); 271 while((numberThree==numberOne)||(numberThree==numberTwo)){ 272 273 numberThree = random(1,9); 274 } 275 int numberFour = random(1,9); 276 277 while((numberFour==numberOne)||(numberFour==numberTwo)||(numberFour==numberThree)){ 278 279 numberFour = random(1,9); 280 } 281 int numberFive = random(1,9); 282 283 while((numberFive==numberOne)||(numberFive==numberTwo)||(numberFive==numberThree)||(numberFive==numberFour)){ 284 285 numberFive = random(1,9); 286 } 287 288 //print first car selection on 289 lcd 290 lcd.setCursor(0, 1); 291 if (numberOne==1){ 292 lcd.print("van 293 |"); 294 }else if (numberOne==2){ 295 lcd.print("tanker |"); 296 297 }else if (numberOne==3){ 298 lcd.print("hopper |"); 299 }else if 300 (numberOne==4){ 301 lcd.print("flatcar |"); 302 }else if (numberOne==5){ 303 304 lcd.print("5 plank |"); 305 }else if (numberOne==6){ 306 lcd.print("chinaclay|"); 307 308 }else if (numberOne==7){ 309 lcd.print("salt van |"); 310 }else if 311 (numberOne==8){ 312 lcd.print("livestock|"); 313 } 314 //print second 315 car selection on lcd 316 if (numberTwo==1){ 317 lcd.print(" van "); 318 319 }else if (numberTwo==2){ 320 lcd.print(" tanker "); 321 }else if 322 (numberTwo==3){ 323 lcd.print(" hopper "); 324 }else if (numberTwo==4){ 325 326 lcd.print(" flatcar "); 327 }else if (numberTwo==5){ 328 lcd.print(" 329 5 plank "); 330 }else if (numberTwo==6){ 331 lcd.print(" chinaclay"); 332 333 }else if (numberTwo==7){ 334 lcd.print(" salt van "); 335 }else if 336 (numberTwo==8){ 337 lcd.print(" livestock"); 338 } 339 //print third 340 car selection on lcd 341 lcd.setCursor(0,2); 342 if (numberThree==1){ 343 344 lcd.print("van |"); 345 }else if (numberThree==2){ 346 lcd.print("tanker 347 |"); 348 }else if (numberThree==3){ 349 lcd.print("hopper |"); 350 351 }else if (numberThree==4){ 352 lcd.print("flatcar |"); 353 }else 354 if (numberThree==5){ 355 lcd.print("5 plank |"); 356 }else if (numberThree==6){ 357 358 lcd.print("chinaclay|"); 359 }else if (numberThree==7){ 360 lcd.print("salt 361 van |"); 362 }else if (numberThree==8){ 363 lcd.print("livestock|"); 364 365 } 366 //print forth car selection on lcd 367 if (numberFour==1){ 368 369 lcd.print(" van "); 370 }else if (numberFour==2){ 371 lcd.print(" 372 tanker "); 373 }else if (numberFour==3){ 374 lcd.print(" hopper "); 375 376 }else if (numberFour==4){ 377 lcd.print(" flatcar "); 378 }else if 379 (numberFour==5){ 380 lcd.print(" 5 plank "); 381 }else if (numberFour==6){ 382 383 lcd.print(" chinaclay"); 384 }else if (numberFour==7){ 385 lcd.print(" 386 salt van "); 387 }else if (numberFour==8){ 388 lcd.print(" livestock"); 389 390 } 391 //print fifth car selection on lcd 392 lcd.setCursor(0,3); 393 if 394 (numberFive==1){ 395 lcd.print("van "); 396 }else if (numberFive==2){ 397 398 lcd.print("tanker "); 399 }else if (numberFive==3){ 400 401 lcd.print("hopper "); 402 }else if (numberFive==4){ 403 404 lcd.print("flatcar "); 405 }else if (numberFive==5){ 406 407 lcd.print("5 plank "); 408 }else if (numberFive==6){ 409 410 lcd.print("china clay "); 411 }else if (numberFive==7){ 412 413 lcd.print("salt van "); 414 }else if (numberFive==8){ 415 416 lcd.print("livestock "); 417 } 418 419 delay(1000); 420 421 } 422 } 423 } 424 425
Downloadable files
Fritzing Circuit
Fritzing Circuit
Comments
Only logged in users can leave comments