diff --git a/crawler_software/arduino/crawler_slave/crawler_slave.ino b/crawler_software/arduino/crawler_slave/crawler_slave.ino index b38d788..820dccb 100644 --- a/crawler_software/arduino/crawler_slave/crawler_slave.ino +++ b/crawler_software/arduino/crawler_slave/crawler_slave.ino @@ -1,33 +1,66 @@ -/* Sweep - by BARRAGAN - This example code is in the public domain. - - modified 8 Nov 2013 - by Scott Fitzgerald - http://www.arduino.cc/en/Tutorial/Sweep -*/ +/* Crawler Slave + * + * This code runs on the crawler i2c network + * and provides a cleaner, less CPU intensive control over PWM devices. + */ +#include #include -Servo myservo; // create servo object to control a servo -// twelve servo objects can be created on most boards +// This servo is used to wipe and clean the camera lens +Servo windowWiperServo; -int pos = 0; // variable to store the servo position +// This is a variable capable of storing up to 4 items +char instruction[32] = ""; + +// Values for the id, and raw value of an instruction +char * id; +char * raw_value; void setup() { - myservo.attach(9); // attaches the servo on pin 9 to the servo object + // Attach the wiper servo to pin 9 + windowWiperServo.attach(9); - for (pos = 70; pos <= 130; pos += 1) { // goes from 0 degrees to 180 degrees - // in steps of 1 degree - myservo.write(pos); // tell servo to go to position in variable 'pos' - delay(15); // waits 15ms for the servo to reach the position - } - for (pos = 130; pos >= 70; pos -= 1) { // goes from 180 degrees to 0 degrees - myservo.write(pos); // tell servo to go to position in variable 'pos' - delay(15); // waits 15ms for the servo to reach the position - } + // This is only useful for debugging + //Serial.begin(9600); + + // This is the address the pi will speak to us at + Wire.begin(0x4); + + // Call receiveEvent when data received + Wire.onReceive(receiveEvent); + + //Serial.println("Finished Setup."); } +// Just loop to keep the running code alive, and wait for events to happen. void loop() { - delay(1000); + delay(50); +} + +// This method runs when we receive a message +void receiveEvent(int n) { + + for (int i = 0; i < n; i++) { + instruction[i] = Wire.read(); + instruction[i + 1] = '\0'; //add null after ea. char + } + + //RPi first byte is cmd byte so shift everything to the left 1 pos so temp contains our string + for (int i = 0; i < n; ++i) + instruction[i] = instruction[i + 1]; + + id = strtok (instruction, "-"); + raw_value = strtok (NULL, "-"); + + int value = atoi(raw_value); + + //Serial.println(id); + //Serial.println(value); + + // Switch statements dont work on char * + if (strcmp(id,"WIPE") == 0) // if id, and WIPE cancel out + { + windowWiperServo.write(value); + } } diff --git a/crawler_software/raspberry_pi/crawler.service b/crawler_software/raspberry_pi/crawler.service new file mode 100644 index 0000000..e3fcca5 --- /dev/null +++ b/crawler_software/raspberry_pi/crawler.service @@ -0,0 +1,11 @@ +[Unit] +Description=Crawler service overseer, manages running main crawler software +After=multi-user.target + +[Service] +Type=simple +Restart=always +ExecStart=/usr/bin/python /srv/crawler/crawler.py + +[Install] +WantedBy=multi-user.target