1
Bieżące kolejowe / Odp: Antyk zza rury - szuka nowego właściciela.
« dnia: 28 Czerwca 2018, 19:10:41 »
Ogłoszenie nieaktualne.
Ta sekcja pozwala Ci zobaczyć wszystkie wiadomości wysłane przez tego użytkownika. Zwróć uwagę, że możesz widzieć tylko wiadomości wysłane w działach do których masz aktualnie dostęp.
Przełączenie stanu zamiast oddzielnie załączenie i wyłączenie jest problemem. Np. WS na pulpicie jest obsługiwany dwoma przyciskami, teraz oba będą działały tak samo więc wszystko jedno, który nacisnę to zadziała.Nie znam się na pokeys, więc nie wiem czy jest tam taka opcja, ale ja bym po prostu wykluczył taką możliwość programowo, lub fizycznie - jeden przekaźnik i już nie ma innej opcji jak wyłączanie i załączanie osobnymi guzikami. Programowo - dajmy na to, mamy zmienną X typu bool, int czy cokolwiek, przyjmuje ona dwie wartości - odpowiednio dla załączonego i wyłączonego WS. Jeżeli ma wartość oznaczającą załączenie WS, nie będzie reagować na naciskanie zielonego - prawda, komplikacja pod tytułem wybiło WS i trzeba go najpierw wyłączyć żeby załączyć, ale i to da się obejść, korzystając z danych z symka - stan lampki WS. Warunek do if podwójny i już nie ma kłopotu. Ale tak jak mówię, nie wiem jak z tym na pokesie będzie, ale na arduino bez problemu.
Co do elektroniki, mamy o ile pamiętam około 4-5cm wolnego miejsca na wysokość, na szerokość i głębokość tyle ile ma obudowa. Chyba wystarczy :) Ja chciałem zrobić to bez enkodera, (bo ich nie lubię) a wyglądałoby to tak:
Płytka PCB jak w starym mierniku uniwersalnym (z niego pomysł wzięty) czyli w kółeczko ścieżka miedziana, podzielona na X części (X = ilość pozycji z zerową licząc), każda ścieżka łączy się z innym pinem na Arduino Mega (Tasiemki ATA bardzo dobre do tego są, wymiary dziurek jak znalazł, a kosztują 5zł za metr taśmy, na której jest 6 wtyczek, czyli 3 kable po pocięciu), a po tej ścieżce przesuwa się suwaczek (jak w potencjometrze) który dowarty jest do masy układu.
const int nastawnik[44] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53};
const int kierR = A0;
const int kierD = A1;
const int boczniki[7] = {A2, A3, A4, A5, A6, A7, A8};
const int nadR = 21;
const int nadD = 20;
const int nadNumP = 19;
const int nadNumM = 18;
const int nadNumS = 17;
const int nadNumG = 16;
int a = 0;
int b = 0;
int c = 0;
int d = 0;
int e = 0;
int f = 0;
int kier = 0;
void setup() {
for (int x = 0; x < 44; x++){
pinMode(nastawnik[x], INPUT);
digitalWrite(nastawnik[x], HIGH);
}
for (int y = 0; y < 7; y++){
pinMode(boczniki[y], INPUT);
digitalWrite(boczniki[y], HIGH);
}
pinMode(kierR, INPUT);
digitalWrite(kierR, HIGH);
pinMode(kierD, INPUT);
digitalWrite(kierD, HIGH);
pinMode(nadR, OUTPUT);
pinMode(nadD, OUTPUT);
pinMode(nadNumP, OUTPUT);
pinMode(nadNumM, OUTPUT);
pinMode(nadNumS, OUTPUT);
pinMode(nadNumG, OUTPUT);
}
void loop() {
//NASTAWNIK MOCY
for (int z = 0; z < 44; z++){
int tempReadA = digitalRead(nastawnik[z]);
if (tempReadA != 1){
b = z;
}
}
if (a - b != 0){
c = a - b;
if (c < 0){
for (int q = 0; q < abs(c); q++){
digitalWrite(nadNumP, HIGH);
delay(100);
digitalWrite(nadNumP, LOW);
delay(100);
}
} else {
for (int w = 0; w < abs(c); w++){
digitalWrite(nadNumM, HIGH);
delay(100);
digitalWrite(nadNumM, LOW);
delay(100);
}
}
}
a = b;
//NASTAWNIK KIERUNKU
if (digitalRead(kierR) != 1 && kier != 1){
digitalWrite(nadR, HIGH);
delay(100);
digitalWrite(nadR, LOW);
delay(100);
kier++;
} else if (digitalRead(kierD) != 1 && kier != -1){
digitalWrite(nadD, HIGH);
delay(100);
digitalWrite(nadD, LOW);
delay(100);
kier = kier - 1;
}
//NASTAWNIK BOCZNIKOWANIA
for (int r = 0; r < 7; r++){
int tempReadB = digitalRead(boczniki[r]);
if (tempReadB != 1){
e = r;
}
}
if (d - e != 0){
f = d - e;
if (f < 0){
for (int t = 0; t < abs(f); t++){
digitalWrite(nadNumS, HIGH);
delay(100);
digitalWrite(nadNumS, LOW);
delay(100);
}
} else {
for (int u = 0; u < abs(f); u++){
digitalWrite(nadNumG, HIGH);
delay(100);
digitalWrite(nadNumG, LOW);
delay(100);
}
}
}
d = e;
}