Nicolae Marton / Mbed 2 deprecated TDP3_Final

Dependencies:   mbed

Committer:
Nicolaemf
Date:
Thu Mar 21 19:43:09 2019 +0000
Revision:
0:270ea1abdd2d
Final Code implementation;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Nicolaemf 0:270ea1abdd2d 1 // ColourSensor.cpp
Nicolaemf 0:270ea1abdd2d 2
Nicolaemf 0:270ea1abdd2d 3 #include "ColourSensor_H.h"
Nicolaemf 0:270ea1abdd2d 4 #include "mbed.h"
Nicolaemf 0:270ea1abdd2d 5
Nicolaemf 0:270ea1abdd2d 6 ColourSensor::ColourSensor(PinName sensor1, PinName sensor2, PinName Out):
Nicolaemf 0:270ea1abdd2d 7 inOne(sensor1), inTwo(sensor2), solenoid(Out) {
Nicolaemf 0:270ea1abdd2d 8 // Class constructor for colour sensor & solenoid
Nicolaemf 0:270ea1abdd2d 9 // Sets initial conditions of operation
Nicolaemf 0:270ea1abdd2d 10
Nicolaemf 0:270ea1abdd2d 11 initialConditions();
Nicolaemf 0:270ea1abdd2d 12 }
Nicolaemf 0:270ea1abdd2d 13
Nicolaemf 0:270ea1abdd2d 14 void ColourSensor::initialConditions() {
Nicolaemf 0:270ea1abdd2d 15 // set initial conditions & variables
Nicolaemf 0:270ea1abdd2d 16 //printf("Setting Initial Conditions\n\r");
Nicolaemf 0:270ea1abdd2d 17 sensorOne = inOne.read();
Nicolaemf 0:270ea1abdd2d 18 sensorOneOld = inOne.read();
Nicolaemf 0:270ea1abdd2d 19 sensorOneCheck = inOne.read();
Nicolaemf 0:270ea1abdd2d 20 sensorTwo = inTwo.read();
Nicolaemf 0:270ea1abdd2d 21 sensorTwoOld = inTwo.read();
Nicolaemf 0:270ea1abdd2d 22 sensorTwoCheck = inTwo.read();
Nicolaemf 0:270ea1abdd2d 23
Nicolaemf 0:270ea1abdd2d 24
Nicolaemf 0:270ea1abdd2d 25 newDetection = 0;
Nicolaemf 0:270ea1abdd2d 26 diskHave = 0;
Nicolaemf 0:270ea1abdd2d 27
Nicolaemf 0:270ea1abdd2d 28 solenoidState = 0;
Nicolaemf 0:270ea1abdd2d 29
Nicolaemf 0:270ea1abdd2d 30 toggleA = 0;
Nicolaemf 0:270ea1abdd2d 31 toggleB = 0;
Nicolaemf 0:270ea1abdd2d 32 toggleC = 0;
Nicolaemf 0:270ea1abdd2d 33 toggleConst = 1;
Nicolaemf 0:270ea1abdd2d 34
Nicolaemf 0:270ea1abdd2d 35 flagColour = 0;
Nicolaemf 0:270ea1abdd2d 36
Nicolaemf 0:270ea1abdd2d 37 solenoidSet(0);
Nicolaemf 0:270ea1abdd2d 38 }
Nicolaemf 0:270ea1abdd2d 39
Nicolaemf 0:270ea1abdd2d 40 void ColourSensor::solenoidOn() {
Nicolaemf 0:270ea1abdd2d 41 // Interrupt (software): Turn ON solenoid
Nicolaemf 0:270ea1abdd2d 42 //printf("Turning solenoid back ON\n\r");
Nicolaemf 0:270ea1abdd2d 43
Nicolaemf 0:270ea1abdd2d 44 solenoidSet(0);
Nicolaemf 0:270ea1abdd2d 45 }
Nicolaemf 0:270ea1abdd2d 46
Nicolaemf 0:270ea1abdd2d 47 void ColourSensor::solenoidSet(bool state) {
Nicolaemf 0:270ea1abdd2d 48 // Turns solenoid on/off, sets solenoid's pull strength
Nicolaemf 0:270ea1abdd2d 49 // state: pass 1 or 0 for solenoid ON or OFF respectively
Nicolaemf 0:270ea1abdd2d 50
Nicolaemf 0:270ea1abdd2d 51 solenoid.write(state);
Nicolaemf 0:270ea1abdd2d 52
Nicolaemf 0:270ea1abdd2d 53 //printf("Solenoid has been set to %i\n\r", state);
Nicolaemf 0:270ea1abdd2d 54
Nicolaemf 0:270ea1abdd2d 55 solenoidState = state;
Nicolaemf 0:270ea1abdd2d 56 }
Nicolaemf 0:270ea1abdd2d 57
Nicolaemf 0:270ea1abdd2d 58 void ColourSensor::readSensor() {
Nicolaemf 0:270ea1abdd2d 59 // Interrupt function (software): reads in colour detection state
Nicolaemf 0:270ea1abdd2d 60
Nicolaemf 0:270ea1abdd2d 61 // Update variables
Nicolaemf 0:270ea1abdd2d 62 sensorOneOld = sensorOne;
Nicolaemf 0:270ea1abdd2d 63 sensorTwoOld = sensorTwo;
Nicolaemf 0:270ea1abdd2d 64
Nicolaemf 0:270ea1abdd2d 65 //printf("Reading colour detection state\n\r");
Nicolaemf 0:270ea1abdd2d 66
Nicolaemf 0:270ea1abdd2d 67 sensorOne = inOne.read();
Nicolaemf 0:270ea1abdd2d 68 sensorTwo = inTwo.read();
Nicolaemf 0:270ea1abdd2d 69
Nicolaemf 0:270ea1abdd2d 70 toggleA = 1;
Nicolaemf 0:270ea1abdd2d 71 }
Nicolaemf 0:270ea1abdd2d 72
Nicolaemf 0:270ea1abdd2d 73 void ColourSensor::convert() {
Nicolaemf 0:270ea1abdd2d 74 // Converts sensor logic to sensible logic
Nicolaemf 0:270ea1abdd2d 75
Nicolaemf 0:270ea1abdd2d 76 sensorIfOld = sensorIf; // Transfer variable states
Nicolaemf 0:270ea1abdd2d 77 newDetection = 0;
Nicolaemf 0:270ea1abdd2d 78
Nicolaemf 0:270ea1abdd2d 79 sensorIf = !(sensorOne xor sensorTwo);
Nicolaemf 0:270ea1abdd2d 80
Nicolaemf 0:270ea1abdd2d 81 if(sensorIf && !sensorIfOld) {
Nicolaemf 0:270ea1abdd2d 82 sensorColour = sensorOne & sensorTwo;
Nicolaemf 0:270ea1abdd2d 83 newDetection = 1;
Nicolaemf 0:270ea1abdd2d 84 toggleB = 1;
Nicolaemf 0:270ea1abdd2d 85 }
Nicolaemf 0:270ea1abdd2d 86 if(!diskHave)solenoidSet(0);
Nicolaemf 0:270ea1abdd2d 87 }
Nicolaemf 0:270ea1abdd2d 88
Nicolaemf 0:270ea1abdd2d 89 void ColourSensor::ColourCheck(){
Nicolaemf 0:270ea1abdd2d 90 sensorOneCheck = inOne.read();
Nicolaemf 0:270ea1abdd2d 91 sensorTwoCheck = inTwo.read();
Nicolaemf 0:270ea1abdd2d 92 bool sensorColourCheck = sensorOneCheck & sensorTwoCheck;
Nicolaemf 0:270ea1abdd2d 93 if( sensorColour == sensorColourCheck )toggleC = 1;
Nicolaemf 0:270ea1abdd2d 94 else toggleB = 0;
Nicolaemf 0:270ea1abdd2d 95
Nicolaemf 0:270ea1abdd2d 96 }
Nicolaemf 0:270ea1abdd2d 97
Nicolaemf 0:270ea1abdd2d 98
Nicolaemf 0:270ea1abdd2d 99
Nicolaemf 0:270ea1abdd2d 100
Nicolaemf 0:270ea1abdd2d 101
Nicolaemf 0:270ea1abdd2d 102 void ColourSensor::makeColourActive() {
Nicolaemf 0:270ea1abdd2d 103 // Interrupt function (software): reactivates colour processing
Nicolaemf 0:270ea1abdd2d 104 toggleConst = 1;
Nicolaemf 0:270ea1abdd2d 105
Nicolaemf 0:270ea1abdd2d 106 //printf("Colour processing Activated\n\r");
Nicolaemf 0:270ea1abdd2d 107 }
Nicolaemf 0:270ea1abdd2d 108
Nicolaemf 0:270ea1abdd2d 109 void ColourSensor::process() {
Nicolaemf 0:270ea1abdd2d 110 // Processes change of state in colour detection
Nicolaemf 0:270ea1abdd2d 111 //printf("Colour process() called\n\r");
Nicolaemf 0:270ea1abdd2d 112
Nicolaemf 0:270ea1abdd2d 113 if (!diskHave && newDetection) {
Nicolaemf 0:270ea1abdd2d 114 // If: No disk & colour newly detected, turn on solenoid
Nicolaemf 0:270ea1abdd2d 115 //printf("Colour detected; collecting disk\n\r");
Nicolaemf 0:270ea1abdd2d 116
Nicolaemf 0:270ea1abdd2d 117 solenoidSet(1);
Nicolaemf 0:270ea1abdd2d 118 diskHave = 1;
Nicolaemf 0:270ea1abdd2d 119 diskColour = sensorColour;
Nicolaemf 0:270ea1abdd2d 120 }
Nicolaemf 0:270ea1abdd2d 121
Nicolaemf 0:270ea1abdd2d 122 else if ((diskHave && newDetection) && (diskColour == sensorColour)) {
Nicolaemf 0:270ea1abdd2d 123 // If: Have disk & colour newly detected & disk colour is same as detected colour, turn off solenoid
Nicolaemf 0:270ea1abdd2d 124 //printf("Correct colour detected; depositing disk\n\r");
Nicolaemf 0:270ea1abdd2d 125
Nicolaemf 0:270ea1abdd2d 126 solenoidSet(0);
Nicolaemf 0:270ea1abdd2d 127 flagColour = 1;
Nicolaemf 0:270ea1abdd2d 128 diskHave = 0;
Nicolaemf 0:270ea1abdd2d 129 }
Nicolaemf 0:270ea1abdd2d 130
Nicolaemf 0:270ea1abdd2d 131 /*else if ((diskHave && newDetection) && (sensorTwo != diskColour)) {
Nicolaemf 0:270ea1abdd2d 132 // If: Have disk & colour newly detected & disk colour is NOT same as detected colour, update variables
Nicolaemf 0:270ea1abdd2d 133 //printf("Wrong colour detected; keeping disk\n\r");
Nicolaemf 0:270ea1abdd2d 134 }*/
Nicolaemf 0:270ea1abdd2d 135
Nicolaemf 0:270ea1abdd2d 136 else {
Nicolaemf 0:270ea1abdd2d 137 //printf("Cool (y)\n\r");
Nicolaemf 0:270ea1abdd2d 138 }
Nicolaemf 0:270ea1abdd2d 139
Nicolaemf 0:270ea1abdd2d 140 // Temporarily disable colour processing
Nicolaemf 0:270ea1abdd2d 141 //printf("Disabling colour processing\n\r");
Nicolaemf 0:270ea1abdd2d 142 toggleConst = 0;
Nicolaemf 0:270ea1abdd2d 143 toggleC = 0;
Nicolaemf 0:270ea1abdd2d 144 }