Go Down

Topic: ardugate (Read 481 times) previous topic - next topic

norbnyc

Hi guys - I'm trying out ardugate:
http://www.arduinodev.com/software/ardugate/

Using Arduino IDE 1.01, I downloaded the files agent.h & agent.ino. However, even after I changed #include "agent.h" to #include<agent.h> in the below code, I get the following error. Any advice on what I'm doing wrong? Thanks!


sketch_aug22a.cpp: In function 'void loop()':
agent:134: error: 'CMD_PIN' was not declared in this scope
agent:137: error: 'CMD_PIN_MODE_INPUT' was not declared in this scope
agent:138: error: 'CMD_PIN_MODE_OUTPUT' was not declared in this scope
......
agent:323: error: 'CMD_RAINBOW_DRAW' was not declared in this scope


Code: [Select]
/*************************************************************************
* Arduino Agent Sketch for ArduGate and ArduSim
* Distributed under GPL v2.0
* Copyright (c) 2012 Stanley Huang <stanleyhuangyc@gmail.com>
* All rights reserved.
*************************************************************************/

#include <arduino.h>
#include <EEPROM.h>
#include <Servo.h>
#include <Wire.h>
#include "agent.h"

Servo* servos[16] = {0};

char ReadChar()
{
   while (!Serial.available());
   char c = Serial.read();
   // echo back
   Serial.write(c);
   return c;
}

char PeekChar()
{
   while (!Serial.available());
   return Serial.peek();
}

void SkipChar(char c)
{
   for(;;) {
       while (!Serial.available());
       if (Serial.peek() == c)
           Serial.read();
       else
           break;
   }
}

void WaitCarriage()
{
   while (ReadChar() != '\r');
}

byte ReadNibble()
{
   while (!Serial.available());
   byte c = Serial.peek();
   if (c>='A' && c<='F')
       c-=7;
   else if (c>='a' && c<='f')
       c-=39;
   else if (c<'0' || c>'9')
       return 0xff;

   // echo back
   Serial.write(Serial.read());
   return c & 0xf;
}

byte ReadByte()
{
   byte h = ReadNibble();
   if (h == 0xff) {
       return 0;
   }
   byte l = ReadNibble();
   if (l == 0xff) {
       return h;
   } else {
       return (h << 4) | l;
   }
}

int ReadInt()
{
   byte d;
   unsigned int value = 0;
   for (char i = 0; i < 4; i++) {
       d = ReadNibble();
       if (d == 0xff) break;
       value = (value << 4) | d;
   }
   return value;
}

char WaitDelimiter()
{
   char c = PeekChar();
   if (c == ' ') {
       Serial.read();
       Serial.write(c);
   } else if (c != '\r') {
       return 0;
   }
   return c;
}

void FormatResult(char* buf, byte cmd)
{
   sprintf(buf, "%02X\r", cmd);
}

void FormatResult(char* buf, byte cmd, byte val)
{
   sprintf(buf, "%02X %02X\r", cmd, val);
}

void FormatResult(char* buf, byte cmd, int val)
{
   sprintf(buf, "%02X %04X\r", cmd, val);
}

void FormatError(char* buf, byte code)
{
   sprintf(buf, "XX %02X\r", code);
}

void setup()
{
Serial.begin(57600);
WaitCarriage();
Serial.write("OK\r");
}

