Show Posts
|
|
Pages: [1]
|
|
3
|
International / Proyectos / arduino en entorno industrial
|
on: October 23, 2012, 02:06:17 pm
|
|
Hola a todos.
Estoy pensando en un proyecto para una empresa con arduino y con xbee. El proyecto consiste en monitorizar via xbee un caudalimetro y un sensor de ultrasonidos para medir nivel y poder enviar toda la informacion a un PLC con entradas analogicas y digitales. El nivel de ultrasonidos,tiene una salida de 4-20mA y otra profibus. El caudalimetro tiene salida 4-20mA tambien y profibus.
Alguien me puede iluminar de como poder comunicarlo todo?
Gracias anticipadas.
Un saludo.
|
|
|
|
|
4
|
International / Software / Error en codigo y con Tone
|
on: October 16, 2012, 04:40:29 pm
|
Hola a todos. En mi proyecto,tengo un lcd con un teclado,en el cual hay un cuenta regresiva,si se introduce el codigo correcto,la cuenta atras se para y se tendria que reiniciar,osea,volver al estado principal,y no lo hace,reconoce el codigo pero sigue la cuenta atras. me podeis ayudar?? Tambien en cada segundo va sonando un pip y al llegar el contador a cero hace otro sonido,pero si en mi codigo,quito el comentario a los tone,en el display me salen caracteres raros...a ver que se puede hacer. dejo el codigo: #include <Keypad.h> #include <LiquidCrystal.h> #define pound 14 #define LED_RED 0 #define LED_GREEN 1 #define KP_ROWS 4 #define KP_COLS 3
unsigned int timerSeconds = 300; // start with 5 minutes on the clock byte password[4]; byte entered[4]; int currentLength = 0; byte i = 0;
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
//Keypad char keys[KP_ROWS][KP_COLS] = { {'1','2','3'}, {'4','5','6'}, {'7','8','9'}, {'*','0','#'}, }; byte rowPins[KP_ROWS] = { 15, 2, 19, 17 }; //connect to the row pinouts of the keypad {18, 2, 14, 16} byte colPins[KP_COLS] = { 16, 14, 18 }; //connect to the column pinouts of the keypad {17, 19, 15} Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, KP_ROWS, KP_COLS);
char key;
//LCD setup void setup() { pinMode(LED_RED, OUTPUT); // sets the digital pin as output pinMode(LED_GREEN, OUTPUT); // sets the digital pin as output lcd.begin(16, 2); lcd.print("Entre codigo: "); lcd.cursor(); lcd.setCursor(6, 1); while (currentLength < 4) { key = keypad.getKey(); if (key != NO_KEY) { lcd.print(key); password[currentLength] = key; currentLength++; lcd.setCursor(currentLength + 6, 1); } else delay(100); // only sample it every 1/10 sec, no need to go apesh!t } lcd.noCursor(); lcd.clear(); lcd.print("A introducido: "); lcd.setCursor(6, 1); lcd.print(password[0],DEC); lcd.print(password[1],DEC); lcd.print(password[2],DEC); lcd.print(password[3],DEC); delay(2500); lcd.clear(); currentLength = 0; }
void loop() { lcd.clear(); lcd.print("Entre codigo: "); lcd.cursor(); key = keypad.getKey(); // get the key once per this loop if (key != NO_KEY) { lcd.setCursor(0, 1); lcd.print(" "); lcd.setCursor(6, 1); while (currentLength < 4) { // here, we take the key that broke us into this "if" statement, instead of discarding it. this also pauses the timer, effectively. if (key != NO_KEY) { // redundant for the first loop, but necessary for every next character lcd.setCursor(currentLength + 5, 1); lcd.print("*"); lcd.setCursor(currentLength + 6, 1); lcd.print(key); entered[currentLength] = key; currentLength++; } else delay(100); // only sample it every 1/10 sec key = keypad.getKey(); // get the key every time "while" loops } if (memcmp(entered,password,4) == 0) { // shortcut to compare an array of bytes, use memcmp(A, B, length), will return 0 if match. lcd.noCursor(); lcd.clear(); lcd.print(" Desarmada "); lcd.setCursor(0, 1); lcd.print("Reseteando Bomba"); delay(2500); // hold that on screen for 2.5 seconds currentLength = 0; } else { lcd.noCursor(); lcd.clear(); lcd.print(" Incorrecto "); lcd.setCursor(0, 1); lcd.print(" Tiempo -0:60"); // Display time penalty if (timerSeconds > 60) timerSeconds -= 0; else timerSeconds = 1; // will trigger BOOM next cycle currentLength = 0; delay(2500); // hold that on screen for 2.5 seconds } } timer(); // prints current time on screen, checks for "go off" time, holds loop for 1 second }
void timer() { lcd.setCursor(0, 1); // sets cursor to 2nd line lcd.print("Tiempo: "); lcd.print(timerSeconds / 60); // integer number of minutes on clock lcd.print(":"); lcd.print(timerSeconds % 60); // mod 60; gives us number of seconds outside of 60sec/min delay(950); // hold us here for 0.950 seconds digitalWrite(LED_GREEN,!digitalRead(LED_GREEN)); // toggle the green LED once a second //tone(9,784, 200); // play bleep for 50ms delay(50); // and there's the rest of that 1 second (not counting LCD delay) timerSeconds--; if (timerSeconds == 0) bombomb(); } void bombomb() { // routine for making ze BOMB GOEZ OFF!!!1 :D lcd.noCursor(); lcd.clear(); lcd.print(" !BoOo0o0o0om! "); //tone(9,110, 200); digitalWrite(LED_RED, HIGH); // sets the red LED on delay(500); // waits half a second //tone(9,110, 200); delay(500); // waits half a second digitalWrite(LED_RED, LOW); // sets the red LED off digitalWrite(LED_GREEN, HIGH); // sets the green LED on //tone(9,110, 200); delay(500); // waits half a second digitalWrite(LED_RED, HIGH); // sets the red LED on digitalWrite(LED_GREEN, LOW); // sets the green LED off //tone(9,110, 200); delay(500); // waits half a second digitalWrite(LED_RED, LOW); // sets the red LED off digitalWrite(LED_GREEN, HIGH); // sets the green LED on //tone(9,110, 200); delay(500); // waits half a second digitalWrite(LED_GREEN, LOW); // sets the green LED off key = NO_KEY; // enter the while() loop, otherwise it'll skip. i could use do { } while();, but I'm lazy. while (key == NO_KEY) { key = keypad.getKey(); if (key == '#') { lcd.clear(); lcd.print("Reseteando Bomba"); delay(2500); // good ole' 2.5 sec delay timerSeconds = 300; // put 5 minutes on the clock // and we break the loop and go back to timer. } else key = NO_KEY; // continue looking for pound key } }
|
|
|
|
|
6
|
Using Arduino / Programming Questions / Re: error compiling
|
on: October 13, 2012, 07:51:18 am
|
|
thanks for your quick response but the tool tells me that there are too many brackets left and I do not do anything. I copied the code of a web arduino and my level is still too low. I could help a little more in the solution? Thanks again and best regards.
|
|
|
|
|
7
|
Using Arduino / Programming Questions / error compiling
|
on: October 13, 2012, 07:30:32 am
|
hi first, sorry for my English. I'm trying to mount a simulated bomb, when compiling I get the error "was not delcared key4 In This scope" Code many times I've looked and can not find the problem. /*Airsoft Bomb Version 1.1Creators: Chase Cooley&&&&&&&&&&&& Joey Meyer*/
#include <Keypad.h> #include <LiquidCrystal.h> #include <Tone.h> #define pound 14 Tone tone1;int Scount = 0; // count seconds int Mcount = 0; // count minutesint Hcount =0; // count hours int Dcount = 0; // count daysint val = 0; long secMillis = 0; // store last time for second addlong interval = 1000; // interval for seconds char password[4];int currentLength = 0; int i = 0;char entered[4]; int ledPin = 3; int ledPin2 = 4;//red lightint ledPin2 = 4; //green light
LiquidCrystal lcd(7,8,10,11,12,13);const byte ROWS = 4; //four rows const byte COLS = 3; //three columnschar keys[ROWS][COLS] = { char keys[ROWS][COLS] = { {'1','2','3'},{'4','5','6'}, {'7','8','9'},{'*','0','#'} }; byte rowPins[ROWS] = {18, 2, 14, 16}; //connect to the row pinouts of the keypadbyte colPins[COLS] = {17, 19, 15}; //connect to the column pinouts of the keypad byte colPins[COLS] = {17, 19, 15};
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); void setup(){ pinMode(ledPin, OUTPUT); // sets the digital pin as outputpinMode(ledPin2, OUTPUT); // sets the digital pin as output tone1.begin(9);lcd.begin(16, 2); Serial.begin(9600);lcd.clear(); lcd.setCursor(0,0);lcd.print("Enter Code: "); while (currentLength < 4){ lcd.setCursor(currentLength + 6, 1);lcd.cursor(); char key = keypad.getKey();key == NO_KEY; if (key != NO_KEY){ lcd.print(key);password[currentLength] = key; currentLength++;delay(200); }} if (currentLength == 4){ lcd.noCursor();lcd.clear(); lcd.home();lcd.print("You've Entered: "); lcd.setCursor(6,1);lcd.print(password[0]); lcd.print(password[1]);lcd.print(password[2]); lcd.print(password[3]);delay(3000); lcd.clear();currentLength = 0; }}
void loop(){ char key2 = keypad.getKey(); // get the keylcd.setCursor(0,0); timer();if (key2 != NO_KEY) {while (key2 == NO_KEY) {key2 = keypad.getKey(); }if (key2 != NO_KEY) {lcd.clear(); lcd.setCursor(0,0);lcd.print("Enter Code: "); while (currentLength < 4){ lcd.setCursor(currentLength + 6, 1);lcd.cursor(); char key2 = keypad.getKey();if (key2 != NO_KEY) {lcd.print(key2); entered[currentLength] = key2;currentLength++; delay(200);lcd.noCursor(); lcd.setCursor(currentLength + 5, 1);lcd.print("*"); lcd.setCursor(currentLength + 6, 1);lcd.cursor(); }} if (currentLength == 4){ if (entered[0] == password[0] && entered[1] == password[1] && entered[2] == password[2] && entered[3] == password[3]){ lcd.noCursor();lcd.clear(); lcd.home();lcd.print(" Defused "); currentLength = 0;delay(2500); lcd.setCursor(0,1);lcd.print("Reset the Bomb"); }else {lcd.noCursor(); lcd.clear();lcd.home(); lcd.print(" Wrong ");lcd.setCursor(0,1); lcd.print(" Add - 1:30 ");if (Mcount < 14) {Mcount = Mcount + 1; }if (Scount < 59) {Scount = Scount + 30; }delay(1500); currentLength = 0;} }} }}
void timer(){ if ( Mcount >= 15 ){ while ( Mcount >= 15){ lcd.noCursor();lcd.clear(); lcd.home();lcd.print(" !BoOm! "); tone1.play(NOTE_A2, 200);digitalWrite(ledPin, HIGH); // sets the LED on tone1.play(NOTE_A2, 200);delay(10); // waits for a second digitalWrite(ledPin, LOW); // sets the LED offtone1.play(NOTE_A2, 200); delay(10); // waits for a seconddigitalWrite(ledPin2, HIGH); // sets the LED on tone1.play(NOTE_A2, 200);delay(10); // waits for a second digitalWrite(ledPin2, LOW); // sets the LED offtone1.play(NOTE_A2, 200); delay(10);// waits for a secondchar key4 = keypad.getKey(); if (key4 != NO_KEY){ while (key4 == NO_KEY){ key4 = keypad.getKey();} if (key4 = '#'){ lcd.clear();lcd.print("Reset the Bomb"); }} }if ( Mcount == 60) // if Mcount is 60 do this operation {//delay (32); // good place to fine tune timing Mcount = 0; // reset McountHcount ++; }if (Hcount> 23) {Dcount++; Hcount = 0; // have to reset Hcount to "0" after 24hrs}
lcd.setCursor (0,1); // sets cursor to 2nd linelcd.print ("Timer: "); lcd.print (Dcount);lcd.print (":"); lcd.print (Hcount);lcd.print (":"); lcd.print (Mcount);lcd.print (":"); lcd.print (Scount); if (Scount >59) // if 60 do this operation{ Mcount ++; // add 1 to McountScount = 0; // reset Scount //delay (58); // changes ms per min} if (Scount < 60) // do this oper. 59 times{ unsigned long currentMillis = millis();//delay (988); // changing by one = 60 ms a min if(currentMillis - secMillis > interval){ tone1.play(NOTE_G5, 200);secMillis = currentMillis; Scount ++; // add 1 to ScountdigitalWrite(ledPin2, HIGH); // sets the LED on delay(10); // waits for a seconddigitalWrite(ledPin2, LOW); // sets the LED off delay(10); // waits for a second} }}
|
|
|
|
|