με επιτυχία ολοκλήρωσα εάν κομμάτι του κώδικα που :παίρνει την τιμή του encoder και την στέλνει στο ψηφιακό ποτενσιόμετρο
αλλά θέλω επίσης να βάλω μια προστασία δηλαδή αν φτάσει στο μάξιμουμ του ποτενσιόμετρου (256) να σταματάει να μετράει κι
επιεί έχω 2 εξόδους θέλω να έχω 2 encoders κι όταν παρατηρείτε αλλαγή στον έναν αν αλλάζει την αντίστοιχη τιμή κι όταν παρατηρείτε στο άλλο encoder να αλλάζει το άλλο ποτενσιόμετρο
Κώδικας:
#include <SPI.h>;#include <LiquidCrystal.h>;//LCD
float R1 = 100000.0;//input1 resistor1
float R2 = 10000.0;//input1 resistor2
float R3 = 100000.0;//input2 resistor1
float R4 = 10000.0;//input2 resistor2
LiquidCrystal lcd (22, 23, 24, 25, 26, 27);//lcd
int analogInput1 = 0 ;//mesure input 1 voltage
int analogInput2 = 1 ;//mesure input 1 voltage
float vout1 = 0.0;//μεταβλητη εξοδου 1
float vin1 = 0.0 ;// >>
int value1 = 0; // >>
float vout2 = 0.0;//μεταβλητη εξοδου 1
float vin2 = 0.0 ;// >>
int value2 = 0; // >>
int pinbutton1 = 6;//on off out
int Relay1 = 7;//on off out
int pinbutton2 = 5;//on off out
int Relay2 = 4;//on off out
int staterelay1 = LOW ;//on off out
int statebutton1;//on off out
int staterelay2 = LOW ;//on off out
int statebutton2;//on off out
int previous = LOW; //on off out
long time = 0;
long debounce = 500;
int val;
int encoder0PinA = 3;//for encoder
int encoder0PinB = 2;// for encoder
int encoder0Pos = 0;//for encoder
int encoder0PinALast = LOW;//for encoder
int n = LOW;//for encoder
int csPin1 = 10;
int csPin2 = 9;
void setup() {
pinMode (analogInput1, INPUT);
pinMode (analogInput2, INPUT);
pinMode ( pinbutton1, INPUT );
pinMode ( Relay1, OUTPUT);
lcd.begin (16, 2);
Serial.begin (9600);
lcd.setCursor(0,0 );
lcd.print ("DIGITAL PSU FINOS");//fancy
Serial.println ("DIDITAL PSU FINOS ........... WAIT FOR COMANT ");//fancy
pinMode (encoder0PinA,INPUT);//roterry encode
pinMode (encoder0PinB,INPUT);
SPI.begin();
pinMode(csPin1, OUTPUT);
pinMode(csPin2, OUTPUT);
}
void loop() {
value1 = analogRead(analogInput1);//input 1 monitor
vout1= (value1 * 5.0) / 1024 ;
vin1 = vout1 / (R2/(R1+R2));
value2 = analogRead(analogInput2);// input 2 monitor
vout2= (value2 * 5.0) / 1024 ;
vin2 = vout2 / (R2/(R1+R2));
if (vin1<1.255) {
vin1 = 0.0;
}
lcd.clear();
lcd.setCursor(0,0);
lcd.print("VOUT1= ");
lcd.print(vin1);
lcd.setCursor(1,0);
lcd.print("VOUT2= ");
lcd.print(vin2);
Serial.println("Vout1 = ");
Serial.println(vin1);
Serial.println("Vout2 = ");
Serial.println(vin2);
delay (2);
if (pinbutton1 = HIGH) ;
digitalWrite (Relay1, HIGH );
n = digitalRead(encoder0PinA);// roterry encoder read data start
if ((encoder0PinALast == LOW) && (n == HIGH)) {
if (digitalRead(encoder0PinB) == LOW) {
encoder0Pos--;
} else {
encoder0Pos++;
if (encoder0Pos<0);
encoder0Pos= 0;
}
}
encoder0PinALast = n;//roterry encoder read date end
digitalWrite (csPin1,LOW);//spi bus mpc 4151 first
SPI.transfer(0);
SPI.transfer(encoder0Pos);
digitalWrite (csPin2,HIGH);
}
σας εχω λιγω κουρασει;