Hello all,
In the code below I am getting an error, when compiling, telling me that getSerial was not declared in this scope void loop().
#include <Servo.h>
unsigned long serialdata;
int inbyte;
int digitalState;
int pinNumber;
int analogRate;
int servoPin;
int pos = 70;
int time = 0;
Servo megaservos;
void setup()
{
Serial.begin(9600);
}
void loop()
{
getSerial();
switch(serialdata)
{
case 1:
{
//Decide to use Vacuum or Positive Pressure
getSerial();
switch(serialdata)
{
case 1:
{
//Turn on Vacuum
getSerial();
pinNumber = serialdata;
getSerial();
digitalState = serialdata;
pinMode(pinNumber, OUTPUT);
if (digitalState == 0)
{
digitalWrite(pinNumber, LOW);
}
if (digitalState == 1)
{
digitalWrite(pinNumber, HIGH);
}
pinNumber = 0;
break;
}
case 2:
{
//Turn on Positive Pressure
getSerial();
pinNumber = serialdata;
getSerial();
digitalState = serialdata;
pinMode(pinNumber, OUTPUT);
if (digitalState == 0)
{
digitalWrite(pinNumber, LOW);
}
if (digitalState == 1)
{
digitalWrite(pinNumber, HIGH);
}
pinNumber = 0;
break;
}
}
break;
}
case 2:
//Raise or drop arm
getSerial();
switch(serialdata)
{
case 1:
{
//Raise arm
getSerial();
servoPin = serialdata;
megaservos.attach(servoPin);
if(pos >= 1)
{
pos -= 1;
megaservos.write(pos);
delay(15);
}
break;
}
case 2:
{
//Drop arm
getSerial();
servoPin = serialdata;
megaservos.attach(servoPin);
if(pos <= 70)
{
pos += 1;
megaservos.write(pos);
delay(15);
break;
}
}
break;
}
}
long getSerial()
{
serialdata = 0;
while (inbyte != '/')
{
inbyte = Serial.read();
if (inbyte > 0 && inbyte != '/')
{
serialdata = serialdata * 10 + inbyte - '0';
}
}
inbyte = 0;
return serialdata;
}
}
However, when I run this code, which is structured similarly, I do not get the error message.
#include <Servo.h>
unsigned long serialdata;
int inbyte;
int servoPose;
int servoPoses[80] = {};
int attachedServos[80] = {};
int servoPin;
int pinNumber;
int sensorVal;
int analogRate;
int digitalState;
Servo myservo[] = {};
void setup()
{
Serial.begin(9600);
}
void loop()
{
getSerial();
switch(serialdata)
{
case 1:
{
//analog digital write
getSerial();
switch (serialdata)
{
case 1:
{
//analog write
getSerial();
pinNumber = serialdata;
getSerial();
analogRate = serialdata;
pinMode(pinNumber, OUTPUT);
analogWrite(pinNumber, analogRate);
pinNumber = 0;
break;
}
case 2:
{
//digital write
getSerial();
pinNumber = serialdata;
getSerial();
digitalState = serialdata;
pinMode(pinNumber, OUTPUT);
if (digitalState == 1)
{
digitalWrite(pinNumber, LOW);
}
if (digitalState == 2)
{
digitalWrite(pinNumber, HIGH);
}
pinNumber = 0;
break;
}
}
break;
}
case 2:
{
getSerial();
switch (serialdata)
{
case 1:
{
//analog read
getSerial();
pinNumber = serialdata;
pinMode(pinNumber, INPUT);
sensorVal = analogRead(pinNumber);
Serial.println(sensorVal);
sensorVal = 0;
pinNumber = 0;
break;
}
case 2:
{
//digital read
getSerial();
pinNumber = serialdata;
pinMode(pinNumber, INPUT);
sensorVal = digitalRead(pinNumber);
Serial.println(sensorVal);
sensorVal = 0;
pinNumber = 0;
break;
}
}
break;
}
case 3:
{
getSerial();
switch (serialdata)
{
case 1:
{
//servo read
getSerial();
servoPin = serialdata;
Serial.println(servoPoses[servoPin]);
break;
}
case 2:
{
//servo write
getSerial();
servoPin = serialdata;
getSerial();
servoPose = serialdata;
if (attachedServos[servoPin] == 1)
{
myservo[servoPin].write(servoPose);
}
if (attachedServos[servoPin] == 0)
{
Servo s1;
myservo[servoPin] = s1;
myservo[servoPin].attach(servoPin);
myservo[servoPin].write(servoPose);
attachedServos[servoPin] = 1;
}
servoPoses[servoPin] = servoPose;
break;
}
case 3:
{
//detach
getSerial();
servoPin = serialdata;
if (attachedServos[servoPin] == 1)
{
myservo[servoPin].detach();
attachedServos[servoPin] = 0;
}
}
}
break;
}
}
}
long getSerial()
{
serialdata = 0;
while (inbyte != '/')
{
inbyte = Serial.read();
if (inbyte > 0 && inbyte != '/')
{
serialdata = serialdata * 10 + inbyte - '0';
}
}
inbyte = 0;
return serialdata;
}
Could anyone provide some insight as to why this is happening and a potential fix? Is this an anomaly or have I overlooked something in the top code? I've looked through and compared them several times and can't seem to find a problem...may just need a new set of eyes to look at it.
Thanks