Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Aug 19th, 2012  |  syntax: None  |  size: 2.53 KB  |  hits: 13  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. // Basstation
  2.  
  3. #include <Coordinator.h>
  4. #include <Radio.h>
  5. #include <XBee.h>U
  6. #include <SoftwareSerial.h>
  7. #include <Analog.h>
  8.  
  9. Coordinator coordinator = Coordinator();
  10.  
  11. const int errorPin = 22;
  12. const int assocPin = 24;
  13. unsigned long int blinkTimer = 0;
  14. unsigned long int tempTimer = 0;
  15. boolean assocPinStatus = false;
  16. SoftwareSerial nss = SoftwareSerial(30, 32);
  17. uint8_t sendData[120];
  18. uint8_t s = 0;
  19.  
  20. void errorCB() {
  21.    digitalWrite(errorPin, HIGH);
  22. }
  23.  
  24. void setup() {
  25.  
  26. for(int i=0; i<72; i++) sendData[i] = '1';
  27. for(int i=72; i<120; i++) sendData[i] = '2';
  28.  
  29.   attachInterrupt(0, pairUp, FALLING);  
  30.   nss.begin(9600);
  31.   nss.println(" ");
  32.   nss.println(" ");
  33.   nss.println("***** RESET *****");
  34.   nss.println(" ");
  35.   pinMode(errorPin, OUTPUT);
  36.   pinMode(assocPin, OUTPUT);
  37.   digitalWrite(errorPin, LOW);
  38.   digitalWrite(assocPin, LOW);
  39.   coordinator.setData(sendData, sizeof(sendData));
  40.   coordinator.begin(Serial1);
  41.   blinkTimer = 0;
  42.   tempTimer = 0;
  43. }
  44.  
  45. void loop() {
  46.   delay(10);
  47.   uint8_t st = coordinator.tick();
  48.   uint8_t s = coordinator.getState();
  49.   assocLed(s);
  50.   readTemperature();
  51.   printState(s);
  52.   if(st == 1 || st == 3) {
  53.     digitalWrite(errorPin, HIGH);
  54.   }
  55.   else {
  56.      digitalWrite(errorPin, LOW);
  57.   }
  58. }  
  59.  
  60. void assocLed(uint8_t state) {
  61.   if(state == 7) {
  62.     blinkPairUp();
  63.   }
  64.   else {
  65.     if(coordinator.getAssoc()) {
  66.       digitalWrite(assocPin, HIGH);
  67.     }
  68.     else {
  69.        digitalWrite(assocPin, LOW);
  70.     }
  71.   }  
  72. }
  73.  
  74. void pairUp() {
  75.   coordinator.pairUp();
  76. }
  77.  
  78. void blinkPairUp() {
  79.   if(millis() >= blinkTimer) {
  80.         digitalWrite(assocPin, (assocPinStatus = !assocPinStatus));
  81.         blinkTimer = millis() + 500;
  82.   }
  83. }
  84.  
  85. void printState(uint8_t s) {
  86.   nss.print("State [");
  87.   nss.print(s);
  88.   nss.print("]  =  [");
  89.   nss.print(coordinator.getStateName(s));
  90.   nss.println("]");
  91. }
  92.  
  93. void readTemperature() {
  94.   if(millis() >= tempTimer) {
  95.         int temperature = (getVoltage(8)-0.5)*100;
  96.         nss.print("Temperature (C): [");
  97.         nss.print(temperature);
  98.         nss.println("]");
  99.         tempTimer = millis() + 20000;
  100.   }
  101. }
  102.  
  103. float getVoltage(int pin) {
  104.   return (analogRead(pin) * 0.004882814);
  105. }
  106.  
  107. void readBattery() {
  108.   nss.println("Reading battery...");
  109.   int batteryLevel = analogRead(0);
  110.   // Voltage divider divides voltage by 2
  111.   // Value from analog port has resolution of 49mV
  112.   // Adjust for voltage drop across BJT (approximation)
  113.   nss.print("Analog read [");
  114.   nss.print(batteryLevel);
  115.   nss.println("]");
  116.   float Vbatt = (2*batteryLevel*0.0049) - 0.04*(batteryLevel/408);
  117.   nss.print("Battery Voltage [");
  118.   nss.print(Vbatt);
  119.   nss.println("V]");
  120. }