Olá a todos do fórum. Estou criando um código com dois contadores, indo de 0 à 4088, criando uma função triangular no osciloscópio. Neles, há o ponteiro(que no código é a variavel P1) e sua largura(variável P2). Inicialmente aparece apenas um dos contadores e o ponteiro. Ao clicar o botão, aparece o próximo contador e o ponteiro deveria estar no mesmo lugar, o que não acontece. O ponteiro lê o valor determinado pelo potenciômetro, mas mesmo quando eu coloquei um valor fixo, ele altera sua posição aleatoriamente, como se mudasse de valor repentinamente. Segue o código:
int MAX=4088, MIN=0, n=0, ld=12 , clk=11 , data=10, cse=8, csi=9,clr=13, pulse= 7, cursor1 = A0 , cursor2=A1, P1, P2, C, minimum=20,button=6,statebutton;
boolean E=0;
/*'E' é uma variavel qualquer:
E=0, indica que a rampa esta subindo;
E=1, indica que a rampa esta descendo;
ld= latchpin;
clk=clockpin;
data=datapin;
cse=chipselect da rampa externa;
csi=chipselect da rampa interna;
clr=clear;
C=condição para o pulso;*/
void setup() {
// put your setup code here, to run once:
pinMode(ld, OUTPUT);
pinMode(clk, OUTPUT);
pinMode(data, OUTPUT);
pinMode(csi,OUTPUT);
pinMode(cse,OUTPUT);
pinMode(cursor1, INPUT);
pinMode(cursor2, INPUT);
pinMode(pulse, OUTPUT);
pinMode(button,INPUT_PULLUP);
digitalWrite(clr, LOW);
digitalWrite(clr, HIGH);
digitalWrite(ld, HIGH);
}
void loop() {
digitalWrite(cse,LOW);
digitalWrite(csi,HIGH);//o dac da ''rampa externa'' recebe os valores de n
rampe();
statebutton=digitalRead(button);
if(statebutton==LOW){
digitalWrite(cse,HIGH);
digitalWrite(csi,LOW);//o dac da ''rampa interna'' recebe os valores de n
rampi();
}
}
void rampe(){
P1 = 4*analogRead(cursor1);
P2 = analogRead(cursor2);//ambos ponteiros leem o valor dos potenciômetros
if(P2 <= minimum){
P2 = minimum;
}
if(P1-P2/2<=MIN){
P1 = P2/2;
}
if(P1+P2/2>=MAX){
P1 = MAX-P2/2;
}
C = n>=P1-P2/2 && n<=P1+P2/2 && E==0;
if(C==1){
digitalWrite(pulse, HIGH);
}
if(C==0){
digitalWrite(pulse, LOW);
}
if(E==0){
n=n+8;
}
else{
n=n-8;
}
if(n==MAX){
E = 1;
}
if(n==MIN){
E = 0;
}
shiftOut(data, clk, MSBFIRST,(n>>8));
shiftOut(data, clk, MSBFIRST, n);
digitalWrite(ld, LOW);
digitalWrite(ld, HIGH);
}
void rampi(){
E=0;
n=0;
boolean CB=0; //CB=condição do botão.
while(CB==0){
//até aqui, ao meu entender, P1 e P2 não mudaram seu valor e consequentemente o cursor deveria estar na mesma posição
C = n>=P1-P2/2 && n<=P1+P2/2 && E==0;
if(C==1){
digitalWrite(pulse, HIGH);
}
if(C==0){
digitalWrite(pulse, LOW);
}
if(E==0){
n=n+8;
}
else{
n=n-8;
}
if(n==MAX){
E = 1;
}
if(n==MIN){
E = 0;
}
shiftOut(data, clk, MSBFIRST, (n >> 8));
shiftOut(data, clk, MSBFIRST, n);
digitalWrite(ld, LOW);
digitalWrite(ld, HIGH);
statebutton=digitalRead(button);
if(statebutton==LOW){
CB=1;
}
}
}