if (snelheid < -1) snelheid = -1; else snelheid = speed_byte;
(snelheid < -1 ? snelheid = -1: snelheid = speed_byte);
if (snelheid < -1) snelheid = 1; else snelheid = speed_byte;
const byte lok1 = 99;const byte lok2 = 3;const byte lok3 = 3;const byte lok4 = 25;/* Einde lokadressen invoeren */byte lok[] = {lok4, lok3, lok2, lok1};
pinMode(locAdresPinnen[0], INPUT_PULLUP); pinMode(locAdresPinnen[1], INPUT_PULLUP); byte lokIndex = digitalRead(locAdresPinnen[0]); // index wordt 0 of 1 lokIndex += 2 * digitalRead(locAdresPinnen[1]); // index krijgt er 0 of 2 bij lokAdres = lok[lokIndex];
byte locIndex = 0;for(byte i = 0; i < sizeof(locAdresPinnen); i++){ locIndex <<= 1; pinMode(locAdresPinnen[i], INPUT_PULLUP); locIndex |= !!digitalRead(locAdresPinnen[i]);}
char speed_byte, old_speed = 0, snelheid = 1;
void stel_snelheid_in(){
if(speed_byte == 0){ speed_byte = 1; //richting maakt niet uit, 0 wil je toch niet en nu heb je één extra stapje voor "0 vooruit"}
speed_byte = (analoge_waarde >> 2)-127 ;
if (speed_byte < 0) speed_byte = -speed_byte; EEPROM.write(lokIndex, speed_byte); delay(500); // wacht tot zeker is dat EEPROM beschreven werd
//Hier de locadressen invullenbyte locAdressen[] = {60, //Adres 1 45, //Adres 2 67, //Adres 3 32}; //Adres 4
E.e.a. levert wel meer tikwerk op, maar maakt het hopelijk ook veel duidelijker voor iemand, die veel minder programmeert dan wij.
Wat betreft duidelijke plekken, de extra namen zou ik nu juist als verwarrend zien. En waarom zou dat in omgekeerde volgorde moeten? Wat is er mis met iets alsCode: [Selecteer]//Hier de locadressen invullenbyte locAdressen[] = {60, //Adres 1 45, //Adres 2 67, //Adres 3 32}; //Adres 4
huidigeLok = digitalRead(lokKeuzePin1); // index wordt 0 of 1 huidigeLok = huidigeLok + 2 * digitalRead(lokKeuzePin2); // index krijgt er 0 of 2 bij lokAdres = 3 - lokAdressen[huidigeLok]; // keer de telling om
Code: [Selecteer]if (snelheid < -1) snelheid = -1; else snelheid = speed_byte;Van die regel gaan mijn rugharen een beetje overeind staan Voor de leesbaarheid, regels eindigen na de ;. Omdat het een simpel statement is zou je er wel een one line'er van kunnen maken maar dan als:Code: [Selecteer](snelheid < -1 ? snelheid = -1: snelheid = speed_byte);Maar meestal gaat mijn voorkeur toch gewoon uit naar voluit omdat het vaak duidelijker is en makkelijker uit te breiden.Overigens, wil je daar niet van richting veranderen als je op de andere richting drukt? Dus:Code: [Selecteer]if (snelheid < -1) snelheid = 1; else snelheid = speed_byte;
snelheid = (snelheid < -1) ? -1 : speed_byte;
Zou ik je toch een paar tips mogen geven? Zie het vooral dus niet als negatief iets maar puur als hulp!
//Hier de locadressen invullenbyte locAdressen[] = {60, //Adres 1 45, //Adres 2 67, //Adres 3 32}; //Adres 4const byte LokKeuzePinnen[] = {A1, A2, A3, A4};byte locIndex;void kiesLoc(){ locIndex = 0; for(byte 1 = 0; i < sizeof(LokKeuzePinnen); i++){ pinMode(LokKeuzePinnen[i], INPUT_PULLUP); //schuif eens op locIndex <<= 1; //Inverse lezen om het omdraaien van de loc adressen ongedaan te maken. locIndex |= !digitalRead(LokKeuzePinnen[i]); }}inline byte locAdres(){ //Als er een te hoge geselecteerd wordt geef gewoon de 1e. if(locIndex >= sizeof(locAdressen)){ return locAdressen[0]; } return locAdressen[locIndex];}
locIndex |= !digitalRead(LokKeuzePinnen[sizeof(LokKeuzePinnen) -1 - i]);
/* * * * * * O n d e r s t a a n d e c o d e a l l e e n * * * * * * * * * * a a n p a s s e n a l s j e v e r t r o u w d * * * * * * * * * * b e n t m e t C-p r o g r a m m e r e n e n * * * * * * * * * A R D U I N O * * * * */
- somser leiden meer wegen naar Rome, waarbij de kortste of beste niet altijd te prefereren valt.
@Cees, gek dat de RJ12 van Walter gespiegeld is, zie het nu ook ja. Nummers zouden moet blijven kloppen aangezien de connector nu op zijn kop werkt. Er is overigens geen enkele reden een boven en onder de print versie te maken. Gewoon een versie (voor boven de print). Wil je hem aan de andere kant van plaats je hem gewoon op de achterkant van de PCB en klaar.