PDA

Επιστροφή στο Forum : Κατασκευή με arduino



kostas_90210
25-03-17, 21:30
Αρχάριος.... άσχετος... όπως και να το πει κανείς σίγουρα δεν έχω γνώσεις ούτε από ηλεκτρονικά, ούτε από προγραμματισμό...
Έχω φτιάξει μια κατασκευή με arduino mega και μια απ όσα θέλω είναι να διαβάζει την τάση από 2 μπαταρίες (24V σύνδεση) και στα 24,2V να δίνει εντολή σε έναν ρελε να κλείνει και όταν φτάσει στα 26 να τον ανοίγει ξανά. Εδώ είναι και το πρόβλημα μου. Σε ότι δοκιμή και αν έκανα, είτε με έτοιμο διαιρέτη τάσης, είτε με δική μου κατασκευή (2 αντιστάσεις, 10Κ + 100Κ) το αποτέλεσμα πάντα ήταν η τάση που διαβάζει να παίζει +- 1V συνέχεια. Όπως καταλαβαίνετε αυτό δεν βοηθάει καθόλου στην σωστή λειτουργία.

Μήπως υπάρχει κάποιο άλλο κύκλωμα που όταν έχω αυτή την τάση που θέλω να δίνει κάποιο σήμα στα pin του arduino ώστε να ανοίγω και να κλείνω τον ρελε (στο μυαλό μου είναι ίσως κάποια zener αλλά δεν κατάφερα να βρω κάτι σχετικό)?

Inferno
25-03-17, 23:00
Δεν ειμαι σίγουρος ότι εχω καταλάβει ακριβώς τι θες να κάνεις. Φαντάζομαι ότι τον διαιρέτη τάσης τον έχεις για να διαβάζεις τα 24V με το arduino (?).
Επίσης μπορείς να δώσεις ένα κομμάτι του κώδικα να δούμε τι παίζει?
Τι εύρος τάσεων θες να διαβάζεις?

kostas_90210
25-03-17, 23:22
Ναι να διαβάζει ως και 30. Θέλω στα 24,2 περίπου να κλείνει ο ρελες και να ανοίγει στα 26V.
Το πρόβλημα είναι ότι δεν έχω σταθερή μέτρηση των V. Ανα μερικά δεύτερα μπορεί να κατεβεί και 1V η να ανέβει. Το έχω δοκιμάσει και σε arduino uno και σε mega.



int analogInput =A12;
float vout = 0.0;
float vin = 0.0;
float R1 = 99800.0;

float R2 = 9970.0;
int value = 0;


void setup() {


}


