PLEASE HELP!
az elmúlt egy hónapban lassan kihordok egy agyvérzést lábon a millis() alkalmazásának kudarcai miatt
akárhogy próbálkozok sehogy se sikerül rávenni a helyes működésre az eszközeimet, mert azóta már többet is próbáltam ahogy sorra érkeztek az újabbak az ebay-ről
program arduino 1.0.6
AVR ISP mkII
eszközök:
DCcEle DCcduino
Arduino UNO R3 ATmega328P CH340 USB Development Board
Nano V3.0 ATmega328P 5V 16M Micro-controller Board CH340
tisztában vagyok vele, hogy ezek mint klónok, de nem gondolnám, vagyis már nem tudom, hogy emiatt ne sikerülne a feladat
az alábbi kód lett feltöltve, a 12-es láb GND-vel való összezárása után a led világít, de sosem alszik el!!!
más kódok esetén is hiába
amire tudok gondolni esetleg, hogy a fő feltételen belül egy másik feltételbe kéne az időt elbírálni, így esetleg nem mindegy hol adom meg a kezdő időt, de bárhová pakoltam nem sikerült
Kód: Egész kijelölése
int szamlalo=0;
void setup()
{
pinMode(13,OUTPUT); //13-as lábon LED van
pinMode(12,INPUT); //12. lab es GND kozt gomb
digitalWrite(12,HIGH); //12-es lab belso felhuzoellenallas felhuz
}
void loop() {
if (digitalRead(12) == LOW) { //ha a 12-es labon a gomb nyomva (GND-re megy)
szamlalo=millis()+1000; //a szamlalo a millis ertek (azaz MOST)+ 1 secundum legyen
if (szamlalo>millis()) { //ha nem erte el a millis() msec szamlalo a bellitott idot
digitalWrite(13,HIGH); // a D13 LED vilagitson
}
else { //kulonben
digitalWrite(13,LOW); //D13 kikapcsolva
}
}
}
Robert a te álltal írt kód annyiban lett csak módosítva, hogy az input output nagybetűs lett illetve a void került a setup és loop elé, mert már annyira lefárasztott, hogy nem is az eredeti elgondolásom szerinti kódba próbáltam meg integrálni a millis alkalmazását, hanem csak egyszerűen képes-e arra egy egyszerű programocskában amit kell csinálnia, de így se sikerült
ez lenne a kész program már ha menne végre (a megszakítás még kicsit kínai, hogyan kéne kinéznie pontosan)Robert írta:Valami ilyesmi kód kell, ha számlálózni - időzíteni akarsz:
(az utasitasok megertesehez kell a Arduino Notebook illetve az arduino.cc oldalon a referenciatáblázat)
Kód: Egész kijelölése
int szamlalo=0; setup() { pinMode(13,output); //13-as lábon LED van pinMode(12,input); //12. lab es GND kozt gomb digitalWrite(12,HIGH); //12-es lab belso felhuzoellenallas felhuz } loop() { if (digitalRead(12) == LOW) { //ha a 12-es labon a gomb nyomva (GND-re megy) szamlalo=millis()+1000; //a szamlalo a millis ertek (azaz MOST)+ 1 secundum legyen if (szamlalo>millis()) { //ha nem erte el a millis() msec szamlalo a bellitott idot digitalWrite(13,HIGH); // a D13 LED vilagitson } else { //kulonben digitalWrite(13,LOW); //D13 kikapcsolva } }
Kód: Egész kijelölése
//változók
int spindle = 4; // főorsó szivattyú kimenet
int error = 5; // hiba kimenet
// int water = 2; // vízáram szenzor bemenet INT0 D2 lábon
int start = 9; // start jel bemenet
int work = 13; // start/utánfutás jelzés led
int utanfutas_jel = 0; //utánfutás engedélyezése
//segéd változók
long varakozas_t, utanfutas_t, start_t;
//időzítések
int varakozas = 5; //start utáni várakozás (mp)
int utanfutas = 5; //leállás utánfutás (perc)
// megszakítás jel
volatile int error_sign = HIGH;
//--------------------------------------------------------------
void setup() {
//időzítés meghatározás
varakozas_t = varakozas*1000;
utanfutas_t = utanfutas*60000;
//I/O meghatározás
pinMode(spindle, OUTPUT); //szivattyú kimenet
pinMode(error, OUTPUT); //hibajel kimenet
// pinMode(water, INPUT); //vízáram szenzor bemenet
pinMode(start, INPUT); //startjel bemenet
pinMode(work, OUTPUT); //LED visszajelzés
Serial.begin(9600); //soros kommunikáció
//indulási alap állapotok
digitalWrite(start, HIGH); //felhúzó ellenállás bekapcsol
// relé és led alap állapot
digitalWrite(spindle, HIGH); //relé GND-re húz be
digitalWrite(error, HIGH); //relé GND-re húz be
digitalWrite(work, LOW); //üzemjelzés led kikapcsolva
// megszakítás beállítása D2 lábon
attachInterrupt(0, blink, RISING); // alapból magas, menet közben GND-re húz, ha megáll a víz ismét magasra váltásra megszakít
// idő alap beállítás
start_t = millis();
}
//--------------------------------------------------------------
void loop()
{
// Serial.println("STOP");
if (digitalRead(start == LOW)) //ha van startjel
{
// Serial.println(uzem);
start_t = millis(); // kezdő idő módosítása
uzem();
}
else if (digitalRead (start == HIGH && utanfutas_jel == HIGH)) //startjel nincs ÉS van utánfutásjel
{
// Serial.println(utanfutas);
start_t = millis(); // kezdő idő módosítása
utanfutas_uzem();
}
else
{
digitalWrite(spindle, HIGH); //szivattyú leállítás
digitalWrite(work, LOW); //led kikapcsol
utanfutas_jel = LOW; //utánfutás kikapcsolása
}
}
//--------------------------------------------------------------
//alprogram részek
void uzem () //üzem
{
digitalWrite(spindle, LOW); // szivattyú indítás
digitalWrite(work, HIGH); //LED bekapcsolás
utanfutas_jel = HIGH;
}
void utanfutas_uzem() //utánfutas
{
if(digitalRead(start)== LOW && start_t + utanfutas_t >= millis())
{
// Serial.println("UTANFUTAS"); //utánfutás kiírása
digitalWrite(spindle, LOW); //szivattyú bekapcsolás (bekapcsolva marad)
villog();
}
utanfutas_jel = LOW; //utánfutás kikapcsolása
}
void villog() //utánfutas jelzés
{
digitalWrite(work, HIGH); //led be
delay(100); // várakozás 100ms
digitalWrite(work, LOW); //led ki
delay(100); // várakozás 100ms
}
//--------------------------------------------------------------
//megszakítás program része
void blink () //megszakítás
{
if(start_t + varakozas_t < millis() && (start == LOW)) //ha az időzítés kissebb mint az indulás + várakozás ÉS van start jel akkor:
{
digitalWrite(error, LOW); // error relé behúz
delay(1000);
digitalWrite(error, HIGH); // error vissza áll alaphelyzetbe
}
/*
else
{
digitalWrite(error, HIGH); // error relé elenged
}
*/
}