diff options
Diffstat (limited to 'arduinoAnalogStomp/analogethernet.ino')
-rwxr-xr-x | arduinoAnalogStomp/analogethernet.ino | 204 |
1 files changed, 0 insertions, 204 deletions
diff --git a/arduinoAnalogStomp/analogethernet.ino b/arduinoAnalogStomp/analogethernet.ino deleted file mode 100755 index feefbd8..0000000 --- a/arduinoAnalogStomp/analogethernet.ino +++ /dev/null @@ -1,204 +0,0 @@ -#include <SPI.h> -#include <Ethernet.h> - -byte mac[] = { 0xAD, 0xEE, 0x00, 0xEF, 0xFE, 0xED }; -const char *serverHost = "stomp.xapek.org"; -const int serverPort = 61613; -const char *serverLogin = "arduino1"; -const char *serverPasscode = "arduino1"; -const char *serverQueue = "/queue/queue-put"; - -const int ledPin = 13; // select the pin for the LED - -struct StompHeader { - const char *name; - const char *value; -}; - -class StompClient; // Forward - -struct StompFrame { - const char *command; - struct StompHeader *headers = 0; - int headersPos = -1; - const char *body = 0; - void (*bodyFunc)(class StompClient&) = NULL; - void addHeader(const char *name, const char *value) { - headersPos++; - headers = (StompHeader*)realloc(headers, sizeof(StompHeader) * (headersPos+1)); - memset(headers + headersPos, 0, sizeof(StompHeader)); - (headers+(sizeof(StompHeader)*headersPos))->name = name; - (headers+(sizeof(StompHeader)*headersPos))->value = value; - } - void setBody(const char *b) { - body = strdup(b); - } - StompFrame(const char *command) : command(strdup(command)) {}; - ~StompFrame() { - if (headers != NULL) - delete headers; - delete command; - if (body) - delete body; - } -}; - -class StompClient : public EthernetClient { - const char *serverHost; - int serverPort; - const char *serverLogin = NULL; - const char *serverPasscode = NULL; -public: - StompClient(const char *serverHost, int serverPort, const char *serverLogin, const char *serverPasscode) : - serverHost(serverHost), serverPort(serverPort), serverLogin(serverLogin), serverPasscode(serverPasscode) {}; - int connect() { - int result = EthernetClient::connect(serverHost, serverPort); - if (result) { - StompFrame frame("CONNECT"); - frame.addHeader("host", serverHost); - if (serverLogin) frame.addHeader("login", serverLogin); - if (serverPasscode) frame.addHeader("passcode", serverPasscode); - - send(frame); - - StompFrame *answer = readFrame(); - if (strcmp(answer->command, "CONNECTED") != 0) { - Serial.print("Got no CONNECTED Frame, read: "); - Serial.println(answer->command); - stop(); - delete answer; - return false; - } else { - delete answer; - return true; - } - } else { - return result; - } - }; - void send(StompFrame &frame) { - EthernetClient::print(frame.command); - EthernetClient::print("\n"); - for (int i = 0; i<=frame.headersPos; i++) { - StompHeader *header = frame.headers+sizeof(StompHeader)*i; - EthernetClient::print(header->name); - EthernetClient::print(":"); - EthernetClient::print(header->value); - EthernetClient::print("\n"); - } - EthernetClient::print("\n"); - if (frame.bodyFunc) { - frame.bodyFunc(*this); - } if (frame.body) { - EthernetClient::print(frame.body); - } - EthernetClient::write((byte)0); - }; - - void sendKeyValue(const char *key, const char *value) { - EthernetClient::print(key); - EthernetClient::print("="); - EthernetClient::print(value); - EthernetClient::print("\n"); - } - StompFrame *readFrame() { - char buf[255]; - int i = readBytesUntil('\n', buf, 254); - buf[i] = '\0'; - StompFrame *frame = new StompFrame(buf); - - while (readBytesUntil('\n', buf, 255)) { - //read header - //ignore - } - readBytesUntil('\0', buf, 255); - frame->setBody(buf); - - flush(); - return frame; - } -}; - - - - - -const long ADC_REF_MV = 3300; -const long ADC_MAX_STEP = 1024; -const long OV_FACTOR = 4; // Op. Verstärker Faktor = 4; 10mV = 1dB - -void sendPinValue(class StompClient& c) { - long sensorValue, - sensorValueMV, - sensorValueDBA, - pinnr; - char buf[12]; - char *sensorKey = "arduino.aX", - *sensorKeyMV = "arduino.aX.mv", - *sensorKeyDBA = "arduino.aX.dba"; - for (int i = A0; i <= A5; i++) { - pinnr = i - A0; - - sensorValue = analogRead(i); - sensorKey[9] = '0' + pinnr; - snprintf(buf, 8, "%u", sensorValue); - c.sendKeyValue(sensorKey, buf); - - sensorValueMV = sensorValue * (ADC_REF_MV*100/ADC_MAX_STEP); - sensorKeyMV[9] = '0' + pinnr; - snprintf(buf, 8, "%ld.%03ld", sensorValueMV/100, sensorValue%100); - c.sendKeyValue(sensorKeyMV, buf); - - sensorValueDBA = sensorValueMV / OV_FACTOR; - sensorKeyDBA[9] = '0' + pinnr; - snprintf(buf, 12, "%ld.%04ld", sensorValueDBA/1000, sensorValueDBA%1000); - c.sendKeyValue(sensorKeyDBA, buf); - } -} - - -void setup() { - Serial.begin(9600); - - // declare the ledPin as an OUTPUT: - pinMode(ledPin, OUTPUT); - - // start the Ethernet and UDP: Use DHCP for IP-Configuration - Ethernet.begin(mac); - - analogReference(EXTERNAL); -} - - - -StompClient client(serverHost, serverPort, serverLogin, serverPasscode); - -void loop() { - unsigned long dt = millis(); - - digitalWrite(ledPin, HIGH); - if (client.connected()) { - Serial.println("Send packet"); - StompFrame frame("SEND"); - frame.addHeader("destination", serverQueue); - frame.bodyFunc = &sendPinValue; - client.send(frame); - } else { - Serial.println("connecting"); - client.stop(); - if (client.connect()) { - Serial.println("connected"); - } else { - Serial.println("connection failed"); - } - } - digitalWrite(ledPin, LOW); - - dt = (millis() - dt); - - if (dt < 500) { - Serial.println(String("sleep: ") + String((500-dt))); - delay(500 - dt); - } -} - |