DOIS CODIGOS EM UM

Boas pessoal! obrigado sempre por a ajuda que estao a prestarme,eu ajudo com o que sei que nao e muito,preciso de que me ajudem a juntar dois códigos em um,pois nao sei como fazer .

Obrigado.

código nº1

//  04/07/12 Probado y modificado por Guillermo Fernández - Juan Pablo Sánchez
//  para que dia/mes//hora/min/seg aparezca en el LCD con un "0" delante del número
//  en caso que sea menor que 10...


//  Se aceptan sugerencias y/o modificaciones.


#include <LiquidCrystal.h>
#include <Wire.h>
#include "RTClib.h"

// Connección del LCD:
// rs (LCD pin 4) to Arduino pin 12
// rw (LCD pin 5) to Arduino pin 11
// enable (LCD pin 6) to Arduino pin 10
// LCD pin 15 to Arduino pin 13
// LCD pins d4, d5, d6, d7 to Arduino pins 5, 4, 3, 2
LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);

// Conexión del RTC:
// Pin Sda al pin A4 del arduino
// Pin Scl al pin A5 del arduino
// También como en cualquier módulo, se deben conectar VCC y GND.
RTC_DS1307 RTC;

int backLight = 13;    // pin 13 will control the backlight

const int ledA1 = A1;
const int ledA2 = A2;
const int led3 = 4;

int state = 0;

void setup()
{
  Serial.begin(57600);
  Wire.begin();
  RTC.begin();

  pinMode (ledA1,OUTPUT);
  pinMode (ledA2,OUTPUT);
  pinMode (led3,OUTPUT);
  digitalWrite(ledA1,HIGH);
  digitalWrite (ledA2,HIGH);
  digitalWrite (led3,HIGH);

  if (! RTC.isrunning()) {
    Serial.println("RTC is NOT running!");
    // following line sets the RTC to the date & time this sketch was compiled
    RTC.adjust(DateTime(__DATE__, __TIME__));
  }

  pinMode(backLight, OUTPUT);
  digitalWrite(backLight, HIGH); // turn backlight on. Replace 'HIGH' with 'LOW' to turn it off.
  lcd.begin(16,2);              // columns, rows.  use 16,2 for a 16x2 LCD, etc.
  lcd.clear();                  // start with a blank screen
}

void loop()
{
  DateTime now = RTC.now();
  int seconds;
  int last_seconds;
  seconds = now.second();

  lcd.clear();
  lcd.setCursor(3,0);
  if(now.day() < 10)
  {   
    lcd.print("0");
  }
  lcd.print(now.day(), DEC);
  lcd.print('/');
  if(now.month() < 10)
  {   
    lcd.print("0");
  }
  lcd.print(now.month(), DEC);
  lcd.print('/');
  lcd.print(now.year(), DEC);
  lcd.setCursor(4,1);
  if(now.hour() < 10)
  {   
    lcd.print("0");
  }
  lcd.print(now.hour(), DEC);
  lcd.print(':');
  if(now.minute() < 10)
  {   
    lcd.print("0");
  }
  lcd.print(now.minute(), DEC);
  lcd.print(':');
  if(now.second() < 10)
  {   
    lcd.print("0");
  }
  lcd.print(now.second(), DEC);

  if (seconds != last_seconds) {
    state = !state;
    last_seconds = seconds;
  }

  if (state == 0) {
    digitalWrite(ledA1,HIGH);
    digitalWrite (ledA2,HIGH);
    digitalWrite (led3,HIGH);
  }
  else {
    digitalWrite(ledA1,LOW);
    digitalWrite (ledA2,LOW);
    digitalWrite (led3,LOW);
  }

  delay(1000);
}

código nº2

/* 

	     En este proyecto movemos un servo de 0 a 180 grados y despues en sentido inverso

	     Para hacerlo utilizamos la biblioteca Servo

	   */

	   #include <Servo.h>   // incluimos la biblioteca Servo 

	   Servo miservo;       // creamos un objecto servo para controlar el motor 

	   void setup() { 
             miservo.attach(9);  // liga el servo al pin 9 
	 }

	   void loop() { 
	     for(int angulo = 0; angulo < 180; angulo += 1) {   //  un ciclo para mover el servo entre los 0 y los 180 grados  
	      miservo.write(angulo);               //  manda al servo la posicion
	      delay(250);                        //  espera unos milisegundos para que el servo llegue a su posicion
	   }

	   for(int angulo = 180; angulo >= 1; angulo -= 1)    {   //  un ciclo para mover el servo entre los 180 y los 0 grados                             
	      miservo.write(angulo);                 //  manda al servo la posicion
	      delay(250);                          //  espera unos milisegundos para que el servo llegue a su posicion
	   }
         }

