Project Text.
#include <LCD_1602.h>#include <Coal_Basin_LEDs.h>//Coal_Basin_Buttons.ino //test buttons//* Program to read push buttons 'A' through 'M' on Coal Basin Control Panel' * Will assume only one key pressed at at time- * get_route( ) will return value pushed key: 1,2,4,8,16 etc * Have choice * Coal_Basin_Buttons route1(10,11,12); or * Coal_Basin_Buttons route1; which will default to load = 10, clock = 11 serial_in = 12 */#include "Coal_Basin_Buttons.h"Coal_Basin_Buttons route1(4,5,6);Coal_Basin_LEDs dsp_route;LCD_1602 LCD;void setup() { Serial.begin(115200); route1.begin( ); dsp_route.begin( ); LCD.begin( ); LCD.message("Basin Controller","Testing Buttons"); delay(2000);}void loop() { unsigned int last_route; unsigned int route_request = route1.get_route( ); if (route_request != last_route) { last_route = route_request; LCD.message(0,route_request); dsp_route.control_signals(route_request); Serial.println(route_request); } delay(500); }------------------------------------//Coal_Basin_Buttons.cpp implementation file#include "Coal_Basin_Buttons.h"Coal_Basin_Buttons:: Coal_Basin_Buttons(int load, int clkin, int serin ){ _load = load; _clkin=clkin; _serin = serin;}Coal_Basin_Buttons:: Coal_Basin_Buttons( ){ _load = 10; _clkin=11; _serin = 12;}void Coal_Basin_Buttons::begin( ){ pinMode(_load,OUTPUT); pinMode(_clkin,OUTPUT); digitalWrite(_load,HIGH); digitalWrite(_clkin,LOW);}unsigned int Coal_Basin_Buttons::_convert(unsigned int buttons){ if (buttons&I_SILOS) return(SILOS); //1 if (buttons&I_WHARF1) return(WHARF1); //2 if (buttons&I_WHARF2) return(WHARF2); //4 if (buttons&I_SIDING1) return(SIDING1); //8 if (buttons&I_SIDING2) return(SIDING2); //16 if (buttons&I_COAL1) return(COAL1); //32 if (buttons&I_COAL2) return(COAL2); //64 if (buttons&I_STATION) return(STATION); //256 if (buttons&I_TURNTABLE) return(TURNTABLE); //512 if (buttons&I_YARD) return(YARD); //128 if (buttons&I_BASIN) return(BASIN); //1024 if (buttons&I_EASTSIDE1) return(EASTSIDE1); //2048 if (buttons&I_EASTSIDE2) return(EASTSIDE2); //4096 return NULL; //unused buttons}unsigned int Coal_Basin_Buttons::get_route( ){ unsigned int buttons =0; digitalWrite(_load,LOW); //pulse to read buttons into Par 2 Ser cct digitalWrite(_load,HIGH); for (int pp = 0; pp<16 ; pp++) //read 16 bits { buttons *= 2; //left shift buttons += !digitalRead(_serin); //add bit digitalWrite(_clkin,HIGH); //clock Par to ser digitalWrite(_clkin,LOW); } return (Coal_Basin_Buttons::_convert(buttons)); //return 256; //for testing without buttons } -----------------------------------------//Coal_Basin_Buttons.h Header file#ifndef COAL_BASIN_BUTTOS_H#define COAL_BASIN_BUTTON_H#include "Arduino.h"//PCB Wiring#define I_NULL 0#define I_SILOS 128#define I_WHARF1 64#define I_WHARF2 32#define I_SIDING1 16#define I_SIDING2 1#define I_COAL1 4#define I_COAL2 8#define I_YARD 16384#define I_STATION 2#define I_TURNTABLE 32768#define I_BASIN 4096#define I_EASTSIDE1 256#define I_EASTSIDE2 8192//desired results#define NULL 0#define SILOS 1#define WHARF1 2#define WHARF2 4#define SIDING1 8#define SIDING2 16#define COAL1 32#define COAL2 64#define YARD 128#define STATION 256#define TURNTABLE 512#define BASIN 1024#define EASTSIDE1 2048#define EASTSIDE2 4096class Coal_Basin_Buttons { public: Coal_Basin_Buttons (int load, int clkin, int serin ); Coal_Basin_Buttons ( ); void begin( ); unsigned int get_route( ); private: int _load; int _clkin; int _serin; unsigned int _convert(unsigned int ); };#endif------------------------------------------------------