LusoRobótica - Robótica em Português
Robótica => Discussão geral sobre robótica => Tópico iniciado por: luisjustin em 21 de Dezembro de 2011, 17:29
-
Olá, criei um codigo pro meu arduino mas não quer funcionar corretamente:
/**
* Controle Industrial de Reles
*
* @author Luis Henrique Justin
* @website [url=http://www.j1host.com.br]www.j1host.com.br[/url]
*/
/**
* Define Pinos Digitais a serem usados para a placa
*/
int a = 2;
int b = 3;
int c = 4;
int d = 5;
int e = 6;
int f = 7;
int g = 8;
int h = 9;
int i = 10;
int j = 11;
int ledPin = 13;
char Leitura=0;
void setup(){
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
}
void loop()
{
if (Serial.available() > 0) {
Leitura = Serial.read();
}
if (Leitura == '1'){
digitalWrite(ledPin, HIGH);
}
else if (Leitura == '2'){
digitalWrite(ledPin, LOW);
}
}
mas eu fiz um teste para ver se não entrava em conflito mas entrou se eu coloco 12 via serial ele liga e desliga o Led, por que a ideia é fazer 10 RELES ligarem mas se eu digitar 12 Liga um rele dai tambem vai ligar e desligar outro entende, minha vontade era usar letras Ex: "A" = Liga Rele 1 e "a" = e a minisculo desliga o rele como posso fazer isso ?
-
Talvez pretendas algo como:
void loop()
{
if (Serial.available() > 0) {
Leitura = Serial.read();
}
if (Leitura == 'A'){
digitalWrite(a, HIGH);
}
else if (Leitura == 'a'){
digitalWrite(a, LOW);
}
else if (Leitura == 'B'){
digitalWrite(b, HIGH);
}
else if (Leitura == 'b'){
digitalWrite(b, LOW);
}
//(etc)
}
-
Sim, mas se eu coloco assim eu ligo e digito "a" minusculo e ele não desliga o rele
Talvez pretendas algo como:
void loop()
{
if (Serial.available() > 0) {
Leitura = Serial.read();
}
if (Leitura == 'A'){
digitalWrite(a, HIGH);
}
else if (Leitura == 'a'){
digitalWrite(a, LOW);
}
else if (Leitura == 'B'){
digitalWrite(b, HIGH);
}
else if (Leitura == 'b'){
digitalWrite(b, LOW);
}
//(etc)
}
-
Experimenta primeiro com um led e por exemplo com o pin 13, para ver se com 'A' liga e com 'a' desliga.
Depois o mesmo noutro pin, exemplo no pin 3 com 'B' e 'b' (com um led).
Se o led estiver a ligar e desligar bem então é do resto do circuito do relê.
-
Sim descobri o que era as variaveis la encima tavam entrando em conflito com as letras, locura mas é, e tem algum jeito de eu fazer o arduino toda vez que receber um codigo 123 suponhamos ele enviar uma menssagem Dizendo A=1, B=0, etc para saber que reles estão ligados
-
Sim, tudo isso pode ser feito, mas para tal tens que fazer variáveis de estado para gravar em que estado deixaste cada pin quando os afectas para depois poderes devolver o valor do pin.
-
Sim, tudo isso pode ser feito, mas para tal tens que fazer variáveis de estado para gravar em que estado deixaste cada pin quando os afectas para depois poderes devolver o valor do pin.
sim, entendi vc quer que eu crie uma variavel pra cada rele vamos dizer, e depois coloque no codigo desse jeito :
void loop()
{
if (Serial.available() > 0) {
Leitura = Serial.read();
}
if (Leitura == 'A'){
Status1 = digitalWrite(a, HIGH);
}
else if (Leitura == 'a'){
Status1 = digitalWrite(a, LOW);
}
else if (Leitura == 'B'){
Status2 = digitalWrite(b, HIGH);
}
else if (Leitura == 'b'){
Status2 = digitalWrite(b, LOW);
}
//(etc)
}
isso que vc quiz dizer ?
-
Em vez de ter uma variavel para cada relé use um Array ou Vector...
;)
Cumprimentos,
André Carvalho.
-
Em vez de ter uma variavel para cada relé use um Array ou Vector...
;)
Cumprimentos,
André Carvalho.
Prefiro usar varias variaveis se não eu me enrrolo usando array, e eu teria que usar o Serial.println("Oi"); tambem, mas como uso ele sem ele repetir um milhao de vezes ?
-
tentei usar o codigo desse jeito e ele da erro na hora de compilar:
if (Serial.available() > 0) {
Leitura = Serial.read();
}
if (Leitura == 'A'){
Status1 = digitalWrite(a1, HIGH);
}
else if (Leitura == 'a'){
Status1 = digitalWrite(a1, LOW);
}
if (Leitura == 'B'){
Status2 = digitalWrite(b1, HIGH);
}
else if (Leitura == 'b'){
Status2 = digitalWrite(b1, LOW);
}
Status1 é variavel que garda se o rele ta 1 ou 0 mas ele da erro na hora de compilar
-
Que erro é que dá?
E outra coisa, como é que o Status guarda alguma coisa se estás a usar Writes e não reads?
E tendo em conta que a unica coisa que altera o estado dos relés é o próprio programa fazer reads a pinos que já escreveste é contra produtivo.
-
Que erro é que dá?
E outra coisa, como é que o Status guarda alguma coisa se estás a usar Writes e não reads?
E tendo em conta que a unica coisa que altera o estado dos relés é o próprio programa fazer reads a pinos que já escreveste é contra produtivo.
eu tento fazer de outra forma mas o que me aparece é geramente A ou o no console:
/**
* Controle Industrial de Reles
*
* @author Luis Henrique Justin
* @website [url=http://www.j1host.com.br]www.j1host.com.br[/url]
*/
/**
* Define Pinos Digitais a serem usados para a placa
*/
int a1 = 2;
int b1 = 3;
int c1 = 4;
int d1 = 5;
int e1 = 6;
int f1 = 7;
int g1 = 8;
int h1 = 9;
int i1 = 10;
int j1 = 11;
int ledPin = 13;
/**
* Variaveis tipo Char
*/
char Leitura=0; //Char que faz a leitura da Porta Serial
/**
* Grupo de Variaveis que indica o Status do rele
*/
char Status[] = {0,0,0,0,0,0,0,0,0,0};
/**
* Faz configura??o do Microcontrolador
*/
void setup(){
Serial.begin(9600);
//pinMode(ledPin, OUTPUT);
}
/**
* Codigo do Sistema de reles
*/
void loop()
{
if (Serial.available() > 0) {
Leitura = Serial.read();
}
if (Leitura == 'A'){
digitalWrite(a1, HIGH);
Status[0] = 'A Ativo';
}
else if (Leitura == 'a'){
digitalWrite(a1, LOW);
Status[0] = 'A Desativado';
}
if (Leitura == 'B'){
digitalWrite(b1, HIGH);
}
else if (Leitura == 'b'){
digitalWrite(b1, LOW);
}
if (Leitura == 'C'){
digitalWrite(c1, HIGH);
}
else if (Leitura == 'c'){
digitalWrite(c1, LOW);
}
if (Leitura == 'D'){
digitalWrite(d1, HIGH);
}
else if (Leitura == 'd'){
digitalWrite(d1, LOW);
}
if (Leitura == 'E'){
digitalWrite(e1, HIGH);
}
else if (Leitura == 'e'){
digitalWrite(e1, LOW);
}
if (Leitura == 'F'){
digitalWrite(f1, HIGH);
}
else if (Leitura == 'f'){
digitalWrite(f1, LOW);
}
if (Leitura == 'G'){
digitalWrite(g1, HIGH);
}
else if (Leitura == 'g'){
digitalWrite(g1, LOW);
}
if (Leitura == 'H'){
digitalWrite(h1, HIGH);
}
else if (Leitura == 'h'){
digitalWrite(h1, LOW);
}
if (Leitura == 'I'){
digitalWrite(i1, HIGH);
}
else if (Leitura == 'i'){
digitalWrite(i1, LOW);
}
if (Leitura == 'J'){
digitalWrite(j1, HIGH);
}
else if (Leitura == 'j'){
digitalWrite(j1, LOW);
}
if (Leitura == 'S'){
statusExibir();
}
}
int statusExibir(){
Serial.print(Status);
delay(1000);
}
-
Esta linha:
Status[0] = 'A Ativo';
Está a fazer coisas épicas e nem acredito que isso compile.
Um caracter com ' ' á volta dele é lido/interpretado como um char e só pode ser um caracter dentro das ' ', mas tu tens texto e texto é com " ", e depois estás a meter vários caracteres na posição 0 de um array de char's ou seja vários caracters no sitio de um.
-
Esta linha:
Status[0] = 'A Ativo';
Está a fazer coisas épicas e nem acredito que isso compile.
Um caracter com ' ' á volta dele é lido/interpretado como um char e só pode ser um caracter dentro das ' ', mas tu tens texto e texto é com " ", e depois estás a meter vários caracteres na posição 0 de um array de char's ou seja vários caracters no sitio de um.
fiz uma solução simples e rapida:
/**
* Controle Industrial de Reles
*
* @author Luis Henrique Justin
* @website [url=http://www.j1host.com.br]www.j1host.com.br[/url]
*/
/**
* Define Pinos Digitais a serem usados para a placa
*/
int a1 = 2;
int b1 = 3;
int c1 = 4;
int d1 = 5;
int e1 = 6;
int f1 = 7;
int g1 = 8;
int h1 = 9;
int i1 = 10;
int j1 = 11;
int ledPin = 13;
/**
* Variaveis tipo Char
*/
char Leitura=0; //Char que faz a leitura da Porta Serial
/**
* Grupo de Variaveis que indica o Status do rele
*/
char Status[] = {0,0,0,0,0,0,0,0,0,0};
/**
* Faz configura??o do Microcontrolador
*/
void setup(){
Serial.begin(9600);
//pinMode(ledPin, OUTPUT);
}
/**
* Codigo do Sistema de reles
*/
void loop()
{
if (Serial.available() > 0) {
Leitura = Serial.read();
}
if (Leitura == 'A'){
digitalWrite(a1, HIGH);
Status[0] = '1';
}
else if (Leitura == 'a'){
digitalWrite(a1, LOW);
Status[0] = '0';
}
if (Leitura == 'B'){
digitalWrite(b1, HIGH);
Status[1] = '1';
}
else if (Leitura == 'b'){
digitalWrite(b1, LOW);
Status[1] = '0';
}
if (Leitura == 'C'){
digitalWrite(c1, HIGH);
Status[2] = '1';
}
else if (Leitura == 'c'){
digitalWrite(c1, LOW);
Status[2] = '0';
}
if (Leitura == 'D'){
digitalWrite(d1, HIGH);
Status[3] = '1';
}
else if (Leitura == 'd'){
digitalWrite(d1, LOW);
Status[3] = '0';
}
if (Leitura == 'E'){
digitalWrite(e1, HIGH);
Status[4] = '1';
}
else if (Leitura == 'e'){
digitalWrite(e1, LOW);
Status[4] = '0';
}
if (Leitura == 'F'){
digitalWrite(f1, HIGH);
Status[5] = '1';
}
else if (Leitura == 'f'){
digitalWrite(f1, LOW);
Status[5] = '0';
}
if (Leitura == 'G'){
digitalWrite(g1, HIGH);
Status[6] = '1';
}
else if (Leitura == 'g'){
digitalWrite(g1, LOW);
Status[6] = '0';
}
if (Leitura == 'H'){
digitalWrite(h1, HIGH);
Status[7] = '1';
}
else if (Leitura == 'h'){
digitalWrite(h1, LOW);
Status[7] = '0';
}
if (Leitura == 'I'){
digitalWrite(i1, HIGH);
Status[8] = '1';
}
else if (Leitura == 'i'){
digitalWrite(i1, LOW);
Status[8] = '0';
}
if (Leitura == 'J'){
digitalWrite(j1, HIGH);
Status[9] = '1';
}
else if (Leitura == 'j'){
digitalWrite(j1, LOW);
Status[9] = '0';
}
if (Leitura == 'S'){
statusExibir();
}
}
int statusExibir()
{
Serial.print(Status[0]);
Serial.print(",");
Serial.print(Status[1]);
Serial.print(",");
Serial.print(Status[2]);
Serial.print(",");
Serial.print(Status[3]);
Serial.print(",");
Serial.print(Status[4]);
Serial.print(",");
Serial.print(Status[5]);
Serial.print(",");
Serial.print(Status[6]);
Serial.print(",");
Serial.print(Status[7]);
Serial.print(",");
Serial.print(Status[8]);
Serial.print(",");
Serial.print(Status[9]);
delay(1000);
}
-
Boa, a ideia é essa, compreender e ir aprendendo a estruturar e implementar.
-
Boa, a ideia é essa, compreender e ir aprendendo a estruturar e implementar.
Sim, estava dando certo quando eu estava usando windows para compilar o codigo mas agora o erro é que quando eu digito "S" para saber que rele está ligado ele fica dizendo direto não para mais era para ele fazer uma unica vez quando digitado a letra "S" invez disso ele fica direto repetindo a cada um segundo antes do windows se eu colocasse delay(1000) ele dizia uma unica vez e parava podem me ajudar ?
/**
* Controle Industrial de Reles
*
* @author Luis Henrique Justin
* @website [url=http://www.j1host.com.br]www.j1host.com.br[/url]
*/
/**
* Define Pinos Digitais a serem usados para a placa
*/
int Pinos[] = {2,3,4,5,6,7,8,9,10,11,12};
/**
* Variaveis tipo Char
*/
char Leitura=0; //Char que faz a leitura da Porta Serial
/**
* Grupo de Variaveis que indica o Status do rele
*/
char Status[] = {0,0,0,0,0,0,0,0,0,0};
/**
* Faz configura??o do Microcontrolador
*/
void setup(){
Serial.begin(9600);
pinMode(Pinos[0], OUTPUT);
pinMode(Pinos[1], OUTPUT);
pinMode(Pinos[2], OUTPUT);
pinMode(Pinos[3], OUTPUT);
pinMode(Pinos[4], OUTPUT);
pinMode(Pinos[5], OUTPUT);
pinMode(Pinos[6], OUTPUT);
pinMode(Pinos[6], OUTPUT);
pinMode(Pinos[7], OUTPUT);
pinMode(Pinos[8], OUTPUT);
pinMode(Pinos[9], OUTPUT);
pinMode(Pinos[10], OUTPUT);
}
/**
* Codigo do Sistema de reles
*/
void loop()
{
if (Serial.available() > 0) {
Leitura = Serial.read();
digitalWrite(Pinos[10], HIGH);
}
if (Leitura == 'A'){
digitalWrite(Pinos[0], HIGH);
Status[0] = '1';
}
else if (Leitura == 'a'){
digitalWrite(Pinos[0], LOW);
Status[0] = '0';
}
if (Leitura == 'B'){
digitalWrite(Pinos[1], HIGH);
Status[1] = '1';
}
else if (Leitura == 'b'){
digitalWrite(Pinos[1], LOW);
Status[1] = '0';
}
if (Leitura == 'C'){
digitalWrite(Pinos[2], HIGH);
Status[2] = '1';
}
else if (Leitura == 'c'){
digitalWrite(Pinos[2], LOW);
Status[2] = '0';
}
if (Leitura == 'D'){
digitalWrite(Pinos[3], HIGH);
Status[3] = '1';
}
else if (Leitura == 'd'){
digitalWrite(Pinos[3], LOW);
Status[3] = '0';
}
if (Leitura == 'E'){
digitalWrite(Pinos[4], HIGH);
Status[4] = '1';
}
else if (Leitura == 'e'){
digitalWrite(Pinos[4], LOW);
Status[4] = '0';
}
if (Leitura == 'F'){
digitalWrite(Pinos[5], HIGH);
Status[5] = '1';
}
else if (Leitura == 'f'){
digitalWrite(Pinos[5], LOW);
Status[5] = '0';
}
if (Leitura == 'G'){
digitalWrite(Pinos[6], HIGH);
Status[6] = '1';
}
else if (Leitura == 'g'){
digitalWrite(Pinos[6], LOW);
Status[6] = '0';
}
if (Leitura == 'H'){
digitalWrite(Pinos[7], HIGH);
Status[7] = '1';
}
else if (Leitura == 'h'){
digitalWrite(Pinos[7], LOW);
Status[7] = '0';
}
if (Leitura == 'I'){
digitalWrite(Pinos[8], HIGH);
Status[8] = '1';
}
else if (Leitura == 'i'){
digitalWrite(Pinos[8], LOW);
Status[8] = '0';
}
if (Leitura == 'J'){
digitalWrite(Pinos[9], HIGH);
Status[9] = '1';
}
else if (Leitura == 'j'){
digitalWrite(Pinos[9], LOW);
Status[9] = '0';
}
if (Leitura == 'S'){
statusExibir();
}
}
int statusExibir()
{
Serial.print(Status[0]);
Serial.print(",");
Serial.print(Status[1]);
Serial.print(",");
Serial.print(Status[2]);
Serial.print(",");
Serial.print(Status[3]);
Serial.print(",");
Serial.print(Status[4]);
Serial.print(",");
Serial.print(Status[5]);
Serial.print(",");
Serial.print(Status[6]);
Serial.print(",");
Serial.print(Status[7]);
Serial.print(",");
Serial.print(Status[8]);
Serial.print(",");
Serial.print(Status[9]);
delay(1000);
}
-
Posta ai o que estás a receber por serial. Um printscreen ou copy past.
-
|0,0,0,0,0,0,0,0,0,0| só que isso é pra aparecer uma vez só quando eu digito o comando mas fica a cada 1 segundo aparecendo
-
Tem Algum jeito de eu limpar o que ta escrito na saida serial ? que eu usei Serial.print e como se limpa a serial sem ser serial.end ?
-
Ninguem sabe ajudar ?
-
/**
* Controle Industrial de Reles
*
* @author Luis Henrique Justin
* @website [url=http://www.j1host.com.br]www.j1host.com.br[/url]
*/
/**
* Define Pinos Digitais a serem usados para a placa
*/
int Pinos[] = {2,3,4,5,6,7,8,9,10,11,12};
/**
* Variaveis tipo Char
*/
char Leitura=0; //Char que faz a leitura da Porta Serial
/**
* Grupo de Variaveis que indica o Status do rele
*/
char Status[] = {0,0,0,0,0,0,0,0,0,0};
/**
* Faz configura??o do Microcontrolador
*/
void setup(){
Serial.begin(9600);
pinMode(Pinos[0], OUTPUT);
pinMode(Pinos[1], OUTPUT);
pinMode(Pinos[2], OUTPUT);
pinMode(Pinos[3], OUTPUT);
pinMode(Pinos[4], OUTPUT);
pinMode(Pinos[5], OUTPUT);
pinMode(Pinos[6], OUTPUT);
pinMode(Pinos[6], OUTPUT);
pinMode(Pinos[7], OUTPUT);
pinMode(Pinos[8], OUTPUT);
pinMode(Pinos[9], OUTPUT);
pinMode(Pinos[10], OUTPUT);
}
/**
* Codigo do Sistema de reles
*/
void loop()
{
if (Serial.available() > 0) {
Leitura = Serial.read();
digitalWrite(Pinos[10], HIGH);
}
if (Leitura == 'A'){
digitalWrite(Pinos[0], HIGH);
Status[0] = '1';
}
else if (Leitura == 'a'){
digitalWrite(Pinos[0], LOW);
Status[0] = '0';
}
if (Leitura == 'B'){
digitalWrite(Pinos[1], HIGH);
Status[1] = '1';
}
else if (Leitura == 'b'){
digitalWrite(Pinos[1], LOW);
Status[1] = '0';
}
if (Leitura == 'C'){
digitalWrite(Pinos[2], HIGH);
Status[2] = '1';
}
else if (Leitura == 'c'){
digitalWrite(Pinos[2], LOW);
Status[2] = '0';
}
if (Leitura == 'D'){
digitalWrite(Pinos[3], HIGH);
Status[3] = '1';
}
else if (Leitura == 'd'){
digitalWrite(Pinos[3], LOW);
Status[3] = '0';
}
if (Leitura == 'E'){
digitalWrite(Pinos[4], HIGH);
Status[4] = '1';
}
else if (Leitura == 'e'){
digitalWrite(Pinos[4], LOW);
Status[4] = '0';
}
if (Leitura == 'F'){
digitalWrite(Pinos[5], HIGH);
Status[5] = '1';
}
else if (Leitura == 'f'){
digitalWrite(Pinos[5], LOW);
Status[5] = '0';
}
if (Leitura == 'G'){
digitalWrite(Pinos[6], HIGH);
Status[6] = '1';
}
else if (Leitura == 'g'){
digitalWrite(Pinos[6], LOW);
Status[6] = '0';
}
if (Leitura == 'H'){
digitalWrite(Pinos[7], HIGH);
Status[7] = '1';
}
else if (Leitura == 'h'){
digitalWrite(Pinos[7], LOW);
Status[7] = '0';
}
if (Leitura == 'I'){
digitalWrite(Pinos[8], HIGH);
Status[8] = '1';
}
else if (Leitura == 'i'){
digitalWrite(Pinos[8], LOW);
Status[8] = '0';
}
if (Leitura == 'J'){
digitalWrite(Pinos[9], HIGH);
Status[9] = '1';
}
else if (Leitura == 'j'){
digitalWrite(Pinos[9], LOW);
Status[9] = '0';
}
if (Leitura == 'S'){
statusExibir();
}
}
int statusExibir()
{
Serial.print(Status[0]);
Serial.print(",");
Serial.print(Status[1]);
Serial.print(",");
Serial.print(Status[2]);
Serial.print(",");
Serial.print(Status[3]);
Serial.print(",");
Serial.print(Status[4]);
Serial.print(",");
Serial.print(Status[5]);
Serial.print(",");
Serial.print(Status[6]);
Serial.print(",");
Serial.print(Status[7]);
Serial.print(",");
Serial.print(Status[8]);
Serial.print(",");
Serial.print(Status[9]);
Leitura =0;
delay(1000);
}
Exprimenta este código e dizme se corrigiu.