O que pede não dá para fazer, pelo menos da maneira directa (juntando os dois programas). Para isso funcionar bem, a movimentação do servo deveria ser feita com a função millis() e não com o delay(). Fazendo umas contas rápidas:

  • em cada iteração do ciclo for faz uma espera de 250ms;
  • é percorrido um ângulo de 180º;
  • os incrementos do ângulo são de 1º;
  • são feitos dois varrimentos (um no sentido crescente e outro no sentido decrescente);
    isto quer dizer, que este varrimento feito pelo servo vai demorar: 2 x 180 x 250 ms = 90 000ms = 90s

Ou seja, o relógio vai mostrar a hora e vai iniciar o varrimento. O varrimento demora 1m30s e só depois é que é novamente actualizado o relógio.

Dê uma vista de olhos ao exemplo "Blink Without Delay", é essa filosofia que precisa para fazer os varrimentos com o servo.

Muito obrigado luisilva,mas eu de programaçao noa sei nada os projetos que eu ja fiz sao copiados de outras web,aprendo poco a poco como as variantes e pouco mais,sao ja 50 anos e isto custa a minha idade aprender.

Novamente obrigado.

Flecho.

Deveria ser qualquer coisa deste género:

//  04/07/12 Probado y modificado por Guillermo Fernández - Juan Pablo Sánchez
//  para que dia/mes//hora/min/seg aparezca en el LCD con un "0" delante del número
//  en caso que sea menor que 10...


//  Se aceptan sugerencias y/o modificaciones.


#include <LiquidCrystal.h>
#include <Wire.h>
#include "RTClib.h"

#include <Servo.h>   // incluimos la biblioteca Servo

// Connección del LCD:
// rs (LCD pin 4) to Arduino pin 12
// rw (LCD pin 5) to Arduino pin 11
// enable (LCD pin 6) to Arduino pin 10
// LCD pin 15 to Arduino pin 13
// LCD pins d4, d5, d6, d7 to Arduino pins 5, 4, 3, 2
LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);

// Conexión del RTC:
// Pin Sda al pin A4 del arduino
// Pin Scl al pin A5 del arduino
// También como en cualquier módulo, se deben conectar VCC y GND.
RTC_DS1307 RTC;

int backLight = 13;    // pin 13 will control the backlight

const int ledA1 = A1;
const int ledA2 = A2;
const int led3 = 4;

int state = 0;

Servo miservo;       // creamos un objecto servo para controlar el motor
int angulo = 0;
int direccion = 0;

////////////////////////
unsigned long currentMillis;
unsigned long previousMillis_clock = 0;
unsigned long previousMillis_servo = 0;
const unsigned long interval_clock = 1000;
const unsigned long interval_servo = 250;

void setup()
{
  Serial.begin(57600);
  Wire.begin();
  RTC.begin();

  pinMode (ledA1,OUTPUT);
  pinMode (ledA2,OUTPUT);
  pinMode (led3,OUTPUT);
  digitalWrite(ledA1,HIGH);
  digitalWrite (ledA2,HIGH);
  digitalWrite (led3,HIGH);

  if (! RTC.isrunning()) {
    Serial.println("RTC is NOT running!");
    // following line sets the RTC to the date & time this sketch was compiled
    RTC.adjust(DateTime(__DATE__, __TIME__));
  }

  pinMode(backLight, OUTPUT);
  digitalWrite(backLight, HIGH); // turn backlight on. Replace 'HIGH' with 'LOW' to turn it off.
  lcd.begin(16,2);              // columns, rows.  use 16,2 for a 16x2 LCD, etc.
  lcd.clear();                  // start with a blank screen
  
  miservo.attach(9);  // liga el servo al pin 9 
}

void loop()
{
  currentMillis = millis();

  if(currentMillis - previousMillis_clock > interval_clock) {

    previousMillis_clock = currentMillis;   

    DateTime now = RTC.now();
    int seconds;
    int last_seconds;
    seconds = now.second();

    lcd.clear();
    lcd.setCursor(3,0);
    if(now.day() < 10)
    {   
      lcd.print("0");
    }
    lcd.print(now.day(), DEC);
    lcd.print('/');
    if(now.month() < 10)
    {   
      lcd.print("0");
    }
    lcd.print(now.month(), DEC);
    lcd.print('/');
    lcd.print(now.year(), DEC);
    lcd.setCursor(4,1);
    if(now.hour() < 10)
    {   
      lcd.print("0");
    }
    lcd.print(now.hour(), DEC);
    lcd.print(':');
    if(now.minute() < 10)
    {   
      lcd.print("0");
    }
    lcd.print(now.minute(), DEC);
    lcd.print(':');
    if(now.second() < 10)
    {   
      lcd.print("0");
    }
    lcd.print(now.second(), DEC);

    if (seconds != last_seconds) {
      state = !state;
      last_seconds = seconds;
    }

    if (state == 0) {
      digitalWrite(ledA1,HIGH);
      digitalWrite (ledA2,HIGH);
      digitalWrite (led3,HIGH);
    }
    else {
      digitalWrite(ledA1,LOW);
      digitalWrite (ledA2,LOW);
      digitalWrite (led3,LOW);
    }
  }
  
  if(currentMillis - previousMillis_servo > interval_servo) {
    previousMillis_servo = currentMillis;   
    
    miservo.write(angulo);               //  manda al servo la posicion
    if (direccion == 0) {
      if (++angulo >= 180) {
        angulo = 180;
        direccion = 1;
      }
    }
    else if (direccion == 1) {
      if (--angulo <= 0) {
        angulo = 0;
        direccion = 0;
      }
    }
  }
}

Não testei, por isso não sei se funciona como é pretendido.

Fico muito agradecido :wink: ,de momento o código nao da erro algum,logo eu au montar o projeto ja vou vendo,mas de momento era o que eu quería.

Obrigado.

Flecho.

Olá sou novo no forum e necessito juntar dois projetos em um único Arduino alguem poderia me ajudar? obrigado.

Olá sou novo no forum e necessito juntar dois projetos em um único Arduino alguem poderia me ajudar? obrigado.

Que é que já fizeste e que é que precisas fazer?

Estou pesquisando sobre a função Threads, tudo na tentativa de simular uma multitarefa! será que este é o caminho a ser seguido? agradeço desde já pela atenção de todos!

1º Código RF 433mhz

#include <RFremote.h>

const char *cmd = "here goes your command captured from RFrecvDemo";

RFrecv rfrecv;

void setup()
{
Serial.begin(9600);
delay(500);
Serial.println("INICIADO!");

rfrecv.begin();
}

void loop() {

if (rfrecv.available())

if (strncmp((char*)rfrecv.cmd, cmd, CMD_SIZE) == 0)

Serial.println("COMANDO CORRETO!");

else

Serial.println("ERRO!");

}

//==========================================

2º Código RFID 13,56mhz

#include <SPI.h>
#include <MFRC522.h>

#define greenLed 7
#define redLed 5
#define yellowLed 6
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);

byte myCards[] = {0xEE,0x29,0x43,0x14, //Metropolitando
0x58,0x79,0x83,0x10}; //Llavero azul

int successRead;

byte dummy = 0x00;

byte readCard[4];

void setup() {

pinMode(greenLed,OUTPUT);
pinMode(redLed,OUTPUT);
pinMode(yellowLed,OUTPUT);

//Initializing everingthing

Serial.begin(9600);
SPI.begin(); //Iniciamos protocolo SPI
mfrc522.PCD_Init();
mfrc522.PCD_SetAntennaGain(mfrc522.RxGain_max);
Serial.println("IDENTIFIQUESE...");
}

void loop () {
do{

digitalWrite(yellowLed,HIGH);
delay(500);
digitalWrite(yellowLed,LOW);
delay(500);
successRead = getID();
}

while (!successRead); //Esperando que haya una comunicación con la tarjeta

if (readCard[0] == myCards[4] && readCard[1] == myCards[5]
&& readCard[2] == myCards[6] && readCard[3] == myCards[7]) //checking for blue card
{

Serial.println("Liberado, bem vindo!");

Success();

for(int i = 0; i<4; i++) dummy = readCard*; // removing previous stored value from the readCard variable*

  • successRead = 0;*

  • }else if(readCard[0] == myCards[0] && readCard[1] == myCards[1]*

  • && readCard[2] == myCards[2] && readCard[3] == myCards[3]) //checking for white card*

  • {*

  • Serial.println("Bienvenido al Metropolitano");*

  • Success(); *

_ for(int i = 0; i<4; i++) dummy = readCard*; _
_
}_
_
else {*_

* Error(); //calling the error function*
* }*
}
int getID() {
* // Getting ready for Reading PICCs*
* if ( ! mfrc522.PICC_IsNewCardPresent()) {
_
return 0;_
_
}_
if ( ! mfrc522.PICC_ReadCardSerial()) {
_
return 0;_
_
}_
_
Serial.println("");_
_
for (int i = 0; i < 4; i++) { //_
readCard _= mfrc522.uid.uidByte;
Serial.print(readCard, HEX);
}*_

* Serial.println("");*
* mfrc522.PICC_HaltA();
_ return 1;
}
void Success(){
digitalWrite(greenLed,HIGH);
delay(2000);
digitalWrite(greenLed,LOW);
delay(500);
}
void Error(){
Serial.println("USUARIO NO IDENTIFICADO");*_

* digitalWrite(redLed,HIGH);*
* delay(2000);*
* digitalWrite(redLed,LOW);*
* delay(500);*

}

