Go Down

Topic: ¿Como puedo añadir un led usando el mismo pulsador a este codigo? (Read 199 times) previous topic - next topic

Rafagar

Oct 06, 2018, 12:41 am Last Edit: Oct 06, 2018, 01:26 am by surbyte Reason: Agregado de etiquetas de código/error
Buenas noches. Tengo el siguiente código y quiero añadirle un led, para que cuando pulse el botón (pin 10) se encienda y en cuanto suelte el botón se apague, como un pulsador. ¿Alguien me echa una mano? Gracias por adelantado!


Code: [Select]

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

#define SLEUTEL 10  
#define BUZZER 8  

LiquidCrystal lcd(7,6,5,4,3,2);

void setup() {
 pinMode(SLEUTEL, INPUT_PULLUP);
 pinMode(BUZZER, OUTPUT);
 Serial.begin(115200);
 lcd.begin(16,2);
     
}

float StreepDuur = 200.0;
boolean PrevS = false;
long tStartTeken, tStartPauze;
boolean S;
String kar = "";
void loop() {
 S = !digitalRead(SLEUTEL);

 if (S) {
   if (S != PrevS) {
     tStartTeken = millis();
     DecodeerPauze(tStartPauze);
   }
   digitalWrite(BUZZER, HIGH);
 }
 else {
   if (S != PrevS) {
     tStartPauze = millis();
     Decodeer(tStartTeken);
   }
   digitalWrite(BUZZER, LOW);
 }

 if (abs(millis() - tStartPauze) > StreepDuur * 10) {
   DecodeerPauze(tStartPauze);
 }

 PrevS = S;
}

void Decodeer(long starttijd) {
 char teken = '?';
 long tijd = abs(millis() - starttijd);
 float PuntDuur = StreepDuur / 3.0;

 if (tijd <= 4) return;

 if (tijd <= PuntDuur) teken = '.';
 else if (tijd > StreepDuur) teken = '-';
 else if ((tijd > (StreepDuur + PuntDuur) / 0.3) && tijd <= StreepDuur) teken = '-';
 else teken = '.';

 if (teken == '-') {
   if (tijd > StreepDuur) StreepDuur++;
   if (tijd < StreepDuur) StreepDuur--;
 }
 else if (teken == '.') {
   if (tijd > StreepDuur / 3.0) StreepDuur++;
   if (tijd < StreepDuur / 3.0) StreepDuur--;
 }
 kar += teken;
 //Serial.println(teken);
}

void DecodeerPauze(long starttijd) {
 if (kar == "") return;

 char teken = '?';
 long tijd = abs(millis() - starttijd);
 if (tijd > StreepDuur - StreepDuur / 40) {
   DecodeerKar();
   //Serial.print();
 }
 if (tijd > StreepDuur * 10) {
   DecodeerKar();
   Print(" "); Serial.print(" ");
 }
 //else DecodeerKar();
 //Serial.println(teken);
}

void DecodeerKar() {
 static String letters[] = {
   ".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-",
   ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--..", "E"
 };
 int i = 0;
 while (letters[i] != "E") {
   if (letters[i] == kar) {
     Print((char)('A' + i));
     Serial.print((char)('A' + i));
     break;
   }
   i++;
 }
 if (letters[i] == "E") {
   Print(kar);
   Serial.print(kar);
 }
 kar = "";
}

int y = 0, x = 0;
void Print(String &s) {
 for (int i = 0; i < s.length(); i++) {
   upd();
   lcd.print(s[i]);
 }
}
void Print(char s) {
 upd();
 lcd.print(s);
}
void Print(char *s) {
 for (int i = 0; i < strlen(s); i++) {
   upd();
   lcd.print(s[i]);
 }
}

void upd() {
 lcd.setCursor(x, y);
 x++; if (x >= 20) {
   x = 0;
   y++;
 }
 if (y >= 4) {
   lcd.clear();
   x=y = 0;    
 }
}

ArduMyth

¿No te es más sencillo abrir el IDE de Arduino irte a los ejemplos y ver el código y darle a subir?
No sé ahí tienes ejemplos con leds y pulsadores. Es más rápido que hacerte una cuenta, validar desde tu email y luego crear un hilo. O usar google, porque tu duda de encender apagar leds con un pulsador es el primer ejercicio de Arduino. Es lo más básico, no puedes decir que no encuentras nada sobre esto.
Otra cosa es que no tengas ni idea porque has copiado y tu idea sea seguir copiando de aquí y de allá, pero el foro de programación es para dudas de programación y las normas advierten que antes de abrir un tema al menos busquen antes.
Si has sido capaz de encontrar un código que hasta punteros usa seguro puedes darle a abrir ejemplos en el IDE de Arduino.

Un saludo.

Rafagar

Tienes razón,  uno de mis mayores defectos   es pecar de impaciente. Fue tan   facil hacerlo que ayer   por la noche lo hice (añadir el led). Supongo que estoy queriendo aprender programacion desde un punto de partida erroneo. Lejos de parecerme borde tu comentario te lo agradezco, pues me sirve para ver que no voy por el camino que deberia. Un saludo.

ArduMyth

Cómo tu mismo observas cuando desde la experiencia se les dice que hagan X y no Y es para que lo hagan más rápido y no de borde.

Cambiar el estado de un led con un pulsador se hace con una línea y cómo te supones no me cuesta escribir una línea, siendo 2 el led y 4 el botón:

Code: [Select]
digitalWrite(2,(digitalRead(4));


Lo que ocurre es que el apartado de software se llena a diario de post sobre cosas que se encuentran en los mismos ejemplos del IDE y se repiten los mismos temas día sí y día también, por eso las normas del foro dejan claro que antes de poner tu duda antes buscar algo sobre el tema.

Se agradece que tomes el comentario de buenas maneras pues lo que intentamos quienes respondemos las dudas es mejorar un poco el foro.

Un saludo.

Go Up