Lavavajillas Arduino
Este será el primer post de muchos que tengo pensado escribir, ¿ y por que no empezar con algo complicado?
En esta ocasión les comentaré paso a paso el diseño electrónico de un lavavajillas usando arduino, cabe destacar que solo vi un proyecto de un lavavajillas con arduino ya terminado, del cual tome de su código algunas líneas para el sensor de temperatura, que a su vez fueron tomadas de arduino playground. Esta es la página de el otro lavavajillas http://www.neonsquirt.com/dishwasher.html
La historia del lavavajillas RiveraTek con arduino.
Se tomó el lavavajillas de la mamá de un amigo que ya no servía, de la marca Atlas modelo DM 4506 estos lavavajillas son chinos y no hay mucha información al respecto, solo pude conseguir el manual de instrucciones en sueco.
Mi idea era arreglarlo y regresarlo a su dueña sin costo de mano de obra, de la reparación su hijo solo pagaría el material utilizado. Así que al ingresar el lavavajillas a mi domicilio lo primero que hice fue ver cual era la falla y afortunadamente era la placa del circuito electrónico, digo afortunadamente por que si hubiera sido alguna otra cosa, este proyecto no se hubiera llevado a cabo.
Intente conseguir la placa de circuito sin ningún resultado, entonces fue cuando decidí hacer la placa con un arduino.
Manos a la obra (Lavavajillas RiveraTek con arduino).
Pensando en los materiales que utilizaría y como sería un proyecto, decidí usar una placa perforada para hacer la placa de circuito de relés, opte por usar relés pequeños de un amperaje adecuado para el trabajo de la lavavajillas, estos serían controlados por un arduino pro mini y para visualizar una pantalla de lcd.
[imageeffect type=»frame» align=»aligncenter» width=»500″ lightbox=»yes» height=»420″ alt=»» url=»http://riveratek.com/wp-content/uploads/2013/01/SL382201.jpg» ]
Lo primero que hice fue desarmar el circuito electrónico original para tomar posteriormente algunas piezas para reutilizarlas.
[imageeffect type=»frame» align=»aligncenter» width=»500″ lightbox=»yes» height=»420″ alt=»» url=»http://riveratek.com/wp-content/uploads/2013/01/SL382203.jpg» ]
Los relés deben controlar 6 dispositivos del lavavajillas: Bomba de desagüe, Bomba de Lavado, Válvula de entrada de agua, Solenoide de dispensador de detergente, Solenoide de regeneración y el calentador.
Los otros 8 dispositivos que tiene el lavavajillas tenía pensado conectarlos de diversas formas al arduino pero por algún fallo de mi programación o algo que nunca comprendí solo conecte 7 de los 8 mencionados: El botón de puerta, llave selectora de programa, botón de inicio, sensor de llenado, sensor de temperatura, y el display de lcd. El que falto y que me dió algunos problemas fue el sensor de exceso de llenado (dispositivo de seguridad del lavavajillas el cual use como cortador de corriente).
Así que puse manos a la obra y empecé a diseñar como quedaría la placa con los relés hice que quedara sobre un plástico que traía la placa original y este fue el resultado.
[imageeffect type=»frame» align=»aligncenter» width=»500″ lightbox=»yes» height=»420″ alt=»» url=»http://riveratek.com/wp-content/uploads/2013/01/SL382207.jpg» ]
Después de esto me dedique a hacer las pistas sobre la placa y ponerle terminales para poder hacer las conexiones hacia el arduino. También utilicé una fuente conmutada de 5v 2A para alimentar lo relés y al arduino.
[imageeffect type=»frame» align=»aligncenter» width=»500″ lightbox=»yes» height=»420″ alt=»» url=»http://riveratek.com/wp-content/uploads/2013/01/SL382209.jpg» ]
Después hice el conexionado de el lcd al arduino y empecé hacer el programa comenzando por el display, la llave selectora, el botón de inicio y termómetro (para esto usé el mismo termistor que traía la lavadora uno de 10k NTC).
Sin olvidar el corte que llevaría el frente del lavavajillas para el lcd donde se le monto un rectángulo de acrílico que se corto previamente.
[styledbox type=»shadow» width=»» align=»center»]
[/styledbox]
Conecté todos los relés a su respectivos dispositivos a comandar, haciendo pruebas con lo poco que tenia de programación, esto fue un poco incomodo ya que lo tuve que hacer en la cocina y no tengo conexión para lavavajillas, desde la llave tuve que usar un adaptador para conectar la manguera de agua, también utilicé una silla de madera como banco de trabajo y lo mas incomodo trabajar sentado en el piso.
[imageeffect type=»frame» align=»aligncenter» width=»500″ lightbox=»yes» height=»420″ alt=»» url=»http://riveratek.com/wp-content/uploads/2013/01/SL382211.jpg»]
Después de ver que todos los relés funcionaban y los dispositivos funcionaban bien, decidí montar todos los circuitos en el panel frontal de el lavavajillas.
[imageeffect type=»frame» align=»aligncenter» width=»500″ lightbox=»yes» height=»420″ alt=»» url=»http://riveratek.com/wp-content/uploads/2013/01/SL382226.jpg» ]
Al circuito le deje unas terminales para futuras actualizaciones.
[imageeffect type=»frame» align=»aligncenter» width=»500″ lightbox=»yes» height=»420″ alt=»» url=»http://riveratek.com/wp-content/uploads/2013/01/SL382228.jpg» ]
Este es el lavavajillas terminado sin la tapa delantera pero 100% funcionando.
[imageeffect type=»frame» align=»aligncenter» width=»500″ lightbox=»yes» height=»420″ alt=»» url=»http://riveratek.com/wp-content/uploads/2013/01/SL382229.jpg» ]
- //Lavavajillas v.1.0.
- //Programador: Pedro Rivera.
- //Programa para arduino duemillanove o mini arduino pro.
- //Controlador de un lavavajillas con 5 diferentes programas de lavado,
- //control de temperatura termistor 10k.
- //control de 6 relays optoacoplados
- //Bajo licencia de Creative Commons.
- #include <math.h>
- #include <LiquidCrystal.h>
- //asignar pines
- LiquidCrystal lcd(8, 9, 10, 11, 12, 13);
- #define doorBtn 2 //boton de puerta
- #define errorSens 3 //sensor de exceso de llenado
- #define drainPump 4 //bomba de desagüe
- #define soapSolen 5 //Selenoide de dispensador de detergente
- #define inletValve 6 //valvula de entrada de agua
- #define regenSolen 7 //selenoide de regeneración
- #define keySelect A0 //llave selectora
- #define startBtn A1 //boton de inicio
- #define fillSens A2 //sensor de llenado
- #define tempSensor A3 //sensor de temperatura
- #define heater A4 //calentador
- #define washPump A5 //bomba de lavado
- //declaración de constantes
- const int btnStrong = 1;
- const int btnNormal = 2;
- const int btnEconom = 3;
- const int btnFast = 4;
- const int btnRinse = 5;
- const int btnNone = 6;
- //declaracion de variables
- unsigned long periodStart, periodFinished, periodElapsed;
- unsigned long periodStart2, periodFinished2, periodElapsed2;
- volatile int doorBtnState = 0;
- double tempArray[25];
- byte arrayIndex = 0;
- int lcdKeyMenu = 0;
- int selKeyIN = 0;
- int startBtnState = 0;
- int fillSensState = 0;
- int tempLimit = 57;
- int x = 0;
- //acciones
- int readKey(){ //leer la llave selectora de programas inicio
- selKeyIN = analogRead(keySelect); //lee el valor desde el sensor
- if (selKeyIN < 300) return btnRinse;
- if (selKeyIN < 500) return btnEconom;
- if (selKeyIN < 600) return btnNormal;
- if (selKeyIN < 700) return btnStrong;
- if (selKeyIN < 999) return btnFast; return btnNone; }
- double waterTemp() { //subrutina tomada de www.neonsquirt.com/
- if (arrayIndex> 23) {//a su vez tomada de Arduino Playground
- arrayIndex=0;
- }
- else {
- arrayIndex++;
- }
- double Temp; // The Thermistor2 "Simple Code"
- int RawADC = analogRead(tempSensor);
- Temp = log(((10240000/RawADC) - 10000));
- Temp = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * Temp * Temp ))* Temp );
- Temp = Temp - 273.15; //convierte kelvin a celsious
- tempArray[arrayIndex]=Temp;
- Temp=0;
- for (int i=0; i<24; i++) {
- Temp += tempArray[i];
- }
- return (Temp / 25); // regresa el promedio de la temperatura del arreglo
- }
- void dispTemp(){
- lcd.setCursor(0,4);
- lcd.print("Temperatura: ");
- lcd.print(int(waterTemp()));
- lcd.print((char)223);
- lcd.print("C ");
- }
- void Welcome(){
- lcd.clear();
- lcd.setCursor(0,0);
- lcd.print(" Bienvenido ");
- lcd.setCursor(0,1);
- lcd.print(" Lavavajillas ");
- lcd.setCursor(0,2);
- lcd.print(" con Arduino ");
- lcd.setCursor(0,3);
- lcd.print(" RiveraTek Rev 1.0");
- delay(5000);
- lcd.clear();
- }
- void Finish(){
- lcd.clear();
- lcd.setCursor(0,0);
- lcd.print(" Vajilla Limpia ");
- lcd.setCursor(0,1);
- lcd.print(" Pulse el boton off ");
- lcd.setCursor(0,2);
- lcd.print(" para terminar" );
- while (true){};
- }
- void selMenu(){
- lcd.setCursor(0,0);
- lcd.print(" Seleccione ");
- lcd.setCursor(0,1);
- lcd.print(" un programa ");
- lcd.setCursor(0,2);
- lcd.print(" y pulse start ");
- lcd.setCursor(0,3);
- lcd.print(" para empezar ");
- actStartBtn();
- }
- void actStartBtn(){ //accion del boton de inicio
- startBtnState = digitalRead(startBtn);
- while (startBtnState == HIGH){
- startBtnState = digitalRead(startBtn);
- }
- }
- void actDoorBtn() { // accion switch puerta
- digitalWrite(heater, LOW);
- digitalWrite(washPump, LOW);
- digitalWrite(soapSolen, LOW);
- digitalWrite(drainPump, LOW);
- digitalWrite(inletValve, LOW);
- digitalWrite(regenSolen, LOW);
- doorBtnState = digitalRead(doorBtn);
- while (doorBtnState == HIGH){
- doorBtnState = digitalRead(doorBtn);
- }
- }
- void actErrorSens(){
- cli();
- digitalWrite(heater, LOW);
- digitalWrite(washPump, LOW);
- digitalWrite(soapSolen, LOW);
- digitalWrite(drainPump, LOW);
- digitalWrite(inletValve, LOW);
- digitalWrite(regenSolen, LOW);
- lcd.setCursor(0,0);
- lcd.print(" ERROR ");
- lcd.setCursor(0,1);
- lcd.print(" DESCONECTE ");
- lcd.setCursor(0,2);
- lcd.print(" EL LAVAVAJILLAS ");
- lcd.setCursor(0,3);
- lcd.print(" DEL TOMA CORRIENTE ");
- while (true){};
- }
- void actSoapSolenONE(){
- digitalWrite(soapSolen, HIGH);
- periodStart2 = millis();
- timeElapsed2();
- while(periodElapsed2 < 3000){
- timeElapsed2();
- }
- digitalWrite(soapSolen, LOW);
- }
- void actFill(){
- lcd.setCursor(0,2);
- lcd.print(" Llenando ");
- digitalWrite(inletValve, HIGH);
- periodStart2 = millis();
- timeElapsed2();
- while(periodElapsed2 < 7000){
- digitalWrite(inletValve, HIGH);
- timeElapsed2();
- }
- digitalWrite(washPump, HIGH);
- digitalWrite(inletValve, HIGH);
- fillSensState = digitalRead(fillSens);
- while (fillSensState == LOW){
- digitalWrite(washPump, HIGH);
- digitalWrite(inletValve, HIGH);
- fillSensState = digitalRead(fillSens);
- }
- digitalWrite(washPump, HIGH);
- digitalWrite(inletValve, HIGH);
- periodStart2 = millis();
- timeElapsed2();
- while(periodElapsed2 < 10000){
- digitalWrite(inletValve, HIGH);
- digitalWrite(washPump, HIGH);
- timeElapsed2();
- }
- digitalWrite(inletValve, LOW);
- lcd.setCursor(0,2);
- lcd.print(" ");
- digitalWrite(washPump, HIGH);
- }
- void actDrainPumpON(){
- digitalWrite(drainPump, HIGH);
- lcd.setCursor(0,2);
- lcd.print(" Drenando ");
- lcd.setCursor(0,3);
- lcd.print(" ");
- }
- void actDrainPumpOFF(){
- digitalWrite(drainPump, LOW);
- lcd.setCursor(0,2);
- lcd.print(" ");
- }
- void actDrain(){
- actDrainPumpON();
- fillSensState = digitalRead(fillSens);
- while (fillSensState == HIGH) {
- actDrainPumpON();
- fillSensState = digitalRead(fillSens);
- }
- actDrainPumpON();
- periodStart2 = millis();
- timeElapsed2();
- while(periodElapsed2 < 30000){
- actDrainPumpON();
- timeElapsed2();
- }
- actDrainPumpOFF();
- }
- void actHeaterON(){
- digitalWrite(heater, HIGH);
- }
- void actHeaterOFF(){
- digitalWrite(heater, LOW);
- }
- void actPreWashON(){
- digitalWrite(washPump, HIGH);
- lcd.setCursor(0,2);
- lcd.print(" Prelavado ");
- }
- void actPreWashOFF(){
- digitalWrite(washPump, LOW);
- lcd.setCursor(0,2);
- lcd.print(" ");
- }
- void actWashON(){
- digitalWrite(washPump, HIGH);
- lcd.setCursor(0,2);
- lcd.print(" Lavando ");
- }
- void actWashOFF(){
- digitalWrite(washPump, LOW);
- lcd.setCursor(0,2);
- lcd.print(" ");
- }
- void timeElapsed(){
- periodFinished= millis();
- periodElapsed = (periodFinished - periodStart);
- }
- void timeElapsed2(){
- periodFinished2 = millis();
- periodElapsed2 = (periodFinished2 - periodStart2);
- }
- void actRinse(){
- lcd.setCursor(0,1);
- lcd.print(" Enjuagado ");
- actFill();
- actWashON();
- periodStart = millis();
- timeElapsed();
- while(periodElapsed < 390000){
- actWashON();
- timeElapsed();
- }
- actWashOFF();
- pause();
- actDrain();
- }
- void actClearRinse(){
- lcd.setCursor(0,1);
- lcd.print(" Abrillantado ");
- actFill();
- actWashON();
- actHeaterON();
- while(waterTemp() < 48){
- actHeaterON();
- actWashON();
- dispTemp();
- }
- actWashON();
- actHeaterON();
- digitalWrite(soapSolen, HIGH);
- periodStart = millis();
- timeElapsed();
- while(periodElapsed < 60000){
- actWashON();
- actHeaterON();
- digitalWrite(soapSolen, HIGH);
- timeElapsed();
- }
- actWashON();
- actHeaterON();
- digitalWrite(soapSolen, LOW);
- periodStart = millis();
- timeElapsed();
- while(periodElapsed < 3000){
- actWashON();
- actHeaterON();
- digitalWrite(soapSolen, LOW);
- timeElapsed();
- }
- actWashON();
- actHeaterON();
- digitalWrite(soapSolen, HIGH);
- periodStart = millis();
- timeElapsed();
- while(periodElapsed < 60000){
- actWashON();
- actHeaterON();
- digitalWrite(soapSolen, HIGH);
- timeElapsed();
- }
- digitalWrite(soapSolen, LOW);
- actWashON();
- actHeaterON();
- while(waterTemp() < tempLimit){
- actHeaterON();
- actWashON();
- dispTemp();
- }
- actWashON();
- actHeaterOFF();
- periodStart = millis();
- timeElapsed();
- while(periodElapsed < 60000){
- actWashON();
- timeElapsed();
- }
- actWashOFF();
- pause();
- actDrain();
- }
- void actDry(){
- lcd.setCursor(0,1);
- lcd.print(" Secando ");
- periodStart = millis();
- timeElapsed();
- while(periodElapsed < 120000){
- timeElapsed();
- }
- digitalWrite(regenSolen, HIGH);
- actDrain();
- periodStart = millis();
- timeElapsed();
- while(periodElapsed < 60000){
- timeElapsed();
- }
- periodStart = millis();
- timeElapsed();
- while(periodElapsed < 1000){
- digitalWrite(inletValve, HIGH);
- timeElapsed();
- }
- digitalWrite(inletValve, LOW);
- periodStart = millis();
- timeElapsed();
- while(periodElapsed < 3000){
- timeElapsed();
- }
- periodStart = millis();
- timeElapsed();
- while(periodElapsed < 1000){
- digitalWrite(inletValve, HIGH);
- timeElapsed();
- }
- digitalWrite(inletValve, LOW);
- digitalWrite(regenSolen, LOW);
- actDrain();
- periodStart = millis();
- timeElapsed();
- while(periodElapsed < 660000){
- timeElapsed();
- }
- actDrain();
- }
- void pause(){
- periodStart = millis();
- timeElapsed();
- while(periodElapsed < 3000){
- timeElapsed();
- }
- }
- //programas
- void wStrong(){
- lcd.setCursor(0,0);
- lcd.print("Lavado Fuerte ");
- lcd.setCursor(0,1);
- lcd.print(" ");
- lcd.setCursor(0,2);
- lcd.print(" ");
- lcd.setCursor(0,3);
- lcd.print(" ");
- actDrain();
- pause();
- actFill();
- pause();
- actPreWashON();
- while(waterTemp() < 36){
- actPreWashON();
- actHeaterON();
- dispTemp();
- }
- actHeaterOFF();
- periodStart = millis();
- timeElapsed();
- while(periodElapsed < 180000){
- actPreWashON();
- dispTemp();
- timeElapsed();
- }
- actPreWashOFF();
- pause();
- actDrain();
- pause();
- actFill();
- pause();
- actSoapSolenONE();
- while(waterTemp() < 59){
- actWashON();
- actHeaterON();
- dispTemp();
- }
- actHeaterOFF();
- periodStart = millis();
- timeElapsed();
- while(periodElapsed < 720000){
- actWashON();
- dispTemp();
- timeElapsed();
- }
- actWashOFF();
- pause();
- actDrain();
- pause();
- actRinse();
- pause();
- actRinse();
- pause();
- actClearRinse();
- pause();
- actDry();
- Finish();
- }
- void wNormal(){
- lcd.setCursor(0,0);
- lcd.print("Lavado Normal ");
- lcd.setCursor(0,1);
- lcd.print(" ");
- lcd.setCursor(0,2);
- lcd.print(" ");
- actDrain();
- pause();
- actFill();
- pause();
- actPreWashON();
- periodStart = millis();
- timeElapsed();
- while(periodElapsed < 360000){
- actPreWashON();
- dispTemp();
- timeElapsed();
- }
- actPreWashOFF();
- pause();
- actDrain();
- pause();
- actFill();
- pause();
- actSoapSolenONE();
- while(waterTemp() < 55){
- actWashON();
- actHeaterON();
- dispTemp();
- }
- actHeaterOFF();
- periodStart = millis();
- timeElapsed();
- while(periodElapsed < 840000){
- actWashON();
- dispTemp();
- timeElapsed();
- }
- actWashOFF();
- pause();
- actDrain();
- pause();
- actRinse();
- pause();
- actClearRinse();
- pause();
- actDry();
- Finish();
- }
- void wEconom(){
- lcd.setCursor(0,0);
- lcd.print("Lavado Economico ");
- lcd.setCursor(0,1);
- lcd.print(" ");
- lcd.setCursor(0,2);
- lcd.print(" ");
- actDrain();
- pause();
- actFill();
- pause();
- actPreWashON();
- periodStart = millis();
- timeElapsed();
- while(periodElapsed < 480000){
- actPreWashON();
- dispTemp();
- timeElapsed();
- }
- actPreWashOFF();
- pause();
- actDrain();
- pause();
- actFill();
- pause();
- actSoapSolenONE();
- while(waterTemp() < 41){
- actWashON();
- actHeaterON();
- dispTemp();
- }
- actHeaterOFF();
- periodStart = millis();
- timeElapsed();
- while(periodElapsed < 600000){
- actWashON();
- dispTemp();
- timeElapsed();
- }
- while(waterTemp() < 48){
- actWashON();
- actHeaterON();
- dispTemp();
- }
- actHeaterOFF();
- periodStart = millis();
- timeElapsed();
- while(periodElapsed < 30000){
- actWashON();
- dispTemp();
- timeElapsed();
- }
- actWashOFF();
- pause();
- actDrain();
- pause();
- actRinse();
- pause();
- actClearRinse();
- pause();
- actDry();
- Finish();
- }
- void wFast(){
- tempLimit = 48;
- lcd.setCursor(0,0);
- lcd.print("Lavado Rapido ");
- lcd.setCursor(0,1);
- lcd.print(" ");
- lcd.setCursor(0,2);
- lcd.print(" ");
- actDrain();
- pause();
- actFill();
- pause();
- actSoapSolenONE();
- while(waterTemp() < 36){
- actWashON();
- actHeaterON();
- dispTemp();
- }
- actHeaterOFF();
- periodStart = millis();
- timeElapsed();
- while(periodElapsed < 240000){
- actWashON();
- dispTemp();
- timeElapsed();
- }
- actWashOFF();
- pause();
- actDrain();
- pause();
- actRinse();
- pause();
- actClearRinse();
- pause();
- actDry();
- Finish();
- }
- void wRinse(){
- lcd.setCursor(0,0);
- lcd.print(" Enjuagar ");
- lcd.setCursor(0,1);
- lcd.print(" ");
- lcd.setCursor(0,2);
- lcd.print(" ");
- actDrain();
- pause();
- actFill();
- pause();
- actPreWashON();
- periodStart = millis();
- timeElapsed();
- while(periodElapsed < 360000){
- actPreWashON();
- dispTemp();
- timeElapsed();
- }
- actPreWashOFF();
- pause();
- actDrain();
- pause();
- actDry();
- Finish();
- }
- void setup() {
- for (int i=0; i<25; i++) tempArray[i]=21; //Temperatura primera lectura
- lcd.begin(20,4);
- pinMode(heater, OUTPUT);
- pinMode(washPump, OUTPUT);
- pinMode(soapSolen, OUTPUT);
- pinMode(regenSolen, OUTPUT);
- pinMode(drainPump, OUTPUT);
- pinMode(inletValve, OUTPUT);
- digitalWrite(startBtn, HIGH);
- digitalWrite(fillSens, HIGH);
- digitalWrite(washPump, LOW);
- digitalWrite(drainPump, LOW);
- digitalWrite(inletValve, LOW);
- attachInterrupt(0, actDoorBtn, RISING);
- //attachInterrupt(1, actErrorSens, RISING);
- }
- void loop(){
- Welcome();
- selMenu();
- lcdKeyMenu = readKey(); // leer llave
- switch (lcdKeyMenu) {
- case 1:
- wStrong();
- break;
- case 2:
- wNormal();
- break;
- case 3:
- wEconom();
- break;
- case 4:
- wFast();
- break;
- case 5:
- wRinse();
- break;
- }
- }
Hi! Tell me please what version of arduino IDE use in this project,
and what is missing in line 8 and line9 ?
include what?
Have a nice day!
I used arduino 1.0.1 but you can use new version ide.
I fix the code in lines 8 and 9
Regards.
Hi! I also installed arduino 1.0.1; found the liquidcristal lcd library;and not find anywhere the math.h library; during compiling the sketch found some error messages
line :52: error: expected unqualified-id before ‘else’
line :57: error: expected constructor,destructor or type conversion before ‘=’ token
line:58: error: expected constructor,destructor or type conversion before ‘=’ token
line:60: error: array bound is not an integer constant
line:60: error: expected constructor,destructor or type conversion before ‘=’ token
line:61: error: expected constructor,destructor or type conversion before ‘=’ token
line:62: error: expected unqualified-id before ‘for’ line:62: error: expected constructor,destructor or type conversion before ‘<' token line:62: error: expected constructor,destructor or type conversion before '++' token
line:65: error: expected unqualified-id before 'return' line:66: error: expected declaration before '}' token
Have you some idea what's wrong?
Regards. bjduino@gmail.com
Fail copy in the script code, I fix that, check again with arduino ide 1.0.6
this time I compile it and works without errors.
Problem was in the line 50. Check that line.
Regards
Hi! Many thanks for helping me, i compile it in arduino 1.0.1 and 1.0.6 without any error.
Regards.
Have a nice day!
Hello, I’ve the pcb dishwasher down and i’ve find your arduino perfect program. I’m waiting the item to repair.
I need your help because I’ve a push button for program select and one button for delay start (3-6-9-12H). I’m newbie in arduino and C++ but after some days I tried some modifications.
Can it Work ? Thank you very much !!!
const int remiseAzero = 0;
int lastkeybtnState = 0;
int keybtnState = 0;
int keybtnCounter = 0;
int readKey(){
keybtnState = digitalRead(keySelect); // lis en fonction du nombre d’appui sur le bouton
if (keybtnState != lastkeybtnState) {
if (keybtnState == HIGH) {
keybtnCounter++;
}
lastkeybtnState = keybtnState;
}
if (keybtnCounter != 1) return btnRinse;
if (keybtnCounter != 2) return btnEconom;
if (keybtnCounter != 3) return btnNormal;
if (keybtnCounter != 4) return btnStrong;
if (keybtnCounter != 5) return btnFast;
if (keybtnCounter != 6) { keybtnCounter = remiseAzero; lastkeybtnState = remiseAzero; keybtnState = remiseAzero; }
}
you need a routine of when stop:
if(keybtnCounter !=1) return btnRinse;
if(keybtnCounter !=2) return btnEconom;
if we only take these 2 lines, when you press one time the button automatically go to btnRinse routine all the time, you won´t be able to select another routine. you need a one loop I think, and with press start button go out to the loop and compare with
if (keybtnCounter != 1) return btnRinse;
if (keybtnCounter != 2) return btnEconom;
if (keybtnCounter != 3) return btnNormal;
if (keybtnCounter != 4) return btnStrong;
if (keybtnCounter != 5) return btnFast;
Check this http://www.arduino.cc/en/Tutorial/ButtonStateChange
Boa tarde, é possivel meter aqui o esquema electrico para ver as ligaçoes??
Gracias
sorry i don’t have schematics
any wiring diagrams available as of yet?
Sorry I don’t have it yet.