Hola expongo mi pequeño gran problema:
Estoy fabricando un display para el cambio de marchas que va desde neutro hasta 6ª velocidad, después de mucho buscar he encontrado una galería que entiendo "un poco" pero no lo suficiente para poder realizar el proyecto al 100 X 100.
He modificado algo lo que he encontrado en internet y lo he probado con un potenciometro en la protboard y todo de lujo, mi sorpresa es la siguiente el potenciometro de la caja de velocidades no varia en voltaje para las distintas velocidades (no es lineal) de primera a segunda varia 0.5v de segunda a tercera 0.8v de tercera a cuarta 0.5v de cuarta a quinta 1.1v...
Mi pregunta es la siguiente puedo programar que con cada voltaje de entrada me muestre el numero en la pantalla correspondiente?
y la otra pregunta es: el neutro puedo hacer que me muestre una n minúscula con los segmentos e, g, c?
Saludos.
#include "SevSeg.h"
SevSeg sevseg;
int refreshTime = 100; //how many seconds should it wait before it checks and displays the temp again? 1000 = 1 second
int verde = A1;
int neutro = 0;
unsigned long timer;
float cambio = 0;
int potenciometro = 0;
float se = 0;
void setup()
{
byte numDigits = 1;
byte digitPins[] = {2};
byte segmentPins[] = {6, 7, 8, 9, 10, 11, 12, 13};
sevseg.begin(COMMON_CATHODE, numDigits, digitPins, segmentPins);
sevseg.setBrightness(100);
pinMode(A1,OUTPUT);
}
void loop()
{
cambio = analogRead(potenciometro);
cambio = ((5 * cambio * 2 )/1024)-2;
se = analogRead(potenciometro);
se = (5 * se)/1024;
unsigned long mils=millis();
if (mils-timer>=refreshTime) {
timer=mils;
sevseg.setNumber(cambio,(byte) 0);
}
sevseg.refreshDisplay();
}
Hola surbyte, gracias por contestar.
No guarda un orden entre cambio y cambio.
1= 0.6v
2= 0.9V
3= 1.7v
4=2.2v
5= 3.3v
6= 4.1V
N= 4.4V
R= 5V
Pensaba que entre marcha y marcha había 0.62v por eso con el potenciometro me funcionaba de Lujo.
pero al montarlo me he dado cuenta de que no es cierto y que el cambio que se muestra en el display no corresponde con el cambio engranado.
pensaba hacerlo con.
if y else, pero no se como aplicarlo a esta galeria y si es posible claro.
Una solución para cubrir el expediente podría ser modificar en la librería SevSeg el dígito 0. Para ello bastaría con modificar el SevSeg.cpp, en la línea 309, sustituyendo B00111111 por el correspondiente a tu "n" (no estoy seguro, pero prueba a ver con B01010100). Como supongo que ya tenías asignado 0 a neutral, no deberías hacer nada más.
Ahh yo te puse para que mostrara una etiqueta y luego tu la vieras en el Monitor Serie cuando lo probabas con tu potenciometro.
Ahora en lugar de eso o agrega una variable del tipo byte por ejemplo
byte marcha;
y con cada if ajustas su valor y luego haz lo que dice @noter.
#include "SevSeg.h"
SevSeg sevseg;
#define PRIMERA 0.75 // 0.6
#define SEGUNDA 1.3 // 0.9
#define TERCERA 1.95
#define CUARTA 2.75
#define QUINTA 3.7
#define SEXTA 4.25
#define NEUTRAL 4.6
#define REVERSE 4.8
int refreshTime = 100; //how many seconds should it wait before it checks and displays the temp again? 1000 = 1 second
unsigned long timer;
float valor;
byte marcha, marchaAnt = 0;
byte numDigits = 1;
byte digitPins[] = {2};
byte segmentPins[] = {6, 7, 8, 9, 10, 11, 12, 13};
void setup() {
sevseg.begin(COMMON_CATHODE, numDigits, digitPins, segmentPins);
sevseg.setBrightness(1);
pinMode(A1,OUTPUT);
Serial.begin(9600); // para poder ver en el monitor serie que pasa al igual que el display
}
void loop() {
valor = analogRead(A0) * 5.0/1023.0;
if (valor > REVERSA) { //> 4.8 entonces REVERSA
cambio = "REVERSA";
marcha = 7;
}
else if (valor > NEUTRAL) { //
cambio = "NEUTRAL";
marcha = 0;
}
else if (valor > SEXTA) { //
cambio = "SEXTA";
marcha = 6;
}
else if (valor > QUINTA) { //
cambio = "QUINTA";
marcha = 5;
}
else if (valor > CUARTA) { //
cambio = "CUARTA";
marcha = 4;
}
else if (valor > TERCERA) { //
cambio = "TERCERA";
marcha = 3;
}
else if (valor > SEGUNDA) { //
cambio = "SEGUNDA";
marcha = 2;
}
else if (valor > PRIMERA) { //
cambio = "PRIMERA";
marcha = 1;
}
unsigned long mils = millis();
if (mils-timer > refreshTime) {
timer = mils;
sevseg.setNumber(marcha,(byte) 0);
if (marcha != marchaAnt)
Serial.prinln(cambio);
marchaAnt = marcha;
}
sevseg.refreshDisplay();
}
Hola tengo montada una caja secuencial.
Y dispone de un potenciómetro interior que devuelve el votaré según la marcha engranada.
Como puedo cambiar el título del post para sí algún forero más lo llega a usar?
Posiciónate en el post#0, luego ve a More (abajo a la derecha) luego Modify y ya puedes editar todo lo que quieras incluído el título. Agrega [SOLUCIONADO]