Finn Quicke / Mbed 2 deprecated TDP3_ColourSensor_OOP

Dependencies:   mbed

Committer:
quickeman
Date:
Thu Mar 14 12:53:00 2019 +0000
Revision:
0:c3344ac96db1
Child:
1:e4320a230347
OOP version of colour detection program

Who changed what in which revision?

UserRevisionLine numberNew contents of line
quickeman 0:c3344ac96db1 1 // ColourSensor.cpp
quickeman 0:c3344ac96db1 2
quickeman 0:c3344ac96db1 3 #include "ColourSensor_H.h"
quickeman 0:c3344ac96db1 4 #include "mbed.h"
quickeman 0:c3344ac96db1 5
quickeman 0:c3344ac96db1 6 ColourSensor::ColourSensor(PinName If, PinName Which, PinName Out):
quickeman 0:c3344ac96db1 7 inIf(If), inWhich(Which), solenoid(Out) {
quickeman 0:c3344ac96db1 8 // Class constructor for colour sensor & solenoid
quickeman 0:c3344ac96db1 9 // Sets initial conditions of operation
quickeman 0:c3344ac96db1 10
quickeman 0:c3344ac96db1 11 initialConditions();
quickeman 0:c3344ac96db1 12 }
quickeman 0:c3344ac96db1 13
quickeman 0:c3344ac96db1 14 void ColourSensor::initialConditions() {
quickeman 0:c3344ac96db1 15 // set initial conditions & variables
quickeman 0:c3344ac96db1 16 printf("Setting Initial Conditions\n\r");
quickeman 0:c3344ac96db1 17 detectedIf = 0;
quickeman 0:c3344ac96db1 18 detectedIfOld = 0;
quickeman 0:c3344ac96db1 19 newDetection = 0;
quickeman 0:c3344ac96db1 20 diskHave = 0;
quickeman 0:c3344ac96db1 21
quickeman 0:c3344ac96db1 22 solenoidState = 0;
quickeman 0:c3344ac96db1 23
quickeman 0:c3344ac96db1 24 toggleA = 0;
quickeman 0:c3344ac96db1 25 toggleB = 0;
quickeman 0:c3344ac96db1 26 toggleConst = 1;
quickeman 0:c3344ac96db1 27
quickeman 0:c3344ac96db1 28 solenoidSet(0);
quickeman 0:c3344ac96db1 29 }
quickeman 0:c3344ac96db1 30
quickeman 0:c3344ac96db1 31 void ColourSensor::solenoidSet(bool state) {
quickeman 0:c3344ac96db1 32 // Turns solenoid on/off, sets solenoid's pull strength
quickeman 0:c3344ac96db1 33 // state: pass 1 or 0 for solenoid ON or OFF respectively
quickeman 0:c3344ac96db1 34
quickeman 0:c3344ac96db1 35 if (state) {
quickeman 0:c3344ac96db1 36 solenoid.write(1);
quickeman 0:c3344ac96db1 37 printf("Solenoid has been turn ON\n\r");
quickeman 0:c3344ac96db1 38 }
quickeman 0:c3344ac96db1 39
quickeman 0:c3344ac96db1 40 else {
quickeman 0:c3344ac96db1 41 solenoid.write(0);
quickeman 0:c3344ac96db1 42 printf("Solenoid has been turned OFF\n\r");
quickeman 0:c3344ac96db1 43 }
quickeman 0:c3344ac96db1 44
quickeman 0:c3344ac96db1 45 solenoidState = state;
quickeman 0:c3344ac96db1 46 }
quickeman 0:c3344ac96db1 47
quickeman 0:c3344ac96db1 48 void ColourSensor::readIf() {
quickeman 0:c3344ac96db1 49 // Interrupt function (software): reads in colour detection state
quickeman 0:c3344ac96db1 50
quickeman 0:c3344ac96db1 51 // Update variables
quickeman 0:c3344ac96db1 52 detectedIfOld = detectedIf;
quickeman 0:c3344ac96db1 53 newDetection = 0;
quickeman 0:c3344ac96db1 54
quickeman 0:c3344ac96db1 55 printf("Reading colour detection state\n\r");
quickeman 0:c3344ac96db1 56
quickeman 0:c3344ac96db1 57 detectedIf = inIf.read();
quickeman 0:c3344ac96db1 58
quickeman 0:c3344ac96db1 59 if ((detectedIf && !detectedIfOld)) {
quickeman 0:c3344ac96db1 60 // if colour is newly detected
quickeman 0:c3344ac96db1 61 newDetection = 1;
quickeman 0:c3344ac96db1 62 toggleA = 1;
quickeman 0:c3344ac96db1 63 printf("Colour newly detected\n\r");
quickeman 0:c3344ac96db1 64 }
quickeman 0:c3344ac96db1 65 }
quickeman 0:c3344ac96db1 66
quickeman 0:c3344ac96db1 67 void ColourSensor::readWhich() {
quickeman 0:c3344ac96db1 68 //Interrupt function (software): reads in which colour is detected
quickeman 0:c3344ac96db1 69
quickeman 0:c3344ac96db1 70 detectedWhich = inWhich.read();
quickeman 0:c3344ac96db1 71
quickeman 0:c3344ac96db1 72 printf("Colour detected; code: %d\n\r", detectedWhich);
quickeman 0:c3344ac96db1 73
quickeman 0:c3344ac96db1 74 toggleB = 1;
quickeman 0:c3344ac96db1 75 }
quickeman 0:c3344ac96db1 76
quickeman 0:c3344ac96db1 77 void ColourSensor::makeColourActive() {
quickeman 0:c3344ac96db1 78 // Interrupt function (software): reactivates colour processing
quickeman 0:c3344ac96db1 79 toggleConst = 1;
quickeman 0:c3344ac96db1 80
quickeman 0:c3344ac96db1 81 printf("Colour processing Activated\n\r");
quickeman 0:c3344ac96db1 82 }
quickeman 0:c3344ac96db1 83
quickeman 0:c3344ac96db1 84 void ColourSensor::process() {
quickeman 0:c3344ac96db1 85 // Processes change of state in colour detection
quickeman 0:c3344ac96db1 86 printf("Colour process() called\n\r");
quickeman 0:c3344ac96db1 87
quickeman 0:c3344ac96db1 88 if (!diskHave && newDetection) {
quickeman 0:c3344ac96db1 89 // If: No disk & colour newly detected, turn on solenoid
quickeman 0:c3344ac96db1 90 printf("Colour detected; collecting disk\n\r");
quickeman 0:c3344ac96db1 91
quickeman 0:c3344ac96db1 92 solenoidSet(1);
quickeman 0:c3344ac96db1 93 diskHave = 1;
quickeman 0:c3344ac96db1 94 diskColour = detectedWhich;
quickeman 0:c3344ac96db1 95 }
quickeman 0:c3344ac96db1 96
quickeman 0:c3344ac96db1 97 else if ((diskHave && newDetection) && (detectedWhich == diskColour)) {
quickeman 0:c3344ac96db1 98 // If: Have disk & colour newly detected & disk colour is same as detected colour, turn off solenoid
quickeman 0:c3344ac96db1 99 printf("Correct colour detected; depositing disk\n\r");
quickeman 0:c3344ac96db1 100 solenoidSet(0);
quickeman 0:c3344ac96db1 101 diskHave = 0;
quickeman 0:c3344ac96db1 102 }
quickeman 0:c3344ac96db1 103
quickeman 0:c3344ac96db1 104 else if ((diskHave && newDetection) && (detectedWhich != diskColour)) {
quickeman 0:c3344ac96db1 105 // If: Have disk & colour newly detected & disk colour is NOT same as detected colour, update variables
quickeman 0:c3344ac96db1 106 printf("Wrong colour detected; keeping disk\n\r");
quickeman 0:c3344ac96db1 107 }
quickeman 0:c3344ac96db1 108
quickeman 0:c3344ac96db1 109 else {
quickeman 0:c3344ac96db1 110 printf("Cool (y)\n\r");
quickeman 0:c3344ac96db1 111 }
quickeman 0:c3344ac96db1 112
quickeman 0:c3344ac96db1 113 // Temporarily disable colour processing
quickeman 0:c3344ac96db1 114 printf("Disabling colour processing\n\r");
quickeman 0:c3344ac96db1 115 toggleConst = 0;
quickeman 0:c3344ac96db1 116 }