diff --git a/strandstring/strandstring.pde b/strandstring/strandstring.pde index 9db34b5b29a89212fc5a7fc2de44b880b3bb643d..c2e348e1c183ea7241e11c75332e4b678716c43a 100644 --- a/strandstring/strandstring.pde +++ b/strandstring/strandstring.pde @@ -105,6 +105,21 @@ void put_char(volatile unsigned char *port, unsigned char pin, char txchar) { interrupts(); } +void put_hex(volatile unsigned char *port, unsigned char pin, uint8_t hex_char) { + uint8_t val = (hex_char & (0b1111u << 4)) >> 4; + if (val < 10) { + put_char(port, pin, '0' + val); + } else { + put_char(port, pin, 'A' + (val - 10)); + } + val = hex_char & 0b1111u; + if (val < 10) { + put_char(port, pin, '0' + val); + } else { + put_char(port, pin, 'A' + (val - 10)); + } +} + void put_string(volatile unsigned char *port, unsigned char pin, char *str) { // // print a null-terminated string @@ -117,7 +132,18 @@ void put_string(volatile unsigned char *port, unsigned char pin, char *str) { } while (str[index] != 0); } -OneWire ds(11); // on pin 10 (a 4.7K resistor is necessary) +void put_line(volatile unsigned char *port, unsigned char pin, char *str) { + put_string(port, pin, str); + put_char(port, pin, '\n'); +} + +void put_float(volatile unsigned char *port, unsigned char pin, float x) { + static char buffer[10]; + dtostrf(x, 8, 2, buffer); + put_string(port, pin, buffer); +} + +OneWire ds(2); // on PA2 (a 4.7K resistor is necessary) void setup(void) { // Set clock divider to 1. @@ -148,9 +174,6 @@ void loop(void) { PORTB |= led_pin; //put_char(&serial_port, serial_pin_out, '1'); } - put_string(&serial_port, serial_pin_out, "hello world"); - delay(500); - return; byte i; byte present = 0; @@ -159,8 +182,8 @@ void loop(void) { byte addr[8]; float celsius, fahrenheit; - if ( !ds.search(addr)) { - put_string(&serial_port, serial_pin_out, "No more addresses."); + if (!ds.search(addr)) { + put_line(&serial_port, serial_pin_out, "No more addresses."); ds.reset_search(); delay(250); return; @@ -168,35 +191,33 @@ void loop(void) { //Serial.print("ROM ="); put_string(&serial_port, serial_pin_out, "ROM="); - for( i = 0; i < 8; i++) { + for (i = 0; i < 8; i++) { put_char(&serial_port, serial_pin_out, ' '); - //Serial.print(addr[i], HEX); - put_string(&serial_port, serial_pin_out, "xxx"); - //put_string(&serial_port, serial_pin_out, addr[i]) + put_hex(&serial_port, serial_pin_out, addr[i]); } + put_char(&serial_port, serial_pin_out, '\n'); if (OneWire::crc8(addr, 7) != addr[7]) { - put_string(&serial_port, serial_pin_out, "CRC is not valid!"); + put_line(&serial_port, serial_pin_out, "CRC is not valid!"); return; } - //Serial.println(); // the first ROM byte indicates which chip switch (addr[0]) { case 0x10: - put_string(&serial_port, serial_pin_out, " Chip = DS18S20"); // or old DS1820 + put_line(&serial_port, serial_pin_out, " Chip = DS18S20"); // or old DS1820 type_s = 1; break; case 0x28: - put_string(&serial_port, serial_pin_out, " Chip = DS18B20"); + put_line(&serial_port, serial_pin_out, " Chip = DS18B20"); type_s = 0; break; case 0x22: - put_string(&serial_port, serial_pin_out, " Chip = DS1822"); + put_line(&serial_port, serial_pin_out, " Chip = DS1822"); type_s = 0; break; default: - put_string(&serial_port, serial_pin_out, "Device is not a DS18x20 family device."); + put_line(&serial_port, serial_pin_out, "Device is not a DS18x20 family device."); return; } @@ -212,16 +233,14 @@ void loop(void) { ds.write(0xBE); // Read Scratchpad put_string(&serial_port, serial_pin_out, " Data = "); - put_string(&serial_port, serial_pin_out, "xxx"); - //put_string(&serial_port, serial_pin_out, present, HEX); - put_string(&serial_port, serial_pin_out, " "); + put_hex(&serial_port, serial_pin_out, present); + put_char(&serial_port, serial_pin_out, ' '); for ( i = 0; i < 9; i++) { // we need 9 bytes data[i] = ds.read(); - //Serial.print(data[i], HEX); - put_string(&serial_port, serial_pin_out, " thing"); + put_hex(&serial_port, serial_pin_out, data[i]); } put_string(&serial_port, serial_pin_out, " CRC="); - //put_string(&serial_port, serial_pin_out, OneWire::crc8(data, 8), HEX); + put_hex(&serial_port, serial_pin_out, OneWire::crc8(data, 8)); // Convert the data to actual temperature // because the result is a 16 bit signed integer, it should @@ -245,8 +264,8 @@ void loop(void) { celsius = (float)raw / 16.0; fahrenheit = celsius * 1.8 + 32.0; put_string(&serial_port, serial_pin_out, " Temperature = "); - //put_string(&serial_port, serial_pin_out, celsius); + put_float(&serial_port, serial_pin_out, celsius); put_string(&serial_port, serial_pin_out, " Celsius, "); - //put_string(&serial_port, serial_pin_out, fahrenheit); - put_string(&serial_port, serial_pin_out, " Fahrenheit"); + put_float(&serial_port, serial_pin_out, fahrenheit); + put_line(&serial_port, serial_pin_out, " Fahrenheit"); }