Advertisement
DragNfLy

Stepper_DS18B20

May 16th, 2016
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.23 KB | None | 0 0
  1. /*
  2.  * Stepper DS18B20
  3.  */
  4.  
  5. #include <OneWire.h>
  6.  
  7. // Constants
  8. const int redLed = 11;
  9. const int blueLed = 10;
  10.  
  11. int DS18S20_Pin = 12; // DS18S20 on digital 12
  12.  
  13. // Temperature chip i/o
  14. OneWire ds(DS18S20_Pin); // on digital pin 12
  15.  
  16. // Variables
  17. float temperature = 25.0; //sensor updates this
  18.  
  19. int substeps = 16;
  20.  
  21. int    stepperApinDir  = 7;
  22. int    stepperApinStep = 4;
  23. double stepperAcurrPosition = 0;
  24. double stepperAdestPosition = 0;
  25. double stepperAtimer = 0;
  26. int    stepperAtoggle = 0;
  27. double stepperAspeed = 4800 / substeps; //higher is slower
  28.  
  29. unsigned long interval = 5000; // the time we need to wait
  30. unsigned long previousMillis = 0; // millis() returns an unsigned long.
  31.  
  32. void setup(void) {
  33.  
  34.   Serial.begin(9600);
  35.   Serial.println("Initializing...");
  36.   Serial.println(temperature);
  37.  
  38.   pinMode(redLed, OUTPUT);
  39.   pinMode(blueLed, OUTPUT);
  40.  
  41.   //READY!
  42.   delay(1000);
  43. }
  44.  
  45. void loop(void) {
  46.  
  47.   temperature = getTemp();
  48.   Serial.println(temperature);
  49.  
  50.   if (temperature < 23.0) {
  51.     //Close vents.
  52.     stepperAdestPosition = 100;
  53.     digitalWrite(redLed, LOW);
  54.     digitalWrite(blueLed, HIGH);
  55.     Serial.println("CHECKPOINT 001");
  56.   }
  57.  
  58.   if (temperature > 24.0) {
  59.     //Open vents.
  60.     stepperAdestPosition = 200; //calibrate these!
  61.     digitalWrite(redLed, HIGH);
  62.     digitalWrite(blueLed, LOW);
  63.     Serial.println("CHECKPOINT 002");
  64.   }
  65.  
  66.   while ((stepperAdistanceToGo() != 0) ) {
  67.     stepperArun();
  68.   }
  69.   delay(1000);
  70. }
  71.  
  72. // THESE CONTROL THE STEPPER MOTORS
  73.  
  74. double stepperAdistanceToGo() {
  75.   return abs(stepperAdestPosition - stepperAcurrPosition);
  76. }
  77.  
  78. void stepperArun() {
  79.   double dir = 0;
  80.  
  81.   if (stepperAdistanceToGo() >= 1) {
  82.     //SET DIRECTION
  83.     if (stepperAdestPosition > stepperAcurrPosition) {
  84.       digitalWrite(stepperApinDir, 1);
  85.       dir = 1;
  86.     } else {
  87.       digitalWrite(stepperApinDir, 0);
  88.       dir = -1;
  89.     }
  90.     if (micros() < (stepperAtimer - stepperAspeed)) {
  91.       //rollover bug... fix
  92.       stepperAtimer = micros();
  93.     }
  94.     //PULSE AT SPEED LIMIT
  95.     if (micros() >= (stepperAtimer + stepperAspeed)) {
  96.       digitalWrite(stepperApinStep, stepperAtoggle);
  97.       stepperAtimer = micros();
  98.       stepperAtoggle = !stepperAtoggle;
  99.       stepperAcurrPosition += dir;
  100.     }
  101.   }
  102.   Serial.println("STEPPER RUN COMPLETE");
  103. }
  104.  
  105. float getTemp() {
  106.   //DS18S20 temp in DEG Celsius
  107.  
  108.   byte data[12];
  109.   byte addr[8];
  110.  
  111.   if ( !ds.search(addr)) {
  112.     // no more sensors on chain, reset search
  113.     ds.reset_search();
  114.     return -1000;
  115.   }
  116.  
  117.   if ( OneWire::crc8( addr, 7) != addr[7]) {
  118.     Serial.println("CRC is not valid!");
  119.     return -1000;
  120.   }
  121.  
  122.   if ( addr[0] != 0x10 && addr[0] != 0x28) {
  123.     Serial.print("Device is not recognized");
  124.     return -1000;
  125.   }
  126.  
  127.   ds.reset();
  128.   ds.select(addr);
  129.   ds.write(0x44, 1); // start conversion, with parasite power on at the end
  130.  
  131.   byte present = ds.reset();
  132.   ds.select(addr);
  133.   ds.write(0xBE); // Read Scratchpad
  134.  
  135.  
  136.   for (int i = 0; i < 9; i++) { // we need 9 bytes
  137.     data[i] = ds.read();
  138.   }
  139.  
  140.   ds.reset_search();
  141.  
  142.   byte MSB = data[1];
  143.   byte LSB = data[0];
  144.  
  145.   float tempRead = ((MSB << 8) | LSB); // using two's compliment
  146.   float TemperatureSum = tempRead / 16;
  147.  
  148.   return TemperatureSum;
  149. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement