Auxilio para finalizar só um ponto

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

//Leitura do pino de sinal do moedeiro na entrada 12
#define moedeiro A0

//Variáveis para a contagem de milissegundos
unsigned long millisTarefa0 = millis();
unsigned long millisTarefa1 = millis();
unsigned long millisTarefa2 = millis();
unsigned long millisTarefa3 = millis();
unsigned long millisTarefa4 = millis();
unsigned long millisTarefa5 = millis();
unsigned long millisTarefa6 = millis();
unsigned long millisTarefa7 = millis();

LiquidCrystal_I2C lcd(0x27 ,16,2);

//Variáveis globais
int credito = 0;
int botao_start2=2;
int contador3=3;
int saida3=3;
int botao_start4=4;
int contador5=5;
int saida5=5;
int botao_start6=6;
int contador7=7;
int saida7=7;
int botao_start8=8;
int contador9=9;
int saida9=9;
int botao_start10=10;
int contador11=11;
int saida11=11;
int botao_start12=12;
int contador13=13;
int saida13=13;
int botao_startA2=A2;
int contadorA3=A3;
int saidaA3=A3;
int flag;
int fita_de_leds=A1;

void setup() {

lcd.init(); // Inicializando o LCD
lcd.backlight();
Serial.begin (9600);
lcd.begin(16,2);
lcd.setCursor(1,0);
lcd.print(" COQUETELEIRA");
lcd.setCursor(0,1);
lcd.print(" AUTOMATICA");
delay(6000);
lcd.clear();
delay(100);
pinMode(botao_start2, INPUT_PULLUP);
pinMode(saida3, OUTPUT);
pinMode(botao_start4, INPUT_PULLUP);
pinMode(saida5, OUTPUT);
pinMode(botao_start6, INPUT_PULLUP);
pinMode(saida7, OUTPUT);
pinMode(botao_start8, INPUT_PULLUP);
pinMode(saida9, OUTPUT);
pinMode(botao_start10, INPUT_PULLUP);
pinMode(saida11, OUTPUT);
pinMode(botao_start12, INPUT_PULLUP);
pinMode(saida13, OUTPUT);
pinMode(botao_startA2, INPUT_PULLUP);
pinMode(saidaA3, OUTPUT);
pinMode(moedeiro, INPUT_PULLUP);
pinMode(fita_de_leds, OUTPUT);

Serial.println ("Inicializado!");
}
void loop(){
// Executa tarefa 0 so lede enfeite
tarefa0();
// Executa tarefa 1
tarefa1();
// Executa tarefa 2
tarefa2();
// Executa tarefa 3
tarefa3();
// Executa tarefa 4
tarefa4();
// Executa tarefa 5
tarefa5();
// Executa tarefa 6
tarefa6();
// Executa tarefa 7
tarefa7();
}
void tarefa0(){
if((millis() - millisTarefa0) < 200){
// Acende o fita_de_leds
if(credito==0){
digitalWrite(fita_de_leds, LOW);}
}else{
// Apaga o fita_de_leds
digitalWrite(fita_de_leds, HIGH);
}
// Verifica se já passou 400 milisegundos
if((millis() - millisTarefa0) > 400){
millisTarefa0 = millis();
}
}

void tarefa1(){
// Verifica se já passou 50 milisegundos
if((millis() - millisTarefa1) < 50){
//Se detectar pulso do moedeiro, aumenta o crédito e exibe no LCD
if (!digitalRead(moedeiro)) {
credito++;
lcd.clear();
lcd.print("Credito: ");
lcd.print(credito);
Serial.print ("Moedas = ");
Serial.println (credito);
delay(500);
}
//Se apertar botão start, diminui um crédito e inicia contagem
botao_start2=digitalRead(2);
if(botao_start2==LOW && credito>0){
credito--;
contador3=2; //contagem de tempo
flag=1;
while(flag==1){
contagem();
}

  delay(100);  

}
//Atualiza no LCD o crédito
lcd.setCursor(0,0);
lcd.print("Credito: ");
lcd.print(credito);
lcd.print(" ");

}
// Verifica se já passou 100 milisegundos
if((millis() - millisTarefa1) > 100){
millisTarefa1 = millis();
}
}

void contagem(){
//Ativa a saída
digitalWrite(saida3, HIGH);
//Inicia a contagem decrescente
contador3--;
lcd.setCursor(0,1);
lcd.print("DOSANDO: ");
lcd.print("00:");
//Adiciona "0" se o número for menor que 10
if(contador3<10){
lcd.print("0");
}
lcd.print(contador3);
delay(1000);
//Quando o contador zerar, muda a flag, zera contador e desliga saída
if(contador3<= 0){
flag=0;
contador3=0;
digitalWrite(saida3, LOW);
delay(1000);
lcd.clear();
}
}

void tarefa2(){
// Verifica se já passou 50 milisegundos
if((millis() - millisTarefa2) < 50){
//Se detectar pulso do moedeiro, aumenta o crédito e exibe no LCD
if (!digitalRead(moedeiro)) {
credito++;
lcd.clear();
lcd.print("Credito: ");
lcd.print(credito);
Serial.print ("Moedas = ");
Serial.println (credito);
delay(500);
}
//Se apertar botão start, diminui um crédito e inicia contagem
botao_start4=digitalRead(4);
if(botao_start4==LOW && credito>0){
credito--;
contador5=3; //contagem de tempo
flag=1;
while(flag==1){
contagem5();
}

  delay(100);  

}
//Atualiza no LCD o crédito
lcd.setCursor(0,0);
lcd.print("Credito: ");
lcd.print(credito);
lcd.print(" ");

}
// Verifica se já passou 100 milisegundos
if((millis() - millisTarefa2) > 100){
millisTarefa2 = millis();
}
}

void contagem5(){
//Ativa a saída
digitalWrite(saida5, HIGH);
//Inicia a contagem decrescente
contador5--;
lcd.setCursor(0,1);
lcd.print("DOSANDO: ");
lcd.print("00:");
//Adiciona "0" se o número for menor que 10
if(contador5<10){
lcd.print("0");
}
lcd.print(contador5);
delay(1000);
//Quando o contador zerar, muda a flag, zera contador e desliga saída
if(contador5<= 0){
flag=0;
contador5=0;
digitalWrite(saida5, LOW);
delay(1000);
lcd.clear();
}
}

esse code esta funcionando o que eu gostaria é de alterar o valor de desconto de creditos atualmente ele desconta de 1 em 1 e gostaria de alterar em cada tarefa fosse valor diferente porem sou bem leigo e estou comesando agora comprogramação

Olá!

No seu programa, a linha que diminui um crédito é essa aqui:

e ela aparece tanto na tarefa1() quanto na tarefa2().

Se o desconto do crédito não vai variar e apenas será diferente em cada tarefa, é suficiente que você altere a linha da tarefa para:

credito = credito - x; (onde esse x é o valor fixo de créditos que você quer descontar).

Se você ainda não leu o tópico Como obter o melhor desse Fórum, está na hora de dar uma olhada lá. Ao postar seu código, é sempre bom formatá-lo adequadamente, para facilitar a leitura de quem avaliará. Aqui está ele formatado:

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

//Leitura do pino de sinal do moedeiro na entrada 12
#define moedeiro A0

//Variáveis para a contagem de milissegundos
unsigned long millisTarefa0 = millis();
unsigned long millisTarefa1 = millis();
unsigned long millisTarefa2 = millis();
unsigned long millisTarefa3 = millis();
unsigned long millisTarefa4 = millis();
unsigned long millisTarefa5 = millis();
unsigned long millisTarefa6 = millis();
unsigned long millisTarefa7 = millis();

LiquidCrystal_I2C lcd(0x27, 16, 2);

//Variáveis globais
int credito = 0;
int botao_start2 = 2;
int contador3 = 3;
int saida3 = 3;
int botao_start4 = 4;
int contador5 = 5;
int saida5 = 5;
int botao_start6 = 6;
int contador7 = 7;
int saida7 = 7;
int botao_start8 = 8;
int contador9 = 9;
int saida9 = 9;
int botao_start10 = 10;
int contador11 = 11;
int saida11 = 11;
int botao_start12 = 12;
int contador13 = 13;
int saida13 = 13;
int botao_startA2 = A2;
int contadorA3 = A3;
int saidaA3 = A3;
int flag;
int fita_de_leds = A1;