void loop() {
value = analogRead(analogInput);
vout = (value * 5.0) / 1023.0;
vin = vout / (R2/(R1+R2));

if (vin<0.09) {
vin=0.0;

}

andreasmon
25-03-17, 23:44
καταρχήν τροφοδοτείς τον mega με σταθερή τάση 5V;Μήπως έχεις βάλει κανά σταθεροποιητή lm7805 και δίνεις 24v εώς 26v στην είσοδό του!!!
Τα ρελέ άμα τα έχεις συνδέσει τα οδηγείς μέσω τρανζίστορ ή απευθείας!!

Έχω και εγώ φτιάξει ίδιο κύκλωμα,με σχεδόν ίδιο κώδικα με τον δικό σου,για έλεγχο τάσης σε φωτοβολταικό εδώ και 2 χρόνια και δουλεύει μια χαρά.

δοκίμασε τιμές για R1, R2
float R1 = 100000.0; // resistance of R1 (100K)
float R2 = 10000.0; // resistance of R2 (10K)

πρόσθεσε στο τέλος

if (vin>24.20) {
digitalWrite(relePin, HIGH);
}

έχεις δηλώσει εννοείται στην αρχή
const int relePin= 10; // όπου 10 έξοδος ψηφιακή για οδήγηση του ρελέ

και μέσα στο setup() αυτό
pinMode(relePin, OUTPUT);

και τσέκαρε ανοχές.Aν π.χ ενεργοποιείται στα 25v και όχι στα 24.20v(0,80 βολτ πιο πάνω) που έχεις δηλώσει στο κώδικά σου,διόρθωσε το 24.20v σε 23.40v (24,2-0,80) και είσαι έτοιμος.
Το ίδιο ισχύει και για ανοχές στα 26v.

Εμένα μετά από τις διορθώσεις δούλευε ρολόι.

MacGyver
25-03-17, 23:56
- Οι τιμές R1 = 99800.0 και R2 = 9970.0 φαντάζομαι μπήκαν μετά απο μέτρηση και όχι δοκιμαστικά!
- Βάλε ένα delay(1000); στο τέλος του loop.
- Δοκίμασε το μετρώντας μία απλή μπαταρία 9v, έξω από φόρτιση.

kostas_90210
26-03-17, 00:03
καταρχήν τροφοδοτείς τον mega με σταθερή τάση 5V;Μήπως έχεις βάλει κανά σταθεροποιητή lm7805 και δίνεις 24v εώς 26v στην είσοδό του!!!
Τα ρελέ άμα τα έχεις συνδέσει τα οδηγείς μέσω τρανζίστορ ή απευθείας!!

Έχω και εγώ φτιάξει ίδιο κύκλωμα,με σχεδόν ίδιο κώδικα με τον δικό σου,για έλεγχο τάσης σε φωτοβολταικό εδώ και 2 χρόνια και δουλεύει μια χαρά.

δοκίμασε τιμές για R1, R2
float R1 = 100000.0; // resistance of R1 (100K)
float R2 = 10000.0; // resistance of R2 (10K)

πρόσθεσε στο τέλος

if (vin>24.20) {
digitalWrite(relePin, HIGH);
}

έχεις δηλώσει εννοείται στην αρχή
const int relePin= 10; // όπου 10 έξοδος ψηφιακή για οδήγηση του ρελέ

και μέσα στο setup() αυτό
pinMode(relePin, OUTPUT);

και τσέκαρε ανοχές.Aν π.χ ενεργοποιείται στα 25v και όχι στα 24.20v(0,80 βολτ πιο πάνω) που έχεις δηλώσει στο κώδικά σου,διόρθωσε το 24.20v σε 23.40v (24,2-0,80) και είσαι έτοιμος.
Το ίδιο ισχύει και για ανοχές στα 26v.

Εμένα μετά από τις διορθώσεις δούλευε ρολόι.

Ναι 7805 που στην είσοδο του έχω 12V.
Για τα ρελε έχω άλλο 7805.
Το πρόβλημα δεν είναι ότι δείχνει απλά λάθος τάση... αυτό θα το διόρθωνα αλλάζοντας τις τιμές των R . Το πρόβλημα είναι ότι διαβάζει διαφορετική τάση ανα λίγα δευτερόλεπτα. Εκεί που δείχνει 25 και είναι και τα σωστά, ξαφνικά κατεβαίνει στα 23,8.. 24,5... η μπορεί να πάει 25,8 και μετά να σταθεροποιηθεί ξανά στα 25 για λίγο.
Όλο αυτό το θέλω για να ανοίγω και να κλείνω το inverter απ τα φωτοβολταϊκά στις συγκεκριμένες τάσης.

kostas_90210
26-03-17, 00:10
- Οι τιμές R1 = 99800.0 και R2 = 9970.0 φαντάζομαι μπήκαν μετά απο μέτρηση και όχι δοκιμαστικά!
- Βάλε ένα delay(1000); στο τέλος του loop.
- Δοκίμασε το μετρώντας μία απλή μπαταρία 9v, έξω από φόρτιση.

Ναι τις μέτρησα και έβαλα αυτές τις τιμές. Έβαλα και delay(1000); και πυκνωτή δοκίμασα στον διαιρέτη τάσης για να μη χάνει την τάση απότομα... έκανα πολλά πειράματα αλλά δεν κατάφερα τπτ..
εννοείται με πολυμετρο είναι σταθερή η ένδειξη.
Δοκίμασα και από τροφοδοτικό υπολογιστή αλλά πάλι το ίδιο.

andreasmon
26-03-17, 00:17
περίεργο,μήπως έχεις φορτία συνδεδεμένα στις μπαταρίες,Άλλαξε αναλογική είσοδο α12 και βάλε μία άλλη,Τέλος αν δεν λυθεί δοκίμασε άλλο αρντουίνο.

MacGyver
26-03-17, 00:24
- Άλλαξε το πιν Α12 σε ένα άλλο ελεύθερο.
- Οι δύο αντιστάσεις και η γη τους προς το arduino, είναι σταθερά συνδεδεμένα;

kostas_90210
26-03-17, 00:31
Έχω δοκιμάσει και σε μπαταρίες 24V και σε τροφοδοτικό υπολογιστή 12V με uno και με mega, με ετοιμο διαιρετη αλλα και με αυτο που εφτιαξα εγω... Το ίδιο αποτελέσματα... μια πάνω, μια κάτω. Μήπως κάποιο ξεχωριστό κύκλωμα που όταν φτάνει έστω και περίπου σε αυτές τις τιμές V να δίνει κάποιο σήμα στο arduino ώστε να κάνει αυτό που θέλω? Ότι άλλο αισθητήρα έχω επάνω λειτουργεί κανονικά, μόνο εκεί κόλλησα.
6919669197

Fire Doger
26-03-17, 01:10
Το - της μπαταρίας με το GND του arduino τα έχεις συνδεδεμένα, έτσι?

kostas_90210
26-03-17, 01:24
Νομίζω σας ζάλισα αρκετά... μου έβαλε όμως σκέψης ο MacGyver (http://www.hlektronika.gr/forum/member.php?u=38576) με την γη (-)...



όλα τα καλώδια που χρησιμοποιώ είτε για εντολές, είτε για να δώσω ρεύμα στα 7812- 09 – 05 είναι σαν το παρακάτω (http://www.ebay.com/itm/192041623664?_trksid=p2060353.m2749.l2649&var=491808186415&ssPageName=STRK%3AMEBIDX%3AIT). Μόλις άρχισα να δίνω με άλλο καλωδιo άρχισε να έχει μικρότερο ανεβοκατέβασμα. Σίγουρα θα αλλάξω όλα τα καλώδια που δίνουν ρεύμα προς τους σταθεροποιητές αλλά και προς το κάθε εξάρτημα. Για τις εντολές η για αισθητήρες πιστεύετε ότι πρέπει να τα αλλάξω και εκεί?

kostas_90210
26-03-17, 01:29
Το - της μπαταρίας με το GND του arduino τα έχεις συνδεδεμένα, έτσι?

Ναι μαζί τα έχω αλλά μόλις έκανα μέτρηση και από αρνητικό σε αρνητικό τραβάει κάπου στα 80 mA. Όπως είπα και παραπάνω θα αλλάξω όλα τα καλώδια που είναι για ρεύμα. Πιστεύω να είναι αυτό...

alefgr
26-03-17, 22:58
Κάποιες σκέψεις.

Υποθέτω ότι σαν τάση αναφοράς για το ADC έχεις τα 5 volts του επεξεργαστή και το pin 21 το έχεις την τάση των 5 volts. Στον κώδικα που έδωσες για δώσε στο setup() και την εντολή:


analogReference(DEFAULT);

Παλιά όταν πρωτοασχολήθηκα με το arduino, όταν ξεχνούσα να βάλω αυτή την εντολή, είχα πολλά προβλήματα με μετρήσεις σε αναλογικές τάσεις.

kostas_90210
28-03-17, 02:04
Το πρόβλημα λύθηκε με αρκετά μεγάλη επιτυχία θα έλεγα. Άλλαξα όλα τα καλώδια ρεύματος με μεγαλύτερα και σταμάτησε αυτό το τρελό ανεβοκατέβασμα... 6 mV ανεβοκατεβαίνει τώρα (θα το υποστώ). Με την εντολή του alefgr (http://www.hlektronika.gr/forum/member.php?u=54723) είναι πλέον στην σωστή μέτρηση χωρίς πολλά πειράγματα στον κώδικα.
Σας ευχαριστώ όλους!!! :001_smile:

SunsetZone
29-03-17, 23:31
Καλησπέρα σας,
πρώτη φορά γράφω στο φόρουμ και συγχωρέστε μου πιθανά λάθη.
Με ενδιαφέρει να μάθω κάποια βασικά για τα arduino (http://www.hlektronika.gr/forum/showthread.php?t=88623) Θέλω να ξεκινήσω από το 0 της γνώσης, δεν ξέρω πως και τι κάνει, πως γίνεται.
Έψαξα σε διάφορα site αλλά όλοι γράφουν πράγματα που ένας που δεν έχει ασχοληθεί δεν μπορεί να τα καταλάβει.

Αν υποθέσουμε ότι αγοράζω ένα arduino....
http://www.ebay.com/itm/UNO-R3-Rev3-328-ATMEGA328P-Compatible-Board-for-Arduino-Free-Dupont-wire-USB/222423395721?_trksid=p2047675.c100005.m1851&_trkparms=aid%3D222007%26algo%3DSIC.MBE%26ao%3D2%2 6asc%3D40656%26meid%3Dbd615f281d3146808a0f155dcd7a 2d69%26pid%3D100005%26rk%3D6%26rkt%3D6%26sd%3D2321 66876215
Τι το κάνω;;;; πως το προγραμματίζω να κάνει αφού δεν ξέρω; Απαντήσεις δεν βρήκα.
Να σας πω τι θέλω να κάνει, θέλω να το χρησιμοποιήσω ως χρονοδιακόπτη, πχ να κάνει έναρξη στις 06:00 και να σβήνει στις 20:00. Αυτό βέβαια το κάνω και με έναν απλό χρονοδιακόπτη 12 ή 220v.
Το ζήτημα είναι ότι θέλω να μπορώ να ρυθμίσω την αυτόματη μεταβολή της έναρξης, δηλ κάθε μέρα για πχ 30 ημέρες να ξεκινά 2 λεπτά νωρίτερα. Δηλ σήμερα 06:00 αύριο 05:58... μεθεύριο 05:56 κλπ.
Αυτό να μπορώ να το κάνω και στην ώρα του σβησίματος αν χρειαστεί.
Ακόμη θα ήθελα αν γίνεται να κάνει το εξής, σε μια καθορισμένη ώρα να αρχίζει (σε ρυθμιζόμενη διάρκεια) να ανεβάζει πολύ αργά μια μικρή τάση, πχ από 1 έως 12V και το αντίθετο

Ας πούμε ότι γράφεται ο κώδικας και φορτώνεται, μετά με τι θα γίνεται ο χειρισμός τους θα πρέπει να είναι συνδεμένο με κομπιούτερ; Υπάρχει τρόπος χειρισμού με κάποια μπουτόν; είναι δυνατόν αυτά τα στοιχεία να φαίνονται σε κάποια μικρή οθόνη display;

Δεν ξέρω αν κάποιος έχει την πρόθεση και τον χρόνο να απαντήσει,

Ευχαριστώ.

Fire Doger
30-03-17, 01:26
Αν θέλεις να ξεκινήσεις απ' το 0 αυτό που θες να κάνεις θα μπορείς να το κάνεις σε μερικούς μήνες. (Ανάλογα πόσο γρήγορα μαθαίνεις)

Αρχικά μαθαίνεις λίγη C. Τι είναι μεταβλητές, τι είναι "if" τι είναι μια επανάληψη κλπ...
Μετά μαθαίνεις λίγο μΕ τα βασικά, τι είναι, πως λειτουργεί κλπ...
Μετά σιγά σιγά προσθέτεις πάνω σε αυτά που ξέρεις για να μπορείς να κάνεις τα προτζεκτάκια...
Με τον καιρό θα βελτιωθείς αλλά πολύ δύσκολα να πας σε κάτι άλλο πέρα από arduino.

Το arduino είναι ένας μικροΕλεγκτής, έχει Rom, Ram και άλλα διάφορα. Σκοπός των μΕ είναι να του περάσεις το πρόγραμμα μια φορά και μόλις το τροφοδοτείς με οποιοδήποτε τρόπο θα κάνει ότι λέει το πρόγραμμα. Κανονικά θέλεις καλές γνώσεις για να γράψεις κώδικα και εργαλεία για να το περάσεις αλλά το arduino έχει άπειρες βιβλιοθήκες και μπορείς να κάνεις κάτι με το 1/10 των γνώσεων και έχει τα "εργαλεία" για να το φορτώσεις πάνω του, μόνο usb θέλεις και τον compiler στον οποίο γράφεις το πρόγραμμα.

Βέβαια όλα τα προβλήματα που ανέφερες δεν μπορεί να τα λύσει μόνο του. Για τις ημέρες θέλεις και ένα RTC (Real Time Clock) τα οποία είναι IC για αυτήν την δουλειά. έχει πολύ φτηνά έτοιμα πλακετάκια στο ebay.

Για τον χειρισμό μπορείς από μπουτόν μέχρι wifi και app στο κινητό. Αν ρυθμίσεις τον έλεγχο μέσω σειριακής τότε ναι θα χρειάζεται υπολογιστή.
Οθόνες πάρα πολλές, χαρακτήρων, γραφικών, αφής, μονόχρωμες, έγχρωμες (HDMI και τέτοια δεν μπορεί να χειριστεί).

Δεν βλέπω τον λόγο να μην βάλεις χρονοδιακόπτη, αν μόνο αυτή η εφαρμογή είναι ο σκοπός σου θα παιδευτείς αρκετά μέχρι να το κάνεις.

alefgr
30-03-17, 04:16
Αν υποθέσουμε ότι αγοράζω ένα arduino....
http://www.ebay.com/itm/UNO-R3-Rev3-328-ATMEGA328P-Compatible-Board-for-Arduino-Free-Dupont-wire-USB/222423395721?_trksid=p2047675.c100005.m1851&_trkparms=aid%3D222007%26algo%3DSIC.MBE%26ao%3D2%2 6asc%3D40656%26meid%3Dbd615f281d3146808a0f155dcd7a 2d69%26pid%3D100005%26rk%3D6%26rkt%3D6%26sd%3D2321 66876215
Τι το κάνω;;;; πως το προγραμματίζω να κάνει αφού δεν ξέρω; Απαντήσεις δεν βρήκα.
Να σας πω τι θέλω να κάνει, θέλω να το χρησιμοποιήσω ως χρονοδιακόπτη, πχ να κάνει έναρξη στις 06:00 και να σβήνει στις 20:00. Αυτό βέβαια το κάνω και με έναν απλό χρονοδιακόπτη 12 ή 220v.
Το ζήτημα είναι ότι θέλω να μπορώ να ρυθμίσω την αυτόματη μεταβολή της έναρξης, δηλ κάθε μέρα για πχ 30 ημέρες να ξεκινά 2 λεπτά νωρίτερα. Δηλ σήμερα 06:00 αύριο 05:58... μεθεύριο 05:56 κλπ.
Αυτό να μπορώ να το κάνω και στην ώρα του σβησίματος αν χρειαστεί.
Ακόμη θα ήθελα αν γίνεται να κάνει το εξής, σε μια καθορισμένη ώρα να αρχίζει (σε ρυθμιζόμενη διάρκεια) να ανεβάζει πολύ αργά μια μικρή τάση, πχ από 1 έως 12V και το αντίθετο

Ας πούμε ότι γράφεται ο κώδικας και φορτώνεται, μετά με τι θα γίνεται ο χειρισμός τους θα πρέπει να είναι συνδεμένο με κομπιούτερ; Υπάρχει τρόπος χειρισμού με κάποια μπουτόν; είναι δυνατόν αυτά τα στοιχεία να φαίνονται σε κάποια μικρή οθόνη display;

Μην περιμένεις ότι με το που θα πάρεις το Arduino στα χέρια σου θα μπορέσεις να κάνεις αμέσως αυτά που περιγράφεις. Όπως όταν πρωτοπήγες στο σχολείο ξεκίνησες από το Άλφα, έτσι και με την γλώσσα C και με τους μικροεπεξεργαστές, θα πρέπει να ξεκινήσεις από την αρχή.

Το πρόγραμμα που συνοδεύει το arduino έχει από μόνο του μικρά σκετσάκια για να κάνεις τα πρώτα βήματα. Εκτός από το arduino, καλό είναι να παραγγείλεις και ένα breadboard μαζί με καλώδια σύνδεσης ή τζαμπεράκια, κάποια LEDs μαζί με κάποιες αντιστάσεις, για να μπορείς επάνω σε αυτό να υλοποιείς τις πρώτες σου απόπειρες στον κώδικα των μικροεπεξεργαστών.

Και να θυμάσαι πως κανείς δεν γεννήθηκε προγραμματιστής. Όλοι όσοι ασχοληθήκαμε με τον προγραμματισμό, το κάναμε στην αρχή από περιέργεια και σιγά-σιγά ήρθε και το πάθος για δημιουργικότητα...

Fubar.gr
30-03-17, 09:56
Είδα πρόσφατα στο Facebook σεμινάρια για Arduino. http://korelko.gr/seminario/arduino-robotiki/

Δεν διευκρινίζει αν είναι δωρεάν ή όχι, αλλά φαίνεται ενδιαφέρον.

Fire Doger
30-03-17, 11:19
https://www.youtube.com/watch?v=e6fXKTEQuMI

nkarama
30-03-17, 14:58
Εχει και arduino day, το Σάββατο. ελέυθερη είσοδος για όλους.

Μπορείς να δεις που και ποιος διοργανώνει μια τέτοια στο site του arduino.
Πληροφοριακά (και μόνο!) το τμήμα της IEEE του ΠΑ.ΠΕΙ. σε συνεργασία με το The Cube Athens διοργανώνουν και φέτος Arduino day στις εγκαταστάσεις του the Cube στο κέντρο.
Η φώτο είναι απο τον Μιχάλη Βασιλάκη του Ardumotive απο εκδήλωση του ΠΑ.ΠΕΙ.
το κοντινότερο στην Καρδίτσα, απο ότι βλέπω είναι στην Καλαμπάκα... https://day.arduino.cc/#/

kostas_90210
07-05-17, 12:58
Κάνω την ερώτηση εδώ για να μην ανοίξω άλλο θέμα.
Ο κώδικας για τα rf που έχει ως παράδειγμα εδώ
http://www.instructables.com/id/RF-315433-MHz-Transmitter-receiver-Module-and-Ardu/
λειτουργεί άψογα όταν είναι μόνος του.
Όταν προσπαθώ να τον προσθέσω τροποποιημένο μέσα σε αυτόν που έχω φτιάξει, ναι μεν τον περνάει αλλά κολλάνε όλα. Δηλαδή όταν είναι να στείλει το tr παγώνει η οθόνη, δεν λειτουργεί το πληκτρολόγιο... νεκρώνουν όλα.

Kernel Panic
07-05-17, 20:45
Κώστα ένα σου λέω, μας έχουν τελειώσει οι δάφνες!!!
Πρέπει να βρεθεί άλλος τρόπος να δούμε που έχεις κάνει την μ@κι@

kostas_90210
07-05-17, 20:52
Κώστα ένα σου λέω, μας έχουν τελειώσει οι δάφνες!!!
Πρέπει να βρεθεί άλλος τρόπος να δούμε που έχεις κάνει την μ@κι@

Τι τρόπο εννοείς? Με μπερδεύεις λίγο... :)

info@kalarakis.com
07-05-17, 21:27
Εννοει οτι δεν ειναι η πυθια για να μαντεψει τι προβλημα εχει ο δικο σου κωδικας
Βαλε το κωδικα σου και πες το σημειο που εχεις πειραξει.
Βασικα οσο περισσοτερο βοηθησεις να καταλαβουν οι λοιποι το προβλημα σου τοσο καλυτερα θα σε βοηθησουν
Εσυ μπορει να ξερεις λεπτομεριες οι υπολοιποι ομως οχι

kostas_90210
07-05-17, 21:53
Ναι έχετε δίκιο, δικό μου λάθος. Συγνώμη παιδιά!


Όταν βάζω τον κώδικα

vw_set_ptt_inverted(true); //
vw_set_tx_pin(2);
vw_setup(400);// speed of data transfer Kbps


μέσα στο δικό μου sketch και χωρίς να έχω προχωρήσει στο void loop()
δεν δείχνει η lcd και δεν λειτουργεί τπτ.


Αν όμως διαγράψω το
vw_setup(400);// speed of data transfer Kbps
τότε λειτουργούν όλα εκτός το rf είτε βάλω εντολή στο void loop() είτε όχι.


#include <LiquidCrystal.h>
#include <Keypad.h>
#include <DS3231.h>
#include <Password.h>
#include <VirtualWire.h>


char *controller;


const int analogIn = A13;


int i=0;
int b=0;
// int sensor1 = A15;
// int sensor2 = A14;
int pausa = 1;
int x =0;
int y =0;
int z =0;
char tecla;
int sensorValue = 0;
int LEDothonis = 11;
int BZ = 10;
int sound = 250;
int nRainDigitalIn = 52;
int nRainVal;
int hd;
int temptrValue;
int LEDbrightness;
int calibTime = 10; //calibration time
int pirPin = A6;
int light =A9;
int analogInput =A12;
int value = 0;
int noAcces = 1;
int passinput = 0;
int ldr = 0;
int VoltageValue;
long flashvarled = 0;
long flashtimeled = 300;
float kVD = 5; // Divider Ratio
float voltage;
float lights;
float vout = 0.0;
float vin = 0.0;
float R1 = 99400.0; // resistance of R1 (100K) -see text!
float R2 = 9970.0; // resistance of R2 (10K) - see text!

int ledR = 22; // LED connected to digital pin 9
int ledG = 44;
int ledB = 45;


DS3231 rtc(SDA, SCL);
Time t;


LiquidCrystal lcd(9, 8, 7, 6, 5, 4);


//configuracion teclado matricial


const byte ROWS = 4;
const byte COLS = 4;
char hexaKeys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins [ROWS] = {37, 39, 41, 43}; //Asignacion pines filas
byte colPins [COLS] = {47, 49, 51, 53}; //Asignacion pines columnas
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); // variable_mapa de la matriz
Password password = Password("1234"); // change the access code here
boolean bIsRaining = false;
String strRaining;




double mVperAmp = 66; // use 100 for 20A Module and 66 for 30A Module
double RawValue= 0;
double ACSoffset = 2540;
double Voltage = 0;
double Amps = 0;


#define RELAY_ON 0
#define RELAY_OFF 1


#define voithitikoled1 50
#define saloni2 48
#define trapezi3 42
#define kouzina4 40
#define kouzinapagos5 38
#define inverter6 36
#define relay7 34
#define relay8 32
#define VoltPin A12 // Voltage pin
#define temptr A14






// Create a set of new characters
byte smiley[8] = {
B00000,
B01010,
B00000,
B00000,
B10001,
B01110,
B00000,
B00000
};


byte heart_h[8] = {
B00000,
B00000,
B01010,
B10101,
B10001,
B01010,
B00100, B00000
};
byte heart_f[8] = {
B00000,
B00000,
B01010,
B11111,
B11111,
B01110,
B00100, B00000
};
byte ohm[8] = {
B00000,
B01110,
B10001,
B10001,
B10001,
B01010,
B01010, B11011
};
byte rect[8] = {
B11111,
B10001,
B10001,
B10001,
B10001,
B10001,
B10001,
B11111
};
byte arrow_u[8] = {
B00100,
B01110,
B11111,
B00100,
B00100,
B00100,
B00100,
B00100
};
byte arrow_d[8] = {
B00100,
B00100,
B00100,
B00100,
B00100,
B11111,
B01110,
B00100
};
byte diamond[8] = {
B00000,
B00100,
B01010,
B10001,
B01010,
B00100,
B00000,
B00000
};
byte dexia[8] = {


B00000,
B00100,
B00010,
B11111,
B00010,
B00100,
B00000,
B00000
};


byte ilios[8] = {


B00100,
B10101,
B01010,
B11111,
B01010,
B10101,
B00100,
B00000
};


byte termometru[8] = //icon for termometer
{
B00100,
B01010,
B01010,
B01110,
B01110,
B11111,
B11111,
B01110
};


byte picatura[8] = //icon for water droplet
{
B00100,
B00100,
B01010,
B01010,
B10001,
B10001,
B10001,
B01110,
};










void setup() {
pinMode(46,OUTPUT);
vw_set_ptt_inverted(true); //
vw_set_tx_pin(2);
vw_setup(400);// speed of data transfer Kbps
lcd.begin(20, 4);
lcd.clear();




rtc.begin();
// an thelo na kano set tis oras bgazo tis kathetous ap ta parakato 3
/* rtc.setDOW(WEDNESDAY); // Set Day-of-Week to SUNDAY*/
/* rtc.setTime(04, 15, 30); // Set the time to 12:00:00 (24hr format)*/
/* rtc.setDate(19, 04, 2017); // Set the date to January 1st, 2014 */


pinMode(LEDothonis, OUTPUT);
digitalWrite(LEDothonis, HIGH);


pinMode(pirPin, INPUT);
digitalWrite(pirPin, LOW);

analogReference(DEFAULT);



digitalWrite(voithitikoled1, RELAY_OFF);
digitalWrite(saloni2, RELAY_OFF);
digitalWrite(trapezi3, RELAY_OFF);
digitalWrite(kouzina4, RELAY_OFF);
digitalWrite(kouzinapagos5, RELAY_OFF);
digitalWrite(inverter6, RELAY_OFF);
digitalWrite(relay7, RELAY_OFF);
digitalWrite(relay8, RELAY_OFF);




pinMode(voithitikoled1, OUTPUT);
pinMode(saloni2, OUTPUT);
pinMode(trapezi3, OUTPUT);
pinMode(kouzina4, OUTPUT);
pinMode(kouzinapagos5, OUTPUT);
pinMode(inverter6, OUTPUT);
pinMode(relay7, OUTPUT);
pinMode(relay8, OUTPUT);

pinMode(ledR, OUTPUT);
pinMode(ledG, OUTPUT);
pinMode(ledB, OUTPUT);




lcd.createChar (0, smiley); // load smiley to memory 0
lcd.createChar (1, heart_h); // load heart_h to memory 1
lcd.createChar (2, heart_f); // load heart_f to memory 2
lcd.createChar (3, ohm); // load ohm to memory 3
lcd.createChar (4, rect); // load rect to memory 4
lcd.createChar (5, arrow_u); // load arrow_u to memory 5
lcd.createChar (6, arrow_d); // load arrow_d to memory 6
lcd.createChar (7, diamond); // load diamond to memory 7
lcd.createChar (8, dexia); // load diamond to memory 7
lcd.createChar (9, ilios);
lcd.createChar (10, termometru);
lcd.createChar (11, picatura);








lcd.print(char(0)); //display a smiley
lcd.print(char(1)); //display a hollow heart
lcd.print(char(2)); //display a filled heart
lcd.print(char(3)); //display a ohm
lcd.print(char(4)); //display a rectangle
lcd.print(char(5)); //display a arrow
lcd.print(char(6)); //display a rectangle
lcd.print(char(7)); //display a arrow
lcd.print(char(8)); //display a arrow
lcd.print(char(9));
lcd.print(char(10));
lcd.print(char(11));


}






void loop() {
analogReference(DEFAULT); // ορίζουμε ότι η τάση αναφοράς του μετατροπεα είναι η προκαθορισμενη 5V

temptrValue = analogRead(temptr); // aisthitiras thermokrasias trofodotikou

lights = analogRead(light); // aisthitiras fotos


ldr = analogRead(14); // aisthitiras thermokrasias trofodotikou (allagi mono stin onomasia, idio me temptr)

nRainVal = analogRead(A15); // aisthitiras ugrasias

RawValue = analogRead(analogIn); // metritis Ampere


VoltageValue = analogRead(VoltPin); // metritis 12 Volt

value = analogRead(analogInput); // metritis 24 Volt

t = rtc.getTime(); // roloi

..................................................

kostas_90210
07-05-17, 22:21
void loop() {
analogReference(DEFAULT); // ορίζουμε ότι η τάση αναφοράς του μετατροπεα είναι η προκαθορισμενη 5V

temptrValue = analogRead(temptr); // aisthitiras thermokrasias trofodotikou

lights = analogRead(light); // aisthitiras fotos

ldr = analogRead(14); // aisthitiras thermokrasias trofodotikou (allagi mono stin onomasia, idio me temptr)

nRainVal = analogRead(A15); // aisthitiras ugrasias

RawValue = analogRead(analogIn); // metritis Ampere

VoltageValue = analogRead(VoltPin); // metritis 12 Volt

value = analogRead(analogInput); // metritis 24 Volt

t = rtc.getTime(); // roloi



/***upologismos ton ampere***/
Voltage = (RawValue / 1023.0) * 5000; // Gets you mV
Amps = ((Voltage - ACSoffset) / mVperAmp);
/***upologismos ton ampere***/

voltage = VoltageValue * (4.90 / 1023.0) * kVD; // υπολογισμός τάσης 12V

/***upologizei tis antistasis kai tin metrisi sto analogiko pin gia tin metrisi ton 24V***/
vout = (value * 4.97) / 1023.0; // see text
vin = vout / (R2/(R1+R2));
if (vin<0.09) {
vin=0.0;//Δήλωση αναιρεί ανεπιθύμητη ανάγνωση!
}
/***upologizei tis antistasis kai tin metrisi sto analogiko pin gia tin metrisi ton 24V***/


bIsRaining = !(digitalRead(nRainDigitalIn)); //Cheks Digital Pin 2, Output D0
if (bIsRaining) { //Cheks Digital Pin 2, Output D0
strRaining = "YES";
}
else {
strRaining = "NO";
}

/***ruthmisi fotismou othonis***/

lights = 1023 - lights;
LEDbrightness = map(lights, 0, 1023, 0, 255);
analogWrite(11, LEDbrightness);
/***ruthmisi fotismou othonis***/

/***anemistiras***/
{
if (temptrValue <= 470.0)
analogWrite(12, 0);
if (temptrValue <= 465.0)
analogWrite(12, 30);
if (temptrValue <= 460.0)
analogWrite(12, 50);
if (temptrValue <= 450.0)
analogWrite(12, 70);
if (temptrValue <= 440.0)
analogWrite(12, 100);
if (temptrValue <= 430.0)
analogWrite(12, 170);
if (temptrValue <= 420.0)
analogWrite(12, 210);
if (temptrValue <= 410.0)
analogWrite(12, 240);
if (temptrValue <= 400.0)
analogWrite(12, 255);
}
/***anemistiras***/

/* kostas */
{
if(t.hour >= 00 )

analogWrite(ledR, 30);
analogWrite(ledG, 20);
analogWrite(ledB, 100);

if(t.hour >= 00 && t.min >=30 )

analogWrite(ledR, 20);
analogWrite(ledG, 10);
analogWrite(ledB, 100);

if(t.hour >=1 )
analogWrite(ledR, 10);
analogWrite(ledG, 0);
analogWrite(ledB, 100);

if(t.hour >= 2 )
analogWrite(ledR, 0);
analogWrite(ledG, 0);
analogWrite(ledB, 120);

if(t.hour >= 3 )
analogWrite(ledR, 0);
analogWrite(ledG, 20);
analogWrite(ledB, 120);


if(t.hour >= 4 )
analogWrite(ledR, 0);
analogWrite(ledG, 50);
analogWrite(ledB, 110);


if(t.hour >= 4 && t.min >=20)
analogWrite(ledR, 0);
analogWrite(ledG, 65);
analogWrite(ledB, 105);


if(t.hour >= 5 )
analogWrite(ledR, 0);
analogWrite(ledG, 80);
analogWrite(ledB, 100);


if(t.hour >= 6 )
analogWrite(ledR, 0);
analogWrite(ledG, 100);
analogWrite(ledB, 70);

if(t.hour >= 6 && t.min >=30 )
analogWrite(ledR, 0);
analogWrite(ledG, 120);
analogWrite(ledB, 50);

if(t.hour >= 7 )
analogWrite(ledR, 0);
analogWrite(ledG, 130);
analogWrite(ledB, 30);

if(t.hour >= 7 && t.min >=30)
analogWrite(ledR, 0);
analogWrite(ledG, 140);
analogWrite(ledB, 15);

if(t.hour >= 8 )
analogWrite(ledR, 0);
analogWrite(ledG, 150);
analogWrite(ledB, 0);


if(t.hour >= 8 && t.min >=10)
analogWrite(ledR, 20);
analogWrite(ledG, 150);
analogWrite(ledB, 20);


if(t.hour >= 8 && t.min >=20)
analogWrite(ledR, 40);
analogWrite(ledG, 145);
analogWrite(ledB, 40);


if(t.hour >= 8 && t.min >=40)
analogWrite(ledR, 50);
analogWrite(ledG, 145);
analogWrite(ledB, 50);

if(t.hour >= 9 )
analogWrite(ledR, 60);
analogWrite(ledG, 140);
analogWrite(ledB, 60);


if(t.hour >= 9 && t.min >=20)
analogWrite(ledR, 60);
analogWrite(ledG, 145);
analogWrite(ledB, 70);


if(t.hour >= 9 && t.min >=30)
analogWrite(ledR, 70);
analogWrite(ledG, 145);
analogWrite(ledB, 85);


if(t.hour >= 9 && t.min >=40)
analogWrite(ledR, 80);
analogWrite(ledG, 150);
analogWrite(ledB, 95);

if(t.hour >= 10 )
analogWrite(ledR, 90);
analogWrite(ledG, 150);
analogWrite(ledB, 100);


if(t.hour >= 10 && t.min >=30)
analogWrite(ledR, 10);
analogWrite(ledG, 150);
analogWrite(ledB, 115);

if(t.hour >= 11 )
analogWrite(ledR, 110);
analogWrite(ledG, 150);
analogWrite(ledB, 130);

if(t.hour >= 12 )
analogWrite(ledR, 150);
analogWrite(ledG, 150);
analogWrite(ledB, 150);

if(t.hour >= 13 )
analogWrite(ledR, 150);
analogWrite(ledG, 100);
analogWrite(ledB, 130);


}

/***pollaples entoles dokimastiko***/


/*if(lights >= 311 && lights <=14){
digitalWrite(voithitikoled1, LOW);
//κώδικας
}
else
digitalWrite(voithitikoled1, HIGH);
}*/


z=0;
y=0;
tecla=customKeypad.getKey();
MSNinicio();

if(tecla) // Check for a valid key.
{
switch(tecla)
{

case '#': // SELECCION PARA LEER SENSORES 3 Y 4
digitalWrite(BZ, HIGH);
delay(40);
digitalWrite(BZ, LOW);
lcd.clear();
sensor();
break;



/* case 'B': // SELECCION PARA LEER SENSORES 3 Y 4
digitalWrite(BZ, HIGH);
delay(40);
digitalWrite(BZ, LOW);
lcd.clear();
lcd.setCursor (6, 0);
lcd.print("EPILOGI");
lcd.setCursor (3, 1);
lcd.print("XROMATOS");
delay(500);
lcd.clear();
lcd.setCursor (0, 0);
lcd.print("1: KOKKINO");
lcd.setCursor (0, 1);
lcd.print("2: MPLE");
lcd.setCursor (0, 2);
lcd.print("3: LEYKO");
lcd.setCursor (0, 3);
lcd.print("**EPILOGI XROMATON**");
xroma();
break;
*/


case 'D': // SELECCION PARA LEER SENSORES 3 Y 4
digitalWrite(BZ, HIGH);
delay(40);
digitalWrite(BZ, LOW);
lcd.clear();
lcd.setCursor (6, 0);
lcd.print("EPILOGI");
lcd.setCursor (3, 1);
lcd.print("REYMATOS 220V");
delay(500);
lcd.clear();
lcd.setCursor (0, 0);
lcd.print("*: INVERTER");
lcd.setCursor (0, 1);
lcd.print("#: D.E.H.");
lcd.setCursor (0, 2);
lcd.print("D: EXIT");
lcd.setCursor (0, 3);
lcd.print("**EPILOGI PAROXIS**");
ZoneSense1();
break;


case '1': // SELECCION PARA LEER SENSORES 3 Y 4
digitalWrite(BZ, HIGH);


delay(40);
digitalWrite(BZ, LOW);


lcd.clear();
digitalWrite(voithitikoled1, !digitalRead(voithitikoled1));
lcd.setCursor (0, 1);
lcd.print("*** FOS ASFALEIAS***");
delay(800);
lcd.clear();


break;

case '2': // SELECCION PARA LEER SENSORES 3 Y 4
digitalWrite(BZ, HIGH);
delay(40);
digitalWrite(BZ, LOW);
lcd.clear();
digitalWrite(saloni2, !digitalRead(saloni2));
lcd.setCursor (3, 1);
lcd.print("*** SALONI ***");
delay(800);
lcd.clear();

break;

case '3': // SELECCION PARA LEER SENSORES 3 Y 4
digitalWrite(BZ, HIGH);
delay(40);
digitalWrite(BZ, LOW);
lcd.clear();
digitalWrite(trapezi3, !digitalRead(trapezi3));
lcd.setCursor (3, 1);
lcd.print("*** TRAPEZI ***");
delay(800);
lcd.clear();

break;


case '4': // SELECCION PARA LEER SENSORES 3 Y 4
digitalWrite(BZ, HIGH);
delay(40);
digitalWrite(BZ, LOW);
lcd.clear();
digitalWrite(kouzina4, !digitalRead(kouzina4));
lcd.setCursor (2, 1);
lcd.print("*** KOYZINA ***");
delay(800);
lcd.clear();

break;


case '5': // SELECCION PARA LEER SENSORES 3 Y 4
digitalWrite(BZ, HIGH);
delay(40);
digitalWrite(BZ, LOW);
digitalWrite(kouzinapagos5, !digitalRead(kouzinapagos5));
lcd.clear();
lcd.setCursor (0, 1);
lcd.print("*** PAGOS KOYZINA***");
lcd.clear();

break;



case '7': // SELECCION PARA LEER SENSORES 3 Y 4
digitalWrite(BZ, HIGH);
delay(40);
digitalWrite(BZ, LOW);
digitalWrite(relay7, !digitalRead(relay7));
lcd.clear();
lcd.setCursor (0, 1);
lcd.print("*** keno ***");
delay(800);
lcd.clear();
break;




case '0': // SELECCION PARA LEER SENSORES 3 Y 4
digitalWrite(BZ, HIGH);
delay(40);
digitalWrite(BZ, LOW);
lcd.clear();
digitalWrite(voithitikoled1, !digitalRead(voithitikoled1));
digitalWrite(saloni2, !digitalRead(saloni2));
digitalWrite(trapezi3, !digitalRead(trapezi3));
digitalWrite(kouzina4, !digitalRead(kouzina4));
digitalWrite(kouzinapagos5, !digitalRead(kouzinapagos5));

lcd.setCursor (0, 1);
lcd.print("*** OLA TA FOTA***");
delay(800);
lcd.clear();

break;
}
}
}



void ZoneSense1() {


while(y<1)
{
tecla=customKeypad.getKey(); //CHOOSE SENSOR
if(tecla =='*'){
digitalWrite(BZ, HIGH);
delay(10);
digitalWrite(BZ, LOW);
lcd.clear();
lcd.setCursor (0, 0);
lcd.print("220 V");
lcd.setCursor (1, 6);
lcd.print("Apo Inverter");
delay(800);
lcd.setCursor (0, 0);
lcd.print(" ");
lcd.setCursor (0, 1);
lcd.print(" ");
lcd.setCursor (0, 2);
lcd.print(" ");


for(i=0; i < 1; i++){
digitalWrite(inverter6, LOW);

lcd.setCursor (0, 1);
delay(200);
lcd.print(i);
}
y=1;
z=1;
}

if(tecla =='#'){
digitalWrite(BZ, HIGH);
delay(10);
digitalWrite(BZ, LOW);
lcd.clear();
lcd.setCursor (0, 0);
lcd.print("220 V");
lcd.setCursor (1, 6);
lcd.print("Apo D.E.H.");
delay(800);
lcd.setCursor (0, 0);
lcd.print(" ");
lcd.setCursor (0, 1);
lcd.print(" ");
lcd.setCursor (0, 2);
lcd.print(" ");


for(i=0; i < 1; i++){
digitalWrite(inverter6, HIGH);

lcd.setCursor (0, 1);
delay(200);
lcd.print(i);;
}
y=1;
z=1;
}
if(tecla =='D'){
digitalWrite(BZ, HIGH);
delay(10);
digitalWrite(BZ, LOW);
lcd.clear();
lcd.setCursor (0, 0);
lcd.print("EXIT MENU");
delay(800);
lcd.setCursor (0, 0);
lcd.print(" ");
lcd.setCursor (0, 1);
lcd.print(" ");
lcd.setCursor (0, 2);
lcd.print(" ");


for(i=0; i < 1; i++){
MSNinicio();
lcd.setCursor (0, 1);
delay(200);
lcd.print(i);
}
y=1;
z=1;
}


}
}


/************************************************** *********************FUNCION BIENVENIDA**************************************** *****************/
void sensor(){

/* lcd.setCursor (0, 0);
lcd.print(" ");
*/

while(y<1)
{
tecla=customKeypad.getKey();


lcd.setCursor(13, 2);
lcd.print("A");
lcd.print(Amps);


lcd.setCursor(12, 1);
lcd.print("");
lcd.print(nRainVal);


lcd.setCursor(0, 2);
lcd.print("V");
lcd.print(vin);

lcd.setCursor(10, 2);
lcd.print(char(1));

delay(500);
lcd.clear();

if(tecla =='*'){
digitalWrite(BZ, HIGH);
delay(10);
digitalWrite(BZ, LOW);
lcd.clear();




for(i=0; i < 1; i++){
MSNinicio();
lcd.setCursor (0, 1);
delay(200);
lcd.print(i);
}
y=1;
z=1;
}
}


}






void MSNinicio(){

/* lcd.setCursor (0, 0);
lcd.print(" ");
*/

lcd.setCursor(10, 0);
// print the number of seconds since reset:
lcd.print(t.date, DEC);
lcd.print("/");
lcd.print(rtc.getMonthStr());
lcd.print("/");
lcd.print(t.year, DEC);
lcd.setCursor(0, 1);


lcd.setCursor(0, 0);
lcd.print("");
lcd.print(t.hour, DEC);
lcd.print(":");
lcd.print(t.min, DEC);
lcd.print(":");
lcd.print(t.sec, DEC);
lcd.print(" ");


lcd.setCursor(0, 1);
lcd.print(char(10));
lcd.print(temptrValue);

lcd.setCursor(6, 1);
lcd.print(char(10));
lcd.print(rtc.getTemp());

lcd.setCursor(13, 1);
lcd.print((char)9);
lcd.print(lights);


lcd.setCursor(0, 2);
lcd.print("V:");
lcd.print(vin);

lcd.setCursor(7, 2);
lcd.print(" - ");
lcd.print(voltage);



if(digitalRead(voithitikoled1 ) == LOW)
{
lcd.setCursor(0, 3);
lcd.print("1");


}

if(digitalRead(saloni2 ) == LOW)
{
lcd.setCursor(2, 3);
lcd.print("2");


}
if(digitalRead(trapezi3 ) == LOW)
{
lcd.setCursor(4, 3);
lcd.print("3");


}

if(digitalRead(kouzina4 ) == LOW)
{
lcd.setCursor(6, 3);
lcd.print("4");

}

if(digitalRead(kouzinapagos5 ) == LOW)
{
lcd.setCursor(8, 3);
lcd.print("5");


}
if(digitalRead(inverter6 ) == LOW)
{
lcd.setCursor(10, 3);
lcd.print((char)9);

}

if(digitalRead(relay7 ) == LOW)
{
lcd.setCursor(12, 3);
lcd.print("7");

}
{
if(digitalRead(relay8 ) == LOW)
{
lcd.setCursor(14, 3);
lcd.print("8");

}
else

lcd.setCursor(14, 3);
lcd.print(" ");
}
/*** fos mikro. anoigei mono sto skotadi kai otan uparxei kinisi ***/
{
if (lights <=200 && nRainVal <= 900)
{
digitalWrite(relay8, LOW);

}

else
digitalWrite(relay8, HIGH);

}
/*** fos mikro. anoigei mono sto skotadi kai otan uparxei kinisi ***/



}

kostas_90210
07-05-17, 22:47
Εγώ βέβαια κάνω δοκιμές.... και μόλις διέγραψα το παρακάτω....




/***ruthmisi fotismou othonis***/

lights = 1023 - lights;
LEDbrightness = map(lights, 0, 1023, 0, 255);

analogWrite(11, LEDbrightness);
/***ruthmisi fotismou othonis***/





και εννοείτε δουλεύει... μήπως πρέπει να πάω στην βιβλιοθήκη να πειράξω κάτι? Μήπως ο κώδικας έχει κάτι και το κολλάει?

Fire Doger
08-05-17, 00:08
Άκρη με μια ματιά δεν βγαίνει με τέτοιο κώδικα, θέλει να κάνεις ανάλυση (που εγώ δεν έχω τον χρόνο).
Εκεί που πήγε το μυαλό μου με την μία είναι πως οι βιβλιοθήκες έχουν πρόβλημα μεταξύ τους.
Πρόβλημα μεταξύ τους έχουν συνήθως όταν δουλεύουν τα ίδια περιφερειακά.
Φαντάζομαι η βιβλιοθήκη για το πληκτρολόγιο δουλεύει με σάρωση και Timer και βρόμισε με την μία.
Με το τελευταίο σου post θα ήμουν σχεδόν σίγουρος ότι ο Timer που δουλεύει για το πληκτρολόγιο είναι ο ίδιος για το pwm στο pin 11.
Τσέκαρε ποιον τιμερ δουλεύει η βιβλιοθήκη για το πληκτρολόγιο και ποιος είναι για το pin 11.

Αν είναι ο ίδιος αναγκαστικά είτε θα βάλεις το led σε άλλο pwm είτε θα αλλάξεις timer στην βιβλιοθήκη.

Καλό είναι για κάθε pwm pin (εκτός αυτό του Timer0 που τον δουλεύει και για άλλα πράγματα το arduino) να χρησιμοποιείς ξεχωριστή βιβλιοθήκη και όχι το analog write

kostas_90210
08-05-17, 00:24
Άκρη με μια ματιά δεν βγαίνει με τέτοιο κώδικα, θέλει να κάνεις ανάλυση (που εγώ δεν έχω τον χρόνο).
Εκεί που πήγε το μυαλό μου με την μία είναι πως οι βιβλιοθήκες έχουν πρόβλημα μεταξύ τους.
Πρόβλημα μεταξύ τους έχουν συνήθως όταν δουλεύουν τα ίδια περιφερειακά.
Φαντάζομαι η βιβλιοθήκη για το πληκτρολόγιο δουλεύει με σάρωση και Timer και βρόμισε με την μία.
Με το τελευταίο σου post θα ήμουν σχεδόν σίγουρος ότι ο Timer που δουλεύει για το πληκτρολόγιο είναι ο ίδιος για το pwm στο pin 11.
Τσέκαρε ποιον τιμερ δουλεύει η βιβλιοθήκη για το πληκτρολόγιο και ποιος είναι για το pin 11.

Αν είναι ο ίδιος αναγκαστικά είτε θα βάλεις το led σε άλλο pwm είτε θα αλλάξεις timer στην βιβλιοθήκη.

Καλό είναι για κάθε pwm pin (εκτός αυτό του Timer0 που τον δουλεύει και για άλλα πράγματα το arduino) να χρησιμοποιείς ξεχωριστή βιβλιοθήκη και όχι το analog write





Μάλλον κάτι γίνεται με τις βιβλιοθήκες... οτιδήποτε είναι σε analogWrite δεν λειτουργεί.


Δεν είχα κανένα πρόβλημα με πληκτρολόγιο και κανένα pin pwm μέχρι που έβαλα τα rf με βιβλιοθήκη VirtualWire.
Όλα αυτά με το timer που λες η αλήθεια δεν τα ξέρω αλλά είναι ευκαιρία να διαβάσω να τα μάθω.

lepouras
08-05-17, 11:06
Κώστα όταν θέλουμε να βάλουμε κώδικα για να μην φαίνεται σεντόνι μπροστά βάζουμε [CΟDE] βάζουμε τον κώδικα ανάμεσα και στο τέλος βάζουμε [/CΟDE]. έτσι γίνετε το παραθυράκι που φαίνεται στα μηνύματα που σου διόρθωσα. (για να μην γίνει παράθυρο τώρα που στο έδειχνα έβαλα Ελληνικό "Ο" ώστε να φανούν οι λέξεις).

nkarama
08-05-17, 12:27
H Virtualwire χρησιμοποιεί τον timer1 (στο UNO / atmega328) για να δουλέψει. Για τον λόγο αυτό, χάνεις τo PWM απο τα pins που ελέγχει ο timer1.
Στο Mega (atmega2560) δεν είμαι σίγουρος ποιον timer χρησιμοποιεί.

Τα pwm pins πάντως που ελέγχουν οι 6 timers του atmega2560 είναι:
Pins 4 and 13: controlled by timer0
Pins 11 and 12: controlled by timer1
Pins 9 and10: controlled by timer2
Pin 2, 3 and 5: controlled by timer 3
Pin 6, 7 and 8: controlled by timer 4
Pin 46, 45 and 44:: controlled by timer 5

Δες ποιόν timer χρησιμοποιεί η VW και απλά μην χρησιμοποιήσεις τα pin που ελέγχονται απο αυτόν για PWM (φυσικά μπορείς να τα χρησιμοποιήσεις για οτιδήποτε άλλο θες, αρκεί να μην χρειάζετε PWM, πχ δεν μπορείς να βάλεις servo)....

kostas_90210
09-05-17, 00:47
Κώστα όταν θέλουμε να βάλουμε κώδικα για να μην φαίνεται σεντόνι μπροστά βάζουμε [CΟDE] βάζουμε τον κώδικα ανάμεσα και στο τέλος βάζουμε [/CΟDE]. έτσι γίνετε το παραθυράκι που φαίνεται στα μηνύματα που σου διόρθωσα. (για να μην γίνει παράθυρο τώρα που στο έδειχνα έβαλα Ελληνικό "Ο" ώστε να φανούν οι λέξεις).


Τι να πω τώρα? Αρκετά μαζεμένο το μήνυμα ...
Αδικαιολόγητος.,,, :)

Σ ευχαριστώ πολύ για τις διορθώσεις!!!





H Virtualwire χρησιμοποιεί τον timer1 (στο UNO / atmega328) για να δουλέψει. Για τον λόγο αυτό, χάνεις τo PWM απο τα pins που ελέγχει ο timer1.
Στο Mega (atmega2560) δεν είμαι σίγουρος ποιον timer χρησιμοποιεί.

Τα pwm pins πάντως που ελέγχουν οι 6 timers του atmega2560 είναι:
Pins 4 and 13: controlled by timer0
Pins 11 and 12: controlled by timer1
Pins 9 and10: controlled by timer2
Pin 2, 3 and 5: controlled by timer 3
Pin 6, 7 and 8: controlled by timer 4
Pin 46, 45 and 44:: controlled by timer 5

Δες ποιόν timer χρησιμοποιεί η VW και απλά μην χρησιμοποιήσεις τα pin που ελέγχονται απο αυτόν για PWM (φυσικά μπορείς να τα χρησιμοποιήσεις για οτιδήποτε άλλο θες, αρκεί να μην χρειάζετε PWM, πχ δεν μπορείς να βάλεις servo)....


Ναι αυτό διάβαζα σε κάποια ξένα forum, έχουν όλοι θέμα με το pwm και την VirtualWire.
.

Βέβαια εγώ έχω σχεδόν όλα τα pin κατειλημμένα και δεν μπορώ να τα αλλάξω τώρα.
Βρήκα λύση εδώ (https://andreasrohner.at/posts/Electronics/New-Arduino-library-for-433-Mhz-AM-Radio-Modules/) και με αυτή την βιβλιοθήκη λειτουργούν κανονικά τα pwm pins, φυσικά λειτουργεί και το rf σε όποιο pin θέλω .

Τώρα είμαι στην φάση να φτιάξω τον κώδικα να λειτουργεί όπως τον χρειάζομαι.


Σας ευχαριστώ πάρα πολύ όλους!!!