I'm a senior at federal high school in Brazil, and I need to finish this project to graduate.
Anyways, it include a TCS3200 RGB sensor, LDR sensor, relay and a robotic arm equipped with 4 servos. I've been working on it for a while now, but when I upload a code with al the components included in its working, it does upload. I get this:
Arduino: 1.8.15 (Windows 10), Board: "Arduino Uno"
Sketch uses 5108 bytes (15%) of program storage space. Maximum is 32256 bytes.
Global variables use 257 bytes (12%) of dynamic memory, leaving 1791 bytes for local variables. Maximum is 2048 bytes.
An error occurred while uploading the sketch
So, I need help figuring this out, any help will be appreciated.
this is the code:
#include<SoftwareSerial.h> // library for setting bluetooth input and output pins
VarSpeedServo claw; // Declaração de do servo motor que controlam o movimento do braço
int claw_pin = 2; // Declaração do pino do servo
VarSpeedServo base;
int base_pin = 3;
VarSpeedServo left;
int left_pin = 4;
VarSpeedServo right;
int right_pin = 5;
#define S0 A0 // Definição dos pinos do sensor RGB
#define S1 A1
#define S2 A2
#define S3 A3
#define out A4
int ldr = A5; // Declaração do pino do Sensor LDR
int light_level = 0; // Variável representante do nível de luz
int ldr_key = 0; // Variável chave
int color;// switch case control key based on RGB results
const int relay = 6; // Declaração do relé
char data; // Variável bluetooth
SoftwareSerial Bluetooth(0, 1); // Declaração dos pinos de RX & TX
void setup(){
Bluetooth.begin(9600);
base.attach(base_pin, 1, 180); // Connectando o servo ao seu devido pino
claw.attach(claw_pin, 1, 180);
left.attach(left_pin, 1, 180);
right.attach(right_pin, 1, 180);
base.slowmove(90, 40); // Posições inciais
claw.write(30);
left.slowmove(100, 40);
right.slowmove(170,40);
pinMode(A0, OUTPUT); // Incializando os estados dos pinos do sensor TCS 3200
pinMode(A1, OUTPUT);
pinMode(A2, OUTPUT);
pinMode(A3, OUTPUT);
pinMode(A4, INPUT);
pinMode(ldr, INPUT); // Inicializando o sensor LDR
pinMode(relay, OUTPUT); // Incializando o relé
digitalWrite(relay, LOW); // Ligando os LEDs
}
void loop(){
lights(); // Controle dos luzes LED via Bluetooth
ldr_key = ldr_sub(); // Detecção de objetos por meio de um sensor LDR
if(ldr_key == 1){ // Incialização da condição, caso tem objeto presente
left.slowmove(60, 40); // Extensão do braço
delay(500);
color = color_sub(); // Leitura do cor
delay(500);
claw.write(20);
delay(500);
left.slowmove(100, 40);
delay(500);
switch(color){ // casos de movimento conforme o cor do objeto
case 1: // Azul
base.slowmove(0, 40);
main_movimento();
break;
case 2: // Verde
base.slowmove(45, 40);
main_movimento();
break;
case 3: // Vermelho
base.slowmove(135, 40);
main_movimento();
break;
case 4: // Branco
base.slowmove(180, 40);
main_movimento();
break;
}
}
}
int ldr_sub(){ // Sub rotina responsável pelo controle dos Luzes LEDs
light_level = analogRead(ldr);
if(light_level < 900){
delay(2000);
if(light_level < 900){
return 1;
}
else{
return 0;
}
}
else{
return 0;
}
}
void lights(){ // LED lights controller subroutine
if(Bluetooth.available()){
data = Bluetooth.read();
if (data == '1'){
digitalWrite(relay, HIGH); // LEDs On
}
if (data == '2'){
digitalWrite(relay, LOW); // LEDs Off
}
}
}
void main_movimento(){ // Sub rotina de movimento padronizado de extenção e retração do braço
left.slowmove(60, 40);
claw.write(30);
delay(1000);
left.slowmove(100,40);
delay(500);
base.slowmove(90,40);
}
int color_sub(){ // Subrotina responsável pela leituras de cores
int red = 0;
int green = 0;
int blue = 0;
int color;
analogWrite(S0,HIGH); // Bloco de comando que alterar o estado dos pinos
analogWrite(S1,LOW); // da escala de frequencia de saída e dos Fotodiodos,
analogWrite(S2,LOW); // assim permintindo a leitura dos cores por meio de
analogWrite(S3,LOW); // laço de condições adiante
red = pulseIn(out, LOW);
analogWrite(S2,HIGH);
analogWrite(S3,HIGH);
green = pulseIn(out, LOW);
analogWrite(S2,LOW);
analogWrite(S3,HIGH);
blue = pulseIn(out, LOW);
if( red == 1){return 4;}// Verifica se vermelho foi detectada OBS. Falta inserir o condição de detecção do branco
else{
if (red < blue && red < green && red < 100) // Verifica se vermelho foi detectada
{return 3;}
else{
if (blue < red && blue < green && blue < 1000) // Verifica se azul foi detectada
{return 1;}
else{
if (green < red && green < blue) // Verifica se verde foi detectada
{return 2;}
}
}
}
}
this is the fritzing schematic for the circuit (ignore the LCD display, its been discarded as an idea) :