Witam jestem nowy i dopiero zaczynam przygodę z programowaniem mam wielka prośbę do kolegów.
Mianowicie chciał bym wykonać pilot zdalnego odpalania motopompy spalinowej układ dość prosty włączanie wyłączanie zapłonu grzanie świec ok.30 sekund i załączanie rozrusznika z połączeniem układu dam sobie rade ale napisanie programu to czarna magia prosił bym o pomoc i o wyrozumiałość układ był by oparty na Arduino Nano i Uno odbiornik i nadajnik
RF433Mhz
Trzeba by na początek rozpisać cykl zapłonu i jakie informacje z motopompy jesteś w stanie zebrać ( obroty , poziom paliwa , temperatura silnika , sterowanie przepustnicą , sterowanie ssaniem , itd. ) . Do tego co opisałeś to w zasadzie możesz wykorzystać dzwonek bezprzewodowy i włącznik czasowy .
pompa startuje od z gazem do dechy chodzi mi tylko o trzy przyciski na pilocie on/of drugi grzanie świeć i trzeci rozruch co do rozruchu to jest rożnie jest to stary diesel główna ideą tego pomysłu jest to żeby odpalać pompę z kilku metrów link do pompy
https://www.youtube.com/watch?v=fX922qouFzc
jaki zasięg ? do 10m to można by smyrfona i bluetootha użyć a w terenie otwartym może i ze 30 m
Myślałem nad bluetooth bo na to potrafię napisać program jakiś prosty ale telefon plus woda w parze nie idzie a najtańsze arduino kosz około 7zł zasiąg jaki mnie interesuje to jakieś 50m
bardzo bym prosił kolegów gdyby ktoś miał troszkę czasu i ochoty napisania takiego krótkiego programu do sterowania trzema przyciskami był bym bardzo wdzięczny
korzystałem z tego kodu do sterowania jednym ledem ale nie potrafię go rozbudować żeby działały trzy
Kod:
dla nadajnika
#include <VirtualWire.h>
int guzik=2;
void setup()
{
pinMode(guzik, INPUT_PULLUP);
vw_set_tx_pin(9);
vw_setup(2000); // Bits per sec
}
void loop()
{
char *msg;
digitalWrite(13, true);
if (digitalRead (guzik)==LOW) {msg="on"; }
else {msg="off"; } ;
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Wait until the whole message is gone
digitalWrite(13, false);
delay(200);
}
dla odbiornika
#include <VirtualWire.h>
int LED=2;
boolean LEDON=false;
char stan;
void setup()
{
Serial.begin(9600);
pinMode (LED,OUTPUT);
vw_setup(2000);
vw_set_rx_pin(4);
vw_rx_start();
}
void loop()
{
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
if (vw_get_message(buf, &buflen))
{
int i;
String stan;
for (i = 0; i < buflen; i++)
{
stan +=char(buf[i]);
}
if ( stan =="on") {
LEDON=!LEDON;
digitalWrite (LED, LEDON);
delay(2000);
digitalWrite (LED,LEDON);
delay(50);
}
} }
Jeżeli działa to trzeba powielić
Kod:
// dla nadajnika
#include <VirtualWire.h>
int guzik1=2;
int guzik2=3;
int guzik3=4;
void setup()
{
pinMode(guzik1, INPUT_PULLUP);
pinMode(guzik2, INPUT_PULLUP);
pinMode(guzik3, INPUT_PULLUP);
vw_set_tx_pin(9);
vw_setup(2000); // Bits per sec
}
void loop()
{
char *msg;
digitalWrite(13, true);
if (digitalRead (guzik1)==LOW) {msg="on1"; }
else {msg="off1"; } ;
if (digitalRead (guzik2)==LOW) {msg="on2"; }
else {msg="off2"; } ;
if (digitalRead (guzik3)==LOW) {msg="on3"; }
else {msg="off3"; } ;
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Wait until the whole message is gone
digitalWrite(13, false);
delay(200);
}
// dla odbiornika
#include <VirtualWire.h>
int LED1=2;
int LED2=3;
int LED3=4;
boolean LEDON1 = false;
boolean LEDON2 = false;
boolean LEDON3 = false;
char stan;
void setup()
{
Serial.begin(9600);
pinMode (LED1,OUTPUT);
pinMode (LED2,OUTPUT);
pinMode (LED3,OUTPUT);
vw_setup(2000);
vw_set_rx_pin(4);
vw_rx_start();
}
void loop()
{
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
if (vw_get_message(buf, &buflen))
{
int i;
String stan;
for (i = 0; i < buflen; i++)
{
stan +=char(buf[i]);
}
if ( stan =="on1") {
LEDON1=!LEDON1;
digitalWrite (LED1, LEDON1);
delay(2000);
digitalWrite (LED1,LEDON1);
delay(50);
}
if ( stan =="on2") {
LEDON1=!LEDON1;
digitalWrite (LED2, LEDON2);
delay(2000);
digitalWrite (LED2,LEDON2);
delay(50);
}
if ( stan =="on3") {
LEDON1=!LEDON1;
digitalWrite (LED3, LEDON3);
delay(2000);
digitalWrite (LED3,LEDON3);
delay(50);
}
} }
niestety nie chce zagadać już próbowałem powielić kod i nic jak się powieli nie chce się zapalić żadna
He dałem się złapać zobacz ten kod jest problem bo wysyła nonstop coś a ma wysłać tylko jak naciśniesz
Kod:
// dla nadajnika
#include <VirtualWire.h>
int guzik1=2;
int guzik2=3;
int guzik3=4;
char *msg;
void setup()
{
pinMode(guzik1, INPUT_PULLUP);
pinMode(guzik2, INPUT_PULLUP);
pinMode(guzik3, INPUT_PULLUP);
vw_set_tx_pin(9);
vw_setup(2000); // Bits per sec
}
void loop()
{
if (digitalRead (guzik1)==LOW){msg="ona";sendtx();}
if (digitalRead (guzik2)==LOW){msg="onb";sendtx();}
if (digitalRead (guzik3)==LOW){msg="onc";sendtx();}
}
void sendtx(void){
digitalWrite(13, true);
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Wait until the whole message is gone
digitalWrite(13, false);
delay(200);
msg="off";
}
// dla odbiornika
#include <VirtualWire.h>
int LED1=2;
int LED2=3;
int LED3=4;
boolean LEDON1 = false;
boolean LEDON2 = false;
boolean LEDON3 = false;
char stan;
void setup()
{
Serial.begin(9600);
pinMode (LED1,OUTPUT);
pinMode (LED2,OUTPUT);
pinMode (LED3,OUTPUT);
vw_setup(2000);
vw_set_rx_pin(4);
vw_rx_start();
}
void loop()
{
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
if (vw_get_message(buf, &buflen))
{
int i;
String stan;
for (i = 0; i < buflen; i++)
{
stan +=char(buf[i]);
}
if ( stan =="ona") {
LEDON1=!LEDON1;
digitalWrite (LED1, LEDON1);
delay(2000);
digitalWrite (LED1,LEDON1);
delay(50);
}
if ( stan =="onb") {
LEDON2=!LEDON2;
digitalWrite (LED2, LEDON2);
delay(2000);
digitalWrite (LED2,LEDON2);
delay(50);
}
if ( stan =="onc") {
LEDON3=!LEDON3;
digitalWrite (LED3, LEDON3);
delay(2000);
digitalWrite (LED3,LEDON3);
delay(50);
}
} }