O que pretendes fazer? Que requisitos em termos de tempos de resposta é que a tua aplicação vai ter para necessitares de multi tarefa?

Olá bubulindo eu chequei unir os dois códigos porém o programa não passa pelo codigo do Rf433 pois ele fica preso no loop do 13,56mhz, como estou aprendendo programar não achei uma solução para isso então andei pesquisando sobre multi tarefa na tentativa de organizar e melhorar o código do projeto final, seria possível o codigo correr entre os dois processo a cada 1 segundo? obrigado pela ajuda!

A maneira de obteres ajuda é colocares aqui o que já fizeste e explicar qual é o erro ou que funcionalidade ao certo é que não está a acontecer.

Bom dia, sou novo na area de programação para arduino, estou realizando dois projetos em uma unica placa arduino. O problema é que o codigo que estou usando além de não rodar, esta implicando no outro programa.

Tenho uma sequencia de leds (com vetor) que ascende X vezes em X sequencias. E outro que liga e desliga com o clique do botão, só que quando executo alem de não mostrar erro, ele deixa um led do meu vetor acesso .

Pesquisei em diversos topicos, mais não encontrei solução. Já inseri um codigo de cada vez e os dois estão funcionando, o erro é só quando junto os dois.

Segue codigo abaixo:

long int ledPinos[] = {13, 11, 9, 7, 5, 3, 1};
int cont=0;
int numero;
int tempo=200;

//FASE02
int led12 = 2;
int botao11 = 4;
int estado_botao = 0;
int flag_botao = 0;
int estado_led = 1;
//FIM02

void setup(){
//Serial.begin(9600);
 
  for(int pino=0; pino<=6; pino++){
    pinMode(ledPinos[pino], OUTPUT);
  }
  
  //FASE02
  
  pinMode(botao11, INPUT);
  pinMode(led12, OUTPUT);
  //FIM02
  
}
 
void loop(){

  //FASE02
    estado_botao = digitalRead(botao11);
  
  if ((estado_botao == 1) && (flag_botao == 0)) {
    flag_botao = 1;
    if(estado_led == 1){
     estado_led = 0;
    digitalWrite(led12, HIGH);
      Serial.println("Ligado");
    }
  else if (estado_led == 0){
    estado_led = 1;
    digitalWrite(led12, LOW);
      Serial.println("Desligado");
  }
  }
  if (estado_botao == 0){
   flag_botao = 0;
        
  }
  
  //FIM02
  
  
//*******FUNNCIONAL!!  
  while(cont<5){
  for(int pino=0; pino<=6; pino++){
  numero = ledPinos[random(0, 6)];    // sorteia um número de 5 a 10
  digitalWrite(numero, HIGH);   // acende o LED no endereço do pino sorteado
  delay(tempo);               // espera
  digitalWrite(numero, LOW);    // apaga o mesmo LED
  }
   cont++;
  }    
  cont=0;
  
  while(cont<3){
  for(int pino=0; pino<=6; pino++){
  digitalWrite(ledPinos[pino], HIGH);
  delay(600);    
  }
  for(int pino=6; pino>=0; pino--)
  {
  digitalWrite(ledPinos[pino], LOW);
  delay(200);
  }  
    cont++;
  }    
   cont=0;
  
  while(cont<3){    
  for(int pino=6; pino>=0; pino--){
  digitalWrite(ledPinos[pino], HIGH);
  delay(30);
  }  
  for(int pino=6; pino>=0; pino--){
  digitalWrite(ledPinos[pino], LOW);
  delay(30);
  }
 cont++;  
}
 cont=0;
  
  while(cont<3){
  for(int pino=0; pino<=6; pino++)
  digitalWrite(ledPinos[pino], HIGH);
  delay(600);    
  for(int pino=6; pino>=0; pino--)
  digitalWrite(ledPinos[pino], LOW);
  delay(200);
    cont++;
  }    
  cont=0;
    
}

Desde já meu obrigado.