Skip to content
Browse files

Pulled in the Artemis software.

  • Loading branch information...
1 parent 72f5805 commit 840b0443275cfb57be2fee19893825a11cfc8b0f @notahat notahat committed Jul 28, 2009
View
18 ADXL330.cpp
@@ -0,0 +1,18 @@
+#include "ADXL330.h"
+#include <WProgram.h>
+
+ADXL330::ADXL330(Aiko::Device::MCP320x& adc) {
+ adc_ = &adc;
+ isSetUp_ = false;
+}
+
+int ADXL330::readX() { if (!isSetUp_) setup(); return adc_->readChannel(0) - 2048; }
+int ADXL330::readY() { if (!isSetUp_) setup(); return adc_->readChannel(1) - 2048; }
+int ADXL330::readZ() { if (!isSetUp_) setup(); return adc_->readChannel(2) - 2048; }
+
+void ADXL330::setup() {
+ // Make sure the accelerometer self-test pin stays low.
+ pinMode(3, OUTPUT);
+ digitalWrite(3, LOW);
+ isSetUp_ = true;
+}
View
15 ADXL330.h
@@ -0,0 +1,15 @@
+#include <AikoDeviceMCP320x.h>
+
+class ADXL330 {
+ public:
+ ADXL330(Aiko::Device::MCP320x& adc);
+ int readX();
+ int readY();
+ int readZ();
+
+ private:
+ void setup();
+
+ bool isSetUp_;
+ Aiko::Device::MCP320x *adc_;
+};
View
110 Artemis.pde
@@ -0,0 +1,110 @@
+#include <AikoDeviceMCP320x.h>
+#include <AikoEvents.h>
+#include <Wire.h>
+#include <OneWire.h>
+#include "ADXL330.h"
+#include "DS1307.h"
+#include "DS18B20.h"
+#include "MPX4101A.h"
+
+using namespace Aiko;
+
+Device::MCP320x adc5v(47);
+Device::MCP320x adc3v(48);
+ADXL330 accelerometer(adc3v);
+MPX4101A mapSensor(adc5v);
+DS1307 clock;
+OneWire oneWire(2);
+DS18B20 temperatureSensor(oneWire);
+
+void reportNodeName() {
+ Serial.println("(nodeName= artemis_1)");
+}
+
+void readClock() {
+ clock.read();
+
+ Serial.print("(clock= ");
+ if (clock.hour_ < 10) Serial.print('0');
+ Serial.print((int)clock.hour_);
+ if (clock.minute_ < 10) Serial.print('0');
+ Serial.print((int)clock.minute_);
+ if (clock.second_ < 10) Serial.print('0');
+ Serial.print((int)clock.second_);
+ Serial.println(")");
+}
+
+void readAccelerometer() {
+ int x = accelerometer.readX();
+ int y = accelerometer.readY();
+ int z = accelerometer.readZ();
+
+ Serial.print("(acceleromter_x= ");
+ Serial.print(x);
+ Serial.println(")");
+
+ Serial.print("(acceleromter_y= ");
+ Serial.print(y);
+ Serial.println(")");
+
+ Serial.print("(acceleromter_z= ");
+ Serial.print(z);
+ Serial.println(")");
+}
+
+void readMapSensor() {
+ Serial.print("(barometer= ");
+ Serial.print(mapSensor.readPressure());
+ Serial.println(")");
+}
+
+void readLDRs() {
+ Serial.print("(light_a= ");
+ Serial.print(analogRead(0));
+ Serial.println(")");
+ Serial.print("(light_b= ");
+ Serial.print(analogRead(1));
+ Serial.println(")");
+}
+
+void readVoltage() {
+ float voltage = (float)analogRead(7) * (5.0 / 1024.0);
+
+ Serial.print("(voltage= ");
+ Serial.print(voltage);
+ Serial.println(")");
+}
+
+void readTemperature() {
+ temperatureSensor.read();
+
+ Serial.print("(temperature= ");
+ Serial.print(temperatureSensor.temperature());
+ Serial.println(")");
+
+ temperatureSensor.startConversion();
+}
+
+void setup() {
+ clock.second_ = 0;
+ clock.minute_ = 1;
+ clock.hour_ = 2;
+ clock.dayOfWeek_ = 3;
+ clock.dayOfMonth_ = 4;
+ clock.month_ = 5;
+ clock.year_ = 6;
+ clock.set();
+
+ Serial.begin(9600);
+ Events.addHandler(reportNodeName, 1000);
+ Events.addHandler(readClock, 1000);
+ Events.addHandler(readAccelerometer, 100);
+ Events.addHandler(readMapSensor, 100);
+ Events.addHandler(readLDRs, 100);
+ Events.addHandler(readVoltage, 100);
+ Events.addHandler(readTemperature, 1000);
+}
+
+void loop() {
+ Events.loop();
+}
View
58 DS1307.cpp
@@ -0,0 +1,58 @@
+#include <WProgram.h>
+#include "DS1307.h"
+#include <Wire.h>
+
+#define DS1307_I2C_ADDRESS 0x68
+
+DS1307::DS1307() {
+ isSetUp_ = false;
+}
+
+unsigned char DS1307::bcdToDecimal(unsigned char x) {
+ return ((x >> 4) * 10) + (x & 0xF);
+}
+
+unsigned char DS1307::decimalToBCD(unsigned char x) {
+ return ((x / 10) << 4) | (x % 10);
+}
+
+void DS1307::read() {
+ if (!isSetUp_) setup();
+
+ Wire.beginTransmission(DS1307_I2C_ADDRESS);
+ Wire.send(0);
+ Wire.endTransmission();
+
+ Wire.requestFrom(DS1307_I2C_ADDRESS, 7);
+
+ // A few of these need masks because certain bits are control bits
+ second_ = bcdToDecimal(Wire.receive() & 0x7f);
+ minute_ = bcdToDecimal(Wire.receive());
+ hour_ = bcdToDecimal(Wire.receive() & 0x3f); // Need to change this if 12 hour am/pm
+ dayOfWeek_ = bcdToDecimal(Wire.receive());
+ dayOfMonth_ = bcdToDecimal(Wire.receive());
+ month_ = bcdToDecimal(Wire.receive());
+ year_ = bcdToDecimal(Wire.receive());
+}
+
+void DS1307::set() {
+ if (!isSetUp_) setup();
+
+ Wire.beginTransmission(DS1307_I2C_ADDRESS);
+ Wire.send(0);
+ Wire.send(decimalToBCD(second_)); // 0 to bit 7 starts the clock
+ Wire.send(decimalToBCD(minute_));
+ Wire.send(decimalToBCD(hour_)); // If you want 12 hour am/pm you need to set
+ // bit 6 (also need to change readDateDs1307)
+ Wire.send(decimalToBCD(dayOfWeek_));
+ Wire.send(decimalToBCD(dayOfMonth_));
+ Wire.send(decimalToBCD(month_));
+ Wire.send(decimalToBCD(year_));
+ Wire.send(0x10);
+ Wire.endTransmission();
+}
+
+void DS1307::setup() {
+ Wire.begin();
+ isSetUp_ = true;
+}
View
15 DS1307.h
@@ -0,0 +1,15 @@
+class DS1307 {
+ public:
+ DS1307();
+ void read();
+ void set();
+
+ unsigned char second_, minute_, hour_, dayOfWeek_, dayOfMonth_, month_, year_;
+
+ private:
+ bool isSetUp_;
+
+ unsigned char bcdToDecimal(unsigned char x);
+ unsigned char decimalToBCD(unsigned char x);
+ void setup();
+};
View
46 DS18B20.cpp
@@ -0,0 +1,46 @@
+#include "DS18B20.h"
+
+#define ONE_WIRE_DEVICE_18B20 0x28
+
+#define ONE_WIRE_COMMAND_READ_SCRATCHPAD 0xBE
+#define ONE_WIRE_COMMAND_START_CONVERSION 0x44
+#define ONE_WIRE_COMMAND_MATCH_ROM 0x55
+#define ONE_WIRE_COMMAND_SKIP_ROM 0xCC
+
+DS18B20::DS18B20(OneWire &oneWire) {
+ oneWire_ = &oneWire;
+ isSetUp_ = false;
+}
+
+void DS18B20::setup() {
+ deviceFound_ = false;
+ oneWire_->reset_search();
+ while (!deviceFound_ && oneWire_->search(address_)) {
+ // FIXME: CRC check the address
+ if (address_[0] == ONE_WIRE_DEVICE_18B20) deviceFound_ = true;
+ }
+
+ isSetUp_ = true;
+}
+
+void DS18B20::startConversion() {
+ if (!isSetUp_) setup();
+ oneWire_->reset(); // time: 1 millisecond
+ oneWire_->select(address_); // time: 5 milliseconds
+ oneWire_->write(ONE_WIRE_COMMAND_START_CONVERSION, 1); // time: 1 millisecond
+}
+
+void DS18B20::read() {
+ if (!isSetUp_) setup();
+ oneWire_->reset(); // time: 1 millisecond
+ oneWire_->select(address_); // time: 5 milliseconds
+ oneWire_->write(ONE_WIRE_COMMAND_READ_SCRATCHPAD); // time: 1 millisecond
+
+ for (int i = 0; i < 9; i++) data_[i] = oneWire_->read();
+}
+
+float DS18B20::temperature() {
+ int sign = data_[1] & 0xF0 ? -1 : 1;
+ int value = ((int)(data_[1] & 0x07) << 8) | data_[0];
+ return ((float)(value * sign)) / 16.0;
+}
View
18 DS18B20.h
@@ -0,0 +1,18 @@
+#include <OneWire.h>
+
+class DS18B20 {
+ public:
+ DS18B20(OneWire &oneWire);
+ void startConversion();
+ void read();
+ float temperature();
+
+ private:
+ OneWire *oneWire_;
+ bool isSetUp_;
+ bool deviceFound_;
+ unsigned char address_[8];
+ unsigned char data_[9];
+
+ void setup();
+};
View
9 MPX4101A.cpp
@@ -0,0 +1,9 @@
+#include "MPX4101A.h"
+
+MPX4101A::MPX4101A(Aiko::Device::MCP320x &adc) {
+ adc_ = &adc;
+}
+
+int MPX4101A::readPressure() {
+ adc_->readChannel(0);
+}
View
10 MPX4101A.h
@@ -0,0 +1,10 @@
+#include <AikoDeviceMCP320x.h>
+
+class MPX4101A {
+ public:
+ MPX4101A(Aiko::Device::MCP320x &adc);
+ int readPressure();
+
+ private:
+ Aiko::Device::MCP320x *adc_;
+};
View
0 README
No changes.
View
0 ARTEMIS-mega-bottom-noflip.pdf → hardware/ARTEMIS-mega-bottom-noflip.pdf
File renamed without changes.
View
0 ARTEMIS-mega-holes.pdf → hardware/ARTEMIS-mega-holes.pdf
File renamed without changes.
View
0 ARTEMIS-mega-top-flipped.pdf → hardware/ARTEMIS-mega-top-flipped.pdf
File renamed without changes.
View
0 ARTEMIS-mega.brd → hardware/ARTEMIS-mega.brd
File renamed without changes.
View
0 ARTEMIS-mega.sch → hardware/ARTEMIS-mega.sch
File renamed without changes.
View
0 ArtemisTestbench.pde → hardware/ArtemisTestbench.pde
File renamed without changes.
View
0 artemis-partslist.txt → hardware/artemis-partslist.txt
File renamed without changes.
View
0 artemis-pcb-bottom.pdf → hardware/artemis-pcb-bottom.pdf
File renamed without changes.
View
0 artemis-pcb-top.pdf → hardware/artemis-pcb-top.pdf
File renamed without changes.
View
0 artemis-schematic.png → hardware/artemis-schematic.png
File renamed without changes
View
0 artemis.brd → hardware/artemis.brd
File renamed without changes.
View
0 artemis.sch → hardware/artemis.sch
File renamed without changes.

0 comments on commit 840b044

Please sign in to comment.
Something went wrong with that request. Please try again.