adds check if sensor is still on bus
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				continuous-integration/drone/push Build is passing
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	continuous-integration/drone/push Build is passing
				
			This commit is contained in:
		@@ -13,17 +13,21 @@ Sensor::Sensor(int id, float resolution, float accuracy, DallasTemperature &bus,
 | 
				
			|||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
float Sensor::read() const {
 | 
					float Sensor::read() const {
 | 
				
			||||||
 | 
						if(!bus.isConnected(address)) return NAN;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	bus.requestTemperaturesByAddress(address);
 | 
						bus.requestTemperaturesByAddress(address);
 | 
				
			||||||
	return bus.getTempC(address);
 | 
						return bus.getTempC(address);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
uint16_t Sensor::makeDataPacket(byte (&buffer)[dataPacketMaxSize]) const {
 | 
					bool Sensor::makeDataPacket(byte (&buffer)[dataPacketSize]) const {
 | 
				
			||||||
 | 
						float readVal = read();
 | 
				
			||||||
 | 
						if(isnan(readVal)) return false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	size_t written = 0;
 | 
						size_t written = 0;
 | 
				
			||||||
 | 
					 | 
				
			||||||
	written += writeType(&buffer[written], id);
 | 
						written += writeType(&buffer[written], id);
 | 
				
			||||||
	written += writeType(&buffer[written], read());
 | 
						written += writeType(&buffer[written], readVal);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return written + 1;
 | 
						return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void Sensor::registerSensor(byte (&buffer)[serializedSize]) const {
 | 
					void Sensor::registerSensor(byte (&buffer)[serializedSize]) const {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ class Sensor {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	public:
 | 
						public:
 | 
				
			||||||
	static constexpr uint16_t serializedSize = sizeof(id) + sizeof(resolution) + sizeof(accuracy);
 | 
						static constexpr uint16_t serializedSize = sizeof(id) + sizeof(resolution) + sizeof(accuracy);
 | 
				
			||||||
	static constexpr uint16_t dataPacketMaxSize = 256;
 | 
						static constexpr uint16_t dataPacketSize = sizeof(id) + sizeof(float);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	Sensor(int id, float resolution, float accuracy, DallasTemperature &bus, DeviceAddress address);
 | 
						Sensor(int id, float resolution, float accuracy, DallasTemperature &bus, DeviceAddress address);
 | 
				
			||||||
@@ -24,7 +24,7 @@ class Sensor {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	uint16_t getId() const {return id;};
 | 
						uint16_t getId() const {return id;};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	uint16_t makeDataPacket(byte (&buffer)[dataPacketMaxSize]) const;
 | 
						bool makeDataPacket(byte (&buffer)[dataPacketSize]) const;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	void registerSensor(byte (&buffer)[serializedSize]) const;
 | 
						void registerSensor(byte (&buffer)[serializedSize]) const;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -40,15 +40,15 @@ int main() {
 | 
				
			|||||||
		packetSerial.send(buff, sizeof(buff));
 | 
							packetSerial.send(buff, sizeof(buff));
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	byte dataBuff[Sensor::dataPacketMaxSize + 1];
 | 
						byte dataBuff[Sensor::dataPacketSize + 1];
 | 
				
			||||||
	dataBuff[0] = (byte)PacketType::data;
 | 
						dataBuff[0] = (byte)PacketType::data;
 | 
				
			||||||
	uint16_t written;
 | 
					 | 
				
			||||||
	while(true) {
 | 
						while(true) {
 | 
				
			||||||
		for(int i = 0; i < sensors.size(); ++i) {
 | 
							for(int i = 0; i < sensors.size(); ++i) {
 | 
				
			||||||
			written = sensors.get(i)->makeDataPacket((byte(&)[Sensor::dataPacketMaxSize])dataBuff[1]);
 | 
								if(sensors.get(i)->makeDataPacket((byte(&)[Sensor::dataPacketSize])dataBuff[1])) {
 | 
				
			||||||
			packetSerial.send(dataBuff, written);
 | 
									packetSerial.send(dataBuff, sizeof(dataBuff));
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		delay(500);
 | 
							}
 | 
				
			||||||
 | 
							delay(5000);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for(int i = 0; i < sensors.size(); ++i) {
 | 
						for(int i = 0; i < sensors.size(); ++i) {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user