void loop()
{
   int arg;
   char buf[8] = "XX 01\r";
   byte cmd = ReadByte();

   switch (cmd & 0xf0) {
   case CMD_PIN:
       // pin operations
       switch (cmd) {
       case CMD_PIN_MODE_INPUT:
       case CMD_PIN_MODE_OUTPUT:
           if (WaitDelimiter()) {
               byte pin = ReadByte();
               pinMode(pin, cmd & 0x1);
               FormatResult(buf, cmd);
           }
           break;
       case CMD_DIGITAL_WRITE_LO:
       case CMD_DIGITAL_WRITE_HI:
           if (WaitDelimiter()) {
               byte pin = ReadByte();
               digitalWrite(pin, cmd & 0x1);
               FormatResult(buf, cmd);
           }
           break;
       case CMD_DIGITAL_READ:
           if (WaitDelimiter()) {
               byte pin = ReadByte();
               FormatResult(buf, cmd, (byte)digitalRead(pin));
           }
           break;
       case CMD_ANALOG_READ:
           if (WaitDelimiter()) {
               byte pin = ReadByte();
               FormatResult(buf, cmd, analogRead(pin));
           }
           break;
       case CMD_ANALOG_WRITE:
           if (WaitDelimiter()) {
               byte pin = ReadByte();
               if (WaitDelimiter()) {
                   byte val = ReadByte();
                   analogWrite(pin, val);
                   FormatResult(buf, cmd);
               }
           }
           break;
       }
       break;
   case CMD_MEMORY:
       // memory operations
       switch (cmd) {
       case CMD_EEPROM_READ:
           if (WaitDelimiter()) {
               arg = ReadInt();
               byte val = EEPROM.read(arg);
               FormatResult(buf, cmd, val);
           }
           break;
       case CMD_EEPROM_WRITE:
           if (!WaitDelimiter()) break;
           arg = ReadInt();
           if (WaitDelimiter()) {
               byte val = ReadByte();
               EEPROM.write(arg, val);
               FormatResult(buf, cmd, val);
           }
           break;
       }
       break;
   case CMD_BUS:
       switch (cmd) {
       case CMD_WIRE_AVAILABLE:
           FormatResult(buf, cmd, (byte)Wire.available());
           break;
       case CMD_WIRE_READ:
           if (WaitDelimiter() == ' ') {
               unsigned int timeout = ReadByte();
               timeout <<= 4;
               unsigned long tick = millis();
               while (!Wire.available() && millis() - tick < timeout);
           }
           if (Wire.available()) {
               byte val = Wire.read();
               FormatResult(buf, cmd, val);
           } else {
               FormatError(buf, 2);
           }
           break;
       case CMD_WIRE_WRITE:
           if (WaitDelimiter()) {
               byte val = ReadByte();
               Wire.write(val);
               FormatResult(buf, cmd, val);
           }
           break;
       case CMD_WIRE_BEGIN:
           if (WaitDelimiter()) {
               byte addr = ReadByte();
               if (addr == 0) {
                   Wire.begin();
               } else {
                   Wire.begin(addr);
               }
               FormatResult(buf, cmd, addr);
           }
           break;
       case CMD_WIRE_BEGIN_XFER:
           if (WaitDelimiter()) {
               byte addr = ReadByte();
               Wire.beginTransmission(addr);
               FormatResult(buf, cmd, addr);
           }
           break;
       case CMD_WIRE_END_XFER:
           Wire.endTransmission();
           FormatResult(buf, cmd, (byte)0);
           break;
       case CMD_WIRE_REQUEST_FROM:
           if (WaitDelimiter()) {
               byte addr = ReadByte();
               if (!WaitDelimiter()) break;
               byte count = ReadByte();
               Wire.requestFrom(addr, count);
               FormatResult(buf, cmd, addr);
           }
           break;
       }
       break;
   case CMD_SERVO_READ:
       {
           byte index = cmd & 0xf;
           if (servos[index]) {
               int angle = servos[index]->read();
               FormatResult(buf, cmd, angle);
           } else {
               FormatError(buf, 3);
           }
       }
       break;
   case CMD_SERVO_WRITE:
       if (WaitDelimiter()) {
           int angle = ReadInt();
           byte index = cmd & 0xf;
           if (servos[index]) {
               servos[index]->write(angle);
               FormatResult(buf, cmd, angle);
           } else {
               FormatError(buf, 3);
           }
       }
       break;
   case CMD_SERVO_ATTACH:
       if (WaitDelimiter()) {
           byte pin = ReadByte();
           if (!WaitDelimiter()) break;
           int minval = ReadInt();
           if (!WaitDelimiter()) break;
           int maxval = ReadInt();
           byte index = cmd & 0xf;
           if (!servos[index]) {
               servos[index] = new Servo;
           }
           servos[index]->attach(pin, minval, maxval);
           FormatResult(buf, cmd, index);
       }
       break;
   case CMD_SERVO_DETACH:
       {
           byte index = cmd & 0xf;
           if (servos[index]) {
               servos[index]->detach();
               delete servos[index];
               servos[index] = 0;
               FormatResult(buf, cmd, index);
           }else {
               FormatError(buf, 3);
           }
           break;
       }
   case CMD_DISPLAY:
       switch (cmd) {
       case CMD_RAINBOW_PIXEL:
           if (WaitDelimiter()) {
               byte x = ReadByte();
               byte y = ReadByte();
               byte color[3] = {ReadByte(), ReadByte(), ReadByte()};
               //TODO: draw a pixel at x,y
               FormatResult(buf, cmd);
           }
           break;
       case CMD_RAINBOW_CLS:
           //TODO: clear screen
           FormatResult(buf, cmd);
           break;
       case CMD_RAINBOW_DRAW:
           //TODO: draw screen
           FormatResult(buf, cmd);
           break;
       }
   }
   WaitCarriage();
   Serial.write(buf);
}

johnwasser

Is agent.h in the same directory as agent.ino?
Send Bitcoin tips to: 1L3CTDoTgrXNA5WyF77uWqt4gUdye9mezN
Send Litecoin tips to : LVtpaq6JgJAZwvnVq3ftVeHafWkcpmuR1e

norbnyc


Go Up