Ola, amigos garagistas, estou montando um projeto em que preciso comunicar um Arduíno e um pic por meio da serial, fiz os dois programas, (Arduíno) e (pic), simulei no proteus e tudo certo só que quando monto o circuito, nada acontece. já tentei de tudo e nada, o Arduíno não da nenhum sinal que recebeu dados.
O programa funciona mais ou menos assim
O pic manda uma string via serial
Exemplo: 'A'
O Arduíno recebe e compara internamente, caso essa string esteja inclusa no programa ele executa
a função do Switch case correspondente
quando mando os dados pela serial do programa do Arduíno pela Usb tudo funciona normal, só que pela entrada rx simplesmente não acontece nada
Tags:
coloque um foto da montagem real... a alimentação esta em comum? o pic ta usando cristal? o reset esta habilitado no codigo? coloque o codigo do arduino e do pic aqui
vlw, blz vou postar tudo aqui,mas vou adiantar que o pic e o arduino estão com alimentação comum, o reset ta desabilitado e estou usando o clock interno de 4 mhz, muito obrigado pela atenção.
código do pic (Ccs)
#include "C:\Users\Jonasmagalhaes\Desktop\teste 3\main.h"
void main()
{
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
//Setup_Oscillator parameter not selected from Intr Oscillator Config tab
#use delay(clock=4000000)
While(TRUE)
{
delay_ms(100);
putc('1');
delay_ms(500);
putc('Z');
delay_ms(500);
putc('2');
delay_ms(500);
putc('Z');
}
}
Código do Arduíno (Arduíno IDE)
#include <SPI.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //portas de comunicação com o lcd
int temp;//variavel para o lcd
int byteRecebido;//armazenamento da serial
boolean retorno = 0;
int s1 = 6; //comunicação entre arduino e o pic 16f877a boolean
int s2 = 7; //comunicação entre arduino e o pic 16f877a boolean
int s3 = 8; //comunicação entre arduino e o pic 16f877a boolean
int s4 = 9; //comunicação entre arduino e o pic 16f877a boolean
int Beep = 13;
void setup() {
lcd.begin(16, 2); //Inicia o LCD com dimensões 16x2(Colunas x Linhas)
Serial.begin(9600);//comando iniciar serial a 9600 bauds
pinMode(s1,OUTPUT); //define pino como saida
pinMode(s2,OUTPUT); //define pino como saida
pinMode(s3,OUTPUT); //define pino como saida
pinMode(s4,OUTPUT); //define pino como saida
pinMode(Beep,OUTPUT); //define pino como saida
lcd.setCursor(0, 0); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Iniciando... "); //Escreve no LCD
Serial.println("Iniciando...");
digitalWrite(Beep,HIGH);//beep de inicialização
delay(60);
digitalWrite(Beep,LOW);
delay(60);
digitalWrite(Beep,HIGH);
delay(60);
digitalWrite(Beep,LOW);
delay(60);
digitalWrite(Beep,HIGH);
delay(60);
digitalWrite(Beep,LOW);
delay(60);
Serial.println("Pronto");
Serial.println("Aguardando comando");
lcd.clear();
lcd.setCursor(0, 0); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Pronto "); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Aguardando cmd."); //Escreve no LCD
delay(500);
}
void loop(){
//zerar saídas//
digitalWrite(s1,LOW);
digitalWrite(s2,LOW);
digitalWrite(s3,LOW);
digitalWrite(s4,LOW);
//////////////////////////////////// setores //////////////////////////////////
//////////////////////////////////// setor 1 //////////////////////////////////
/////////////////////////////setor 1 temporizador ///////////////////////////
switch(Serial.read()) //verifica qual caracter recebido
{
case 'A':
lcd.clear();
lcd.setCursor(0, 0); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Temporizador "); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print("Irrigando area 1"); //Escreve no LCD
Serial.println("Temporizador");
Serial.println("Irrigando area 1");
digitalWrite(s1,LOW);
digitalWrite(s2,LOW);
digitalWrite(s3,LOW);
digitalWrite(s4,HIGH);
delay(500);
break;
/////////////////////////////setor 1 computador ///////////////////////////
case '1':
lcd.clear();
lcd.setCursor(0, 0); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Computador "); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print("Irrigando area 1"); //Escreve no LCD
Serial.println("Computador");
Serial.println("Irrigando area 1");
digitalWrite(s1,LOW);
digitalWrite(21,LOW);
digitalWrite(s3,LOW);
digitalWrite(s4,HIGH);
delay(500);
break;
//////////////////////////////////// setor 2 //////////////////////////////////
/////////////////////////////setor 2 temporizador ///////////////////////////
case 'B':
lcd.clear();
lcd.setCursor(0, 0); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Temporizador "); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print("Irrigando area 2"); //Escreve no LCD
Serial.println("Temporizador");
Serial.println("Irrigando area 2");
digitalWrite(s1,LOW);
digitalWrite(s2,LOW);
digitalWrite(s3,HIGH);
digitalWrite(s4,LOW);
delay(500);
break;
/////////////////////////////setor 2 computador ///////////////////////////
case '2':
lcd.clear();
lcd.setCursor(0, 0); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Computador "); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print("Irrigando area 2"); //Escreve no LCD
Serial.println("Computador");
Serial.println("Irrigando area 2");
digitalWrite(s1,LOW);
digitalWrite(s2,LOW);
digitalWrite(s3,HIGH);
digitalWrite(s4,LOW);
delay(500);
break;
//////////////////////////////////// setor 3 //////////////////////////////////
/////////////////////////////setor 3 temporizador ///////////////////////////
case 'C':
lcd.clear();
lcd.setCursor(0, 0); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Temporizador "); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print("Irrigando area 3"); //Escreve no LCD
Serial.println("Temporizador");
Serial.println("Irrigando area 3");
digitalWrite(s1,LOW);
digitalWrite(s2,LOW);
digitalWrite(s3,HIGH);
digitalWrite(s4,HIGH);
delay(500);
break;
/////////////////////////////setor 3 computador ///////////////////////////
case '3':
lcd.clear();
lcd.setCursor(0, 0); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Computador "); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print("Irrigando area 3"); //Escreve no LCD
Serial.println("Computador");
Serial.println("Irrigando area 3");
digitalWrite(s1,LOW);
digitalWrite(s2,LOW);
digitalWrite(s3,HIGH);
digitalWrite(s4,HIGH);
delay(500);
break;
//////////////////////////////////// setor 4 //////////////////////////////////
/////////////////////////////setor 4 temporizador ///////////////////////////
case 'D':
lcd.clear();
lcd.setCursor(0, 0); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Temporizador "); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print("Irrigando area 4"); //Escreve no LCD
Serial.println("Temporizador");
Serial.println("Irrigando area 4");
digitalWrite(s1,LOW);
digitalWrite(s2,HIGH);
digitalWrite(s3,LOW);
digitalWrite(s4,LOW);
delay(500);
break;
/////////////////////////////setor 4 computador ///////////////////////////
case '4':
lcd.clear();
lcd.setCursor(0, 0); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Computador "); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print("Irrigando area 4"); //Escreve no LCD
Serial.println("Computador");
Serial.println("Irrigando area 4");
digitalWrite(s1,LOW);
digitalWrite(s2,HIGH);
digitalWrite(s3,LOW);
digitalWrite(s4,LOW);
delay(500);
break;
//////////////////////////////////// setor 5 //////////////////////////////////
/////////////////////////////setor 5 temporizador ///////////////////////////
case 'E':
lcd.clear();
lcd.setCursor(0, 0); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Temporizador "); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print("Irrigando area 5"); //Escreve no LCD
Serial.println("Temporizador");
Serial.println("Irrigando area 5");
digitalWrite(s1,LOW);
digitalWrite(s2,HIGH);
digitalWrite(s3,LOW);
digitalWrite(s4,HIGH);
delay(500);
break;
/////////////////////////////setor 5 computador ///////////////////////////
case '5':
lcd.clear();
lcd.setCursor(0, 0); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Computador "); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print("Irrigando area 5"); //Escreve no LCD
Serial.println("Computador");
Serial.println("Irrigando area 5");
digitalWrite(s1,LOW);
digitalWrite(s2,HIGH);
digitalWrite(s3,LOW);
digitalWrite(s4,HIGH);
delay(500);
break;
//////////////////////////////////// setor 6 //////////////////////////////////
/////////////////////////////setor 6 temporizador ///////////////////////////
case 'F':
lcd.clear();
lcd.setCursor(0, 0); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Temporizador "); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print("Irrigando area 6"); //Escreve no LCD
Serial.println("Temporizador");
Serial.println("Irrigando area 6");
digitalWrite(s1,LOW);
digitalWrite(s2,HIGH);
digitalWrite(s3,HIGH);
digitalWrite(s4,LOW);
delay(500);
break;
/////////////////////////////setor 6 computador ///////////////////////////
case '6':
lcd.clear();
lcd.setCursor(0, 0); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Computador "); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print("Irrigando area 6"); //Escreve no LCD
Serial.println("Computador");
Serial.println("Irrigando area 6");
digitalWrite(s1,LOW);
digitalWrite(s2,HIGH);
digitalWrite(s3,HIGH);
digitalWrite(s4,LOW);
delay(500);
break;
//////////////////////////////////// setor 7 //////////////////////////////////
/////////////////////////////setor 7 temporizador ///////////////////////////
case 'G':
lcd.clear();
lcd.setCursor(0, 0); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Temporizador "); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print("Irrigando area 7"); //Escreve no LCD
Serial.println("Temporizador");
Serial.println("Irrigando area 7");
digitalWrite(s1,LOW);
digitalWrite(s2,HIGH);
digitalWrite(s3,HIGH);
digitalWrite(s4,HIGH);
delay(500);
break;
/////////////////////////////setor 7 computador ///////////////////////////
case '7':
lcd.clear();
lcd.setCursor(0, 0); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Computador "); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print("Irrigando area 7"); //Escreve no LCD
Serial.println("Computador");
Serial.println("Irrigando area 7");
digitalWrite(s1,LOW);
digitalWrite(s2,HIGH);
digitalWrite(s3,HIGH);
digitalWrite(s4,HIGH);
delay(500);
break;
//////////////////////////////////// setor 8 //////////////////////////////////
/////////////////////////////setor 8 temporizador ///////////////////////////
case 'H':
lcd.clear();
lcd.setCursor(0, 0); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Temporizador "); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print("Irrigando area 8"); //Escreve no LCD
Serial.println("Temporizador");
Serial.println("Irrigando area 8");
digitalWrite(s1,HIGH);
digitalWrite(s2,LOW);
digitalWrite(s3,LOW);
digitalWrite(s4,LOW);
delay(500);
break;
/////////////////////////////setor 8 computador ///////////////////////////
case '8':
lcd.clear();
lcd.setCursor(0, 0); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Computador "); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print("Irrigando area 8"); //Escreve no LCD
Serial.println("Computador");
Serial.println("Irrigando area 8");
digitalWrite(s1,HIGH);
digitalWrite(s2,LOW);
digitalWrite(s3,LOW);
digitalWrite(s4,LOW);
delay(500);
break;
//////////////////////////////////// bombas //////////////////////////////////
//////////////////////////////////// Bomba 1 //////////////////////////////////
/////////////////////////////Bomba 1 temporizador ///////////////////////////
case 'I':
lcd.clear();
lcd.setCursor(0, 0); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Temporizador "); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Bomba 1 "); //Escreve no LCD
Serial.println("Temporizador");
Serial.println("Bomba 1");
digitalWrite(s1,HIGH);
digitalWrite(s2,LOW);
digitalWrite(s3,LOW);
digitalWrite(s4,HIGH);
delay(500);
break;
/////////////////////////////bomba 1 computador ///////////////////////////
case '9':
lcd.clear();
lcd.setCursor(0, 0); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Computador "); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Bomba 1 "); //Escreve no LCD
Serial.println("Computador");
Serial.println("Bomba 1");
digitalWrite(s1,HIGH);
digitalWrite(s2,LOW);
digitalWrite(s3,LOW);
digitalWrite(s4,HIGH);
delay(500);
break;
//////////////////////////////////// Bomba 2 //////////////////////////////////
/////////////////////////////Bomba 2 temporizador ///////////////////////////
case 'J':
lcd.clear();
lcd.setCursor(0, 0); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Temporizador "); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Bomba 2 "); //Escreve no LCD
Serial.println("Temporizador");
Serial.println("Bomba 2");
digitalWrite(s1,HIGH);
digitalWrite(s2,LOW);
digitalWrite(s3,HIGH);
digitalWrite(s4,LOW);
delay(500);
break;
/////////////////////////////bomba 2 computador ///////////////////////////
case 'X':
lcd.clear();
lcd.setCursor(0, 0); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Computador "); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Bomba 2 "); //Escreve no LCD
Serial.println("Computador");
Serial.println("Bomba 2");
digitalWrite(s1,HIGH);
digitalWrite(s2,LOW);
digitalWrite(s3,HIGH);
digitalWrite(s4,LOW);
delay(500);
break;
//////////////////////////////////// Bomba 3 //////////////////////////////////
/////////////////////////////Bomba 3 temporizador ///////////////////////////
case 'K':
lcd.clear();
lcd.setCursor(0, 0); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Temporizador "); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Bomba 3 "); //Escreve no LCD
Serial.println("Temporizador");
Serial.println("Bomba 3");
digitalWrite(s1,HIGH);
digitalWrite(s2,LOW);
digitalWrite(s3,HIGH);
digitalWrite(s4,HIGH);
delay(500);
break;
/////////////////////////////bomba 3 computador ///////////////////////////
case 'Y':
lcd.clear();
lcd.setCursor(0, 0); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Computador "); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Bomba 3 "); //Escreve no LCD
Serial.println("Computador");
Serial.println("Bomba 3");
digitalWrite(s1,HIGH);
digitalWrite(s2,LOW);
digitalWrite(s3,HIGH);
digitalWrite(s4,HIGH);
delay(500);
break;
case 'Z':
lcd.clear();
lcd.setCursor(0, 0); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Pronto "); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Aguardando cmd."); //Escreve no LCD
Serial.println("Pronto");
Serial.println("Aguardando comando");
digitalWrite(s1,LOW);
digitalWrite(s2,LOW);
digitalWrite(s3,LOW);
digitalWrite(s4,LOW);
delay(500);
break;
}
}
os códigos estão incompletos ainda, gostaria só de faze-los funcionar pra depois desenvolve-los melhor
segue também as fotos da montagem na protoboard (obs, para alimentar o pic e Arduíno estou usando a saída 5 volts de um conversor serial ttl Usb, mas sem conectá-los em tx rx so 5v e Gnd, desde já agradeço a ajuda
amigo coloque tambem o codigo do arquivo "#include C:\Users\Jonasmagalhaes\Desktop\teste 3\main.h"
vc utilizou qual gravador no PIC... verifique se na hora da gravação o fuse de clock interno esta habilitado... tente um teste com pic fazendo um led pisca para verifica se ele esta funcionando.
blz, segue o código do main.h
#include <16F628A.h>
#FUSES NOWDT //No Watch Dog Timer
#FUSES INTRC //Internal RC Osc
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOMCLR //Master Clear pin used for I/O
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8,restart_wdt)
ah quanto ao q vc falou, testei o pic, rodei um codigozinho pra fazesegue a imagem da edição de fuser do microbrn)
*rodei um codigo que piscava um led ligado na porta 18 no pic e tudo certo, funcionou legal
parece que descobrir qual é o problema, estava na fonte, usei uma fonte pra protoboard e Graças a Deus funcionou perfeitamente,mas mesmo assim agradeço a disposição em me ajudar, muito Obrigado !
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por