Merge branch 'development'

This commit is contained in:
jameswood 2015-08-31 23:00:07 +10:00
commit abce59ac11
1 changed files with 35 additions and 50 deletions

View File

@ -1,3 +1,4 @@
#include <Bounce2.h>
#include <SPI.h> #include <SPI.h>
#include <ESP8266WiFi.h> #include <ESP8266WiFi.h>
#include <PubSubClient.h> #include <PubSubClient.h>
@ -9,16 +10,18 @@ const int dispenseTimeout = 2000;
const int debounce = 100; const int debounce = 100;
boolean motorJammed = false; boolean motorJammed = false;
char clientName[] = "PrawnBot-ESP"; char clientName[] = "PrawnBot-ESP";
boolean somethingToSay = true; boolean somethingToSay = false;
String messageToReport = "Online"; String messageToReport;
long modeStartTime = 0; long modeStartTime = 0;
int lastAnnounced; unsigned int lastAnnounced = 5;
int botMode = 2; // 0: Listening; 1: Dispensing; 2: Resetting; 3: Jam int botMode = 0; // 0: Listening; 1: Dispensing; 2: Jam
void callback(char* topic, byte* incoming, unsigned int length); void callback(char* topic, byte* incoming, unsigned int length);
Bounce motorSwitchDebounced = Bounce();
Bounce feedButtonDebounced = Bounce();
WiFiClient wifiClient; WiFiClient wifiClient;
PubSubClient client(server, 1883, callback, wifiClient); PubSubClient mqttclient(server, 1883, callback, wifiClient);
void callback(char* theTopic, byte* incoming, unsigned int length) { void callback(char* theTopic, byte* incoming, unsigned int length) {
String incomingMessage = String((char *)incoming); String incomingMessage = String((char *)incoming);
@ -27,17 +30,20 @@ void callback(char* theTopic, byte* incoming, unsigned int length) {
Serial.print(": "); Serial.print(": ");
Serial.println(incomingMessage); Serial.println(incomingMessage);
if (incomingMessage == "feed") botMode = 1; if (incomingMessage == "feed") botMode = 1;
else if (incomingMessage == "ping") client.publish(topic, (char*)("pong")); else if (incomingMessage == "ping") mqttclient.publish(topic, (char*)("pong"));
} }
void setup() { void setup() {
pinMode(feedButtonPin, INPUT_PULLUP);
pinMode(motorPin, OUTPUT); pinMode(motorPin, OUTPUT);
pinMode(feedButtonPin, INPUT_PULLUP);
pinMode(motorSwitchPin, INPUT_PULLUP); pinMode(motorSwitchPin, INPUT_PULLUP);
motorSwitchDebounced.attach(motorSwitchPin);
feedButtonDebounced.attach(feedButtonPin);
motorSwitchDebounced.interval(50);
feedButtonDebounced.interval(50);
Serial.begin(115200); Serial.begin(115200);
delay(10); delay(10);
WiFi.begin(ssid, password); WiFi.begin(ssid, password);
getOnline();
} }
void getOnline(){ void getOnline(){
@ -49,15 +55,18 @@ void getOnline(){
Serial.println("WiFi connected"); Serial.println("WiFi connected");
Serial.println("IP address: "); Serial.println("IP address: ");
Serial.println(WiFi.localIP()); Serial.println(WiFi.localIP());
if (client.connect(clientName)) { if (mqttclient.connect(clientName)) {
client.publish(topic, (char*)("online")); mqttclient.publish(topic, (char*)("WiFi GO"));
client.subscribe(topic); mqttclient.subscribe(topic);
} }
} }
void loop() { void loop() {
if(WiFi.status() != WL_CONNECTED) getOnline(); if(WiFi.status() != WL_CONNECTED) getOnline();
client.loop(); if (!mqttclient.connected()) mqttclient.connect(clientName);
feedButtonDebounced.update();
motorSwitchDebounced.update();
mqttclient.loop(); //
if (motorJammed == true) botMode = 3; if (motorJammed == true) botMode = 3;
switch (botMode) { switch (botMode) {
case 0: // Listening case 0: // Listening
@ -65,9 +74,7 @@ void loop() {
Serial.println("Listening"); Serial.println("Listening");
lastAnnounced = 0; lastAnnounced = 0;
} }
if (digitalRead(feedButtonPin) == HIGH) modeStartTime = 0; if (feedButtonDebounced.fell()){
else if (digitalRead(feedButtonPin) == LOW && modeStartTime == 0) modeStartTime = millis();
else if (digitalRead(feedButtonPin) == LOW && (millis() - modeStartTime > debounce)) {
Serial.println("Button pressed"); Serial.println("Button pressed");
botMode = 1; botMode = 1;
modeStartTime = 0; modeStartTime = 0;
@ -75,56 +82,34 @@ void loop() {
break; break;
case 1: // Dispensing case 1: // Dispensing
modeStartTime=millis();
if(lastAnnounced != 1) { if(lastAnnounced != 1) {
Serial.println("Dispensing"); Serial.println("Dispensing");
lastAnnounced = 1; lastAnnounced = 1;
} }
if (modeStartTime == 0) modeStartTime = millis();
if ((digitalRead(motorSwitchPin) == LOW) && (millis() - modeStartTime > debounce)) {
digitalWrite(motorPin, HIGH); digitalWrite(motorPin, HIGH);
} else if ((digitalRead(motorSwitchPin) == HIGH) && (millis() - modeStartTime > debounce)) { if (motorSwitchDebounced.fell()){
digitalWrite(motorPin, LOW);
botMode = 2;
modeStartTime = 0;
if (messageToReport != "fed") somethingToSay = true;
messageToReport="fed";
}
if ((modeStartTime > 0) && (millis() - modeStartTime > dispenseTimeout)) {
botMode = 3;
modeStartTime = 0;
}
break;
case 2: // Resetting
if(lastAnnounced != 2) {
Serial.println("Resetting Motor");
lastAnnounced = 2;
}
if (modeStartTime == 0) modeStartTime = millis();
if ((digitalRead(motorSwitchPin) == HIGH)) { // && (millis() - modeStartTime > debounce)) {
digitalWrite(motorPin, HIGH);
}
else if ((digitalRead(motorSwitchPin) == LOW) && (millis() - modeStartTime > debounce)) {
digitalWrite(motorPin, LOW); digitalWrite(motorPin, LOW);
botMode = 0; botMode = 0;
modeStartTime = 0; modeStartTime = 0;
if (messageToReport != "ready") somethingToSay = true; somethingToSay = true;
messageToReport="ready"; messageToReport="fed";
} }
if ((modeStartTime > 0) && (millis() - modeStartTime > dispenseTimeout)) { else if (millis() - modeStartTime > dispenseTimeout) {
botMode = 3; botMode = 3;
modeStartTime = 0; modeStartTime = 0;
} }
break; break;
case 3: // Jammed case 2: // Jammed
if(lastAnnounced != 3) { if(lastAnnounced != 2) {
Serial.println("Resetting Motor"); Serial.println("Jammed");
lastAnnounced = 3; lastAnnounced = 2;
} }
if (messageToReport != "jam") somethingToSay = true; if (messageToReport != "jam") somethingToSay = true;
motorJammed = true; motorJammed = true;
messageToReport="jam"; messageToReport="jam";
break;
} }
if (somethingToSay) { if (somethingToSay) {
@ -132,7 +117,7 @@ void loop() {
int messageLength = messageToReport.length() + 1; int messageLength = messageToReport.length() + 1;
char messageChar[messageLength]; char messageChar[messageLength];
messageToReport.toCharArray(messageChar, messageLength); messageToReport.toCharArray(messageChar, messageLength);
client.publish(topic, messageChar); mqttclient.publish(topic, messageChar);
somethingToSay = false; somethingToSay = false;
} }
} }