ARDUINO COM MÓDULO BLUETOOTH
pessoal o seguinte,
estou desenvolvendo um projeto de automação residencial via bluetooth, para isso estou utilizando o arduino uno com o módulo bluetooth e o celular.
quando realizo acionamentos dos leds pelo celular o programa logo responde, mas ao tentar girar um motor simulando o portão automático, o motor começa funcionar mas não obedece parada no sensor de fim de curso, e continua acionado sem deixar o programa fazer mais nada.
segue meu código:
int controlevelocidade = 3;//variável que irá controlar o motor pwm
int readbluetooth;//variável que irá receber o valor enviado celular para o bluetooth
int lamp1 = 7;
int lamp2 = 6;
int lamp3 = 5;
int lamp4 = 4;
int motor1 = 8;
int motor2 = 9;
int sensor1 = 10;
int sensor2 = 11;
int estado_motor1;
int estado_motor2;
int e;
int f;
boolean statelamp1 = false;
boolean statelamp2 = false;
boolean statelamp3 = false;
boolean statelamp4 = false;
void fechar (void);
void abrir (void);
void setup() {
serial.begin(9600);//inicia comunicação serial e velocidade de comunicação.
pinmode(lamp1, output);
pinmode(lamp2, output);
pinmode(lamp3, output);
pinmode(lamp4, output);
pinmode(controlevelocidade, output);
pinmode(motor1, output);
pinmode(motor2, output);
pinmode(sensor1, input);
pinmode(sensor2, input);
}
void loop()
{
int velocidade = 500;
analogwrite(controlevelocidade, velocidade);
estado_motor1 = digitalread(sensor1);
estado_motor2 = digitalread(sensor2);
if (serial.available() > 0) { //obtém o número de bytes disponíveis para leitura na porta serial
readbluetooth = serial.read(); //valor lido na serial será guardado na variável readbluetooth
if (readbluetooth == 'a') {
if (statelamp1) {
digitalwrite(lamp1, low);
statelamp1 = false;
}
else {
digitalwrite(lamp1, high);
statelamp1 = true;
}
}
if (readbluetooth == 'b') {
if (statelamp2) {
digitalwrite(lamp2, low);
statelamp2 = false;
}
else {
digitalwrite(lamp2, high);
statelamp2 = true;
}
}
if (readbluetooth == 'c') {
if (statelamp3) {
digitalwrite(lamp3, low);
statelamp3 = false;
}
else {
digitalwrite(lamp3, high);
statelamp3 = true;
}
}
if (readbluetooth == 'd') {
if (statelamp4) {
digitalwrite(lamp4, low);
statelamp4 = false;
}
else {
digitalwrite(lamp4, high);
statelamp4 = true;
}
}
if (readbluetooth == 'e') {
e = readbluetooth;
}
if (readbluetooth == 'f') {
f = readbluetooth;
}
}
if (e == 'e')
{
abrir();
}
if (f == 'f')
{
fechar();
}
}
void abrir() {
while (!estado_motor1 == high)
{
digitalwrite(motor1, low);
digitalwrite(motor2, high);
}
digitalwrite(motor1, low);
digitalwrite(motor2, low);
}
void fechar() {
while (!estado_motor2 == high)
{
digitalwrite(motor1, high);
digitalwrite(motor2, low);
}
digitalwrite(motor1, low);
digitalwrite(motor2, low);
}
estou desenvolvendo um projeto de automação residencial via bluetooth, para isso estou utilizando o arduino uno com o módulo bluetooth e o celular.
quando realizo acionamentos dos leds pelo celular o programa logo responde, mas ao tentar girar um motor simulando o portão automático, o motor começa funcionar mas não obedece parada no sensor de fim de curso, e continua acionado sem deixar o programa fazer mais nada.
segue meu código:
int controlevelocidade = 3;//variável que irá controlar o motor pwm
int readbluetooth;//variável que irá receber o valor enviado celular para o bluetooth
int lamp1 = 7;
int lamp2 = 6;
int lamp3 = 5;
int lamp4 = 4;
int motor1 = 8;
int motor2 = 9;
int sensor1 = 10;
int sensor2 = 11;
int estado_motor1;
int estado_motor2;
int e;
int f;
boolean statelamp1 = false;
boolean statelamp2 = false;
boolean statelamp3 = false;
boolean statelamp4 = false;
void fechar (void);
void abrir (void);
void setup() {
serial.begin(9600);//inicia comunicação serial e velocidade de comunicação.
pinmode(lamp1, output);
pinmode(lamp2, output);
pinmode(lamp3, output);
pinmode(lamp4, output);
pinmode(controlevelocidade, output);
pinmode(motor1, output);
pinmode(motor2, output);
pinmode(sensor1, input);
pinmode(sensor2, input);
}
void loop()
{
int velocidade = 500;
analogwrite(controlevelocidade, velocidade);
estado_motor1 = digitalread(sensor1);
estado_motor2 = digitalread(sensor2);
if (serial.available() > 0) { //obtém o número de bytes disponíveis para leitura na porta serial
readbluetooth = serial.read(); //valor lido na serial será guardado na variável readbluetooth
if (readbluetooth == 'a') {
if (statelamp1) {
digitalwrite(lamp1, low);
statelamp1 = false;
}
else {
digitalwrite(lamp1, high);
statelamp1 = true;
}
}
if (readbluetooth == 'b') {
if (statelamp2) {
digitalwrite(lamp2, low);
statelamp2 = false;
}
else {
digitalwrite(lamp2, high);
statelamp2 = true;
}
}
if (readbluetooth == 'c') {
if (statelamp3) {
digitalwrite(lamp3, low);
statelamp3 = false;
}
else {
digitalwrite(lamp3, high);
statelamp3 = true;
}
}
if (readbluetooth == 'd') {
if (statelamp4) {
digitalwrite(lamp4, low);
statelamp4 = false;
}
else {
digitalwrite(lamp4, high);
statelamp4 = true;
}
}
if (readbluetooth == 'e') {
e = readbluetooth;
}
if (readbluetooth == 'f') {
f = readbluetooth;
}
}
if (e == 'e')
{
abrir();
}
if (f == 'f')
{
fechar();
}
}
void abrir() {
while (!estado_motor1 == high)
{
digitalwrite(motor1, low);
digitalwrite(motor2, high);
}
digitalwrite(motor1, low);
digitalwrite(motor2, low);
}
void fechar() {
while (!estado_motor2 == high)
{
digitalwrite(motor1, high);
digitalwrite(motor2, low);
}
digitalwrite(motor1, low);
digitalwrite(motor2, low);
}
o teu problema é que colocas o teu código dentro dum while até que variável estado_motor mude. no entanto, não tens código nenhum para mudar o estado dessa variável...
já se fizesses algo como:
no entanto, eu acho que essa maneira de programar o que pretendes não é boa.
porque não chamar função abrir que apenas muda o estado das saídas e activa uma variável notificar que o motor está ligado e depois meteres uma condição que se o motor estiver activado e o fim de curso também, o motor pára.
já se fizesses algo como:
code: [select]
void abrir() {
while (( estado_motor1 = digitalread(sensor1)) == low)
{
digitalwrite(motor1, low);
digitalwrite(motor2, high);
}
digitalwrite(motor1, low);
digitalwrite(motor2, low);
}
void fechar() {
while ((estado_motor2 = digitalread(sensor2)) == low)
{
digitalwrite(motor1, high);
digitalwrite(motor2, low);
}
digitalwrite(motor1, low);
digitalwrite(motor2, low);
}
no entanto, eu acho que essa maneira de programar o que pretendes não é boa.
porque não chamar função abrir que apenas muda o estado das saídas e activa uma variável notificar que o motor está ligado e depois meteres uma condição que se o motor estiver activado e o fim de curso também, o motor pára.
Arduino Forum > International > Portugues > ARDUINO COM MÓDULO BLUETOOTH
arduino
Comments
Post a Comment