| 27 | } |
| 28 | |
| 29 | int hallEffectReader::readHallEffectSensor(int numberSensor){ |
| 30 | //check range: |
| 31 | if (numberSensor >= hallEffectSensorMax){ |
| 32 | return -1; |
| 33 | } |
| 34 | //calculate which chip the sensor is on: |
| 35 | int chipNumber; //which ADC chip is it? |
| 36 | int index; //which index 0-7 is it? |
| 37 | |
| 38 | chipNumber = numberSensor / 8; |
| 39 | index = numberSensor % 8; |
| 40 | |
| 41 | unsigned char buffer[3]; |
| 42 | buffer[0] = 0x01; |
| 43 | buffer[1] = 0x80 | (index << 4); |
| 44 | buffer[2] = 0x00; |
| 45 | |
| 46 | //deselect chip: |
| 47 | deselectChipNumber(chipNumber); |
| 48 | //may need to insert wait here if clock too slow |
| 49 | //select chip: |
| 50 | selectChipNumber(chipNumber); |
| 51 | if (wiringPiSPIDataRW(SPIchannel, buffer, 3) == -1){ |
| 52 | return -1; |
| 53 | } |
| 54 | deselectChipNumber(chipNumber); |
| 55 | |
| 56 | int ADCval = ((buffer[1] & 0x03) << 8) | buffer[2]; |
| 57 | return ADCval; |
| 58 | } |
| 59 | |
| 60 | void hallEffectReader::selectChipNumber(int chipNumber){ |
| 61 | //break into three bits |
nothing calls this directly
no outgoing calls
no test coverage detected