void setup() {

  lcd.init();  // Inicializando o LCD
  lcd.backlight();
  Serial.begin(9600);
  lcd.begin(16, 2);
  lcd.setCursor(1, 0);
  lcd.print(" COQUETELEIRA");
  lcd.setCursor(0, 1);
  lcd.print(" AUTOMATICA");
  delay(6000);
  lcd.clear();
  delay(100);
  pinMode(botao_start2, INPUT_PULLUP);
  pinMode(saida3, OUTPUT);
  pinMode(botao_start4, INPUT_PULLUP);
  pinMode(saida5, OUTPUT);
  pinMode(botao_start6, INPUT_PULLUP);
  pinMode(saida7, OUTPUT);
  pinMode(botao_start8, INPUT_PULLUP);
  pinMode(saida9, OUTPUT);
  pinMode(botao_start10, INPUT_PULLUP);
  pinMode(saida11, OUTPUT);
  pinMode(botao_start12, INPUT_PULLUP);
  pinMode(saida13, OUTPUT);
  pinMode(botao_startA2, INPUT_PULLUP);
  pinMode(saidaA3, OUTPUT);
  pinMode(moedeiro, INPUT_PULLUP);
  pinMode(fita_de_leds, OUTPUT);

  Serial.println("Inicializado!");
}
void loop() {
  // Executa tarefa 0 so lede enfeite
  tarefa0();
  // Executa tarefa 1
  tarefa1();
  // Executa tarefa 2
  tarefa2();
  // Executa tarefa 3
  tarefa3();
  // Executa tarefa 4
  tarefa4();
  // Executa tarefa 5
  tarefa5();
  // Executa tarefa 6
  tarefa6();
  // Executa tarefa 7
  tarefa7();
}
void tarefa0() {
  if ((millis() - millisTarefa0) < 200) {
    // Acende o fita_de_leds
    if (credito == 0) {
      digitalWrite(fita_de_leds, LOW);
    }
  } else {
    // Apaga o fita_de_leds
    digitalWrite(fita_de_leds, HIGH);
  }
  // Verifica se já passou 400 milisegundos
  if ((millis() - millisTarefa0) > 400) {
    millisTarefa0 = millis();
  }
}

void tarefa1() {
  // Verifica se já passou 50 milisegundos
  if ((millis() - millisTarefa1) < 50) {
    //Se detectar pulso do moedeiro, aumenta o crédito e exibe no LCD
    if (!digitalRead(moedeiro)) {
      credito++;
      lcd.clear();
      lcd.print("Credito: ");
      lcd.print(credito);
      Serial.print("Moedas = ");
      Serial.println(credito);
      delay(500);
    }
    //Se apertar botão start, diminui um crédito e inicia contagem
    botao_start2 = digitalRead(2);
    if (botao_start2 == LOW && credito > 0) {
      credito--;
      contador3 = 2;  //contagem de tempo
      flag = 1;
      while (flag == 1) {
        contagem();
      }

      delay(100);
    }
    //Atualiza no LCD o crédito
    lcd.setCursor(0, 0);
    lcd.print("Credito: ");
    lcd.print(credito);
    lcd.print(" ");
  }
  // Verifica se já passou 100 milisegundos
  if ((millis() - millisTarefa1) > 100) {
    millisTarefa1 = millis();
  }
}

void contagem() {
  //Ativa a saída
  digitalWrite(saida3, HIGH);
  //Inicia a contagem decrescente
  contador3--;
  lcd.setCursor(0, 1);
  lcd.print("DOSANDO: ");
  lcd.print("00:");
  //Adiciona "0" se o número for menor que 10
  if (contador3 < 10) {
    lcd.print("0");
  }
  lcd.print(contador3);
  delay(1000);
  //Quando o contador zerar, muda a flag, zera contador e desliga saída
  if (contador3 <= 0) {
    flag = 0;
    contador3 = 0;
    digitalWrite(saida3, LOW);
    delay(1000);
    lcd.clear();
  }
}

void tarefa2() {
  // Verifica se já passou 50 milisegundos
  if ((millis() - millisTarefa2) < 50) {
    //Se detectar pulso do moedeiro, aumenta o crédito e exibe no LCD
    if (!digitalRead(moedeiro)) {
      credito++;
      lcd.clear();
      lcd.print("Credito: ");
      lcd.print(credito);
      Serial.print("Moedas = ");
      Serial.println(credito);
      delay(500);
    }
    //Se apertar botão start, diminui um crédito e inicia contagem
    botao_start4 = digitalRead(4);
    if (botao_start4 == LOW && credito > 0) {
      credito--;
      contador5 = 3;  //contagem de tempo
      flag = 1;
      while (flag == 1) {
        contagem5();
      }

      delay(100);
    }
    //Atualiza no LCD o crédito
    lcd.setCursor(0, 0);
    lcd.print("Credito: ");
    lcd.print(credito);
    lcd.print(" ");
  }
  // Verifica se já passou 100 milisegundos
  if ((millis() - millisTarefa2) > 100) {
    millisTarefa2 = millis();
  }
}

void contagem5() {
  //Ativa a saída
  digitalWrite(saida5, HIGH);
  //Inicia a contagem decrescente
  contador5--;
  lcd.setCursor(0, 1);
  lcd.print("DOSANDO: ");
  lcd.print("00:");
  //Adiciona "0" se o número for menor que 10
  if (contador5 < 10) {
    lcd.print("0");
  }
  lcd.print(contador5);
  delay(1000);
  //Quando o contador zerar, muda a flag, zera contador e desliga saída
  if (contador5 <= 0) {
    flag = 0;
    contador5 = 0;
    digitalWrite(saida5, LOW);
    delay(1000);
    lcd.clear();
  }
}

vlw muitoobg pela ajuda e pela dica

1 Like

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.