Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
ColourSensor.cpp@1:e4320a230347, 2019-03-18 (annotated)
- Committer:
- quickeman
- Date:
- Mon Mar 18 11:04:39 2019 +0000
- Revision:
- 1:e4320a230347
- Parent:
- 0:c3344ac96db1
Various updates; removed print statements
Who changed what in which revision?
User | Revision | Line number | New 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 | 1:e4320a230347 | 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 | 1:e4320a230347 | 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 | 1:e4320a230347 | 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 | 1:e4320a230347 | 55 | //printf("Reading colour detection state\n\r"); |
quickeman | 0:c3344ac96db1 | 56 | |
quickeman | 1:e4320a230347 | 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 | 1:e4320a230347 | 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 | 1:e4320a230347 | 70 | detectedWhich = !inWhich.read(); |
quickeman | 0:c3344ac96db1 | 71 | |
quickeman | 1:e4320a230347 | 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 | 1:e4320a230347 | 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 | 1:e4320a230347 | 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 | 1:e4320a230347 | 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 | 1:e4320a230347 | 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 | 1:e4320a230347 | 106 | //printf("Wrong colour detected; keeping disk\n\r"); |
quickeman | 0:c3344ac96db1 | 107 | } |
quickeman | 0:c3344ac96db1 | 108 | |
quickeman | 0:c3344ac96db1 | 109 | else { |
quickeman | 1:e4320a230347 | 110 | //printf("Cool (y)\n\r"); |
quickeman | 0:c3344ac96db1 | 111 | } |
quickeman | 0:c3344ac96db1 | 112 | |
quickeman | 0:c3344ac96db1 | 113 | // Temporarily disable colour processing |
quickeman | 1:e4320a230347 | 114 | //printf("Disabling colour processing\n\r"); |
quickeman | 0:c3344ac96db1 | 115 | toggleConst = 0; |
quickeman | 0:c3344ac96db1 | 116 | } |