рд╕реЗрдЧрд╛ рдореЗрдЧрд╛ рдбреНрд░рд╛рдЗрд╡ рдФрд░ рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдкрд╛рд░реНрдЯ 2 рд╕реЗ рдЧреЗрдордкреИрдб (рдЕрдВрддрд┐рдо рдЫрд╣ рдмрдЯрди)



рдЬрд╛рд░реА рд░рдЦреЗрдВ, рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рдЦрддреНрдо рд╣реЛ рдЧрдпрд╛ рд╣реИ! рдФрд░ рдЕрдм рд╕рдмрд╕реЗ рдХрдард┐рди рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред рдпрджрд┐ рдЖрдк рдкрдврд╝рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдЖрд▓рд╕реА рд╣реИрдВ, рддреЛ рдиреАрдЪреЗ (рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдХреЗ рдХрд░реАрдм) рд╡реАрдбрд┐рдпреЛ рдХрд╛ рдПрдХ рд▓рд┐рдВрдХ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╕рднреА рдЪреАрдЬреЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдФрд░ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдпрджрд┐ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдЕрдЧрд▓рд╛ рдЕрдиреБрд╕рд░рдг рдХрд░реЗрдВред

6-рдмрдЯрди рдореЛрдб рдореЗрдВ, рд░реАрдбрд┐рдВрдЧ 4 рдЪрдХреНрд░реЛрдВ рдпрд╛ рдЪрд░рдгреЛрдВ рдореЗрдВ рд╣реЛрддреА рд╣реИ (рдпрджрд┐ рдПрдореБрд▓реЗрдЯрд░ рдХреА рднрд╛рд╖рд╛ рдореЗрдВ рд╡реНрдпрдХреНрдд рдХреА рдЧрдИ рд╣реИ)ред рдпрд╣реА рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ 16 рдПрдордПрд╕ рдореЗрдВ рдЪрдпрди рдЖрдЙрдЯрдкреБрдЯ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЪрдХреНрд░реАрдп (4 рдЪрдХреНрд░) рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рд╣рд░ рдЪреМрдереЗ рдЪрдХреНрд░ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдмрдЯрди рдХреА рд╕реНрдерд┐рддрд┐ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИред рдиреАрдЪреЗ рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд░реАрдбрд┐рдВрдЧ рдЪрд╛рд░реНрдЯ рд╣реИ, рдЬрд┐рд╕реЗ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:



рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рддрд░реНрдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╣реИ, рдЬрд┐рд╕рдХреА рдорджрдж рд╕реЗ рдореИрдВрдиреЗ рдПрдХ рдмрдЧ рдкрдХрдбрд╝рд╛, рдЬреЛ рдЗрд╕ рддрдереНрдп рдореЗрдВ рд╕реНрд╡рдпрдВ рдкреНрд░рдХрдЯ рд╣реБрдЖ рдХрд┐ рдЪрдХреНрд░ рдЪреМрдереЗ рдЪрд░рдг рд╕реЗ рдмрд╛рд╣рд░ рдирд╣реАрдВ рдЧрдпрд╛ рдерд╛ред

рдореИрдВ рдЭрд╛рдбрд╝реА рдХреЗ рдЖрд╕рдкрд╛рд╕ рдирд╣реАрдВ рдлрдЯрдХреВрдВрдЧрд╛, рдореИрдВ рддреБрд░рдВрдд рдЗрд╕ рд╕рдорд╛рд░реЛрд╣ рдХреА рдПрдХ рд╕реВрдЪреА рджреВрдВрдЧрд╛:

static u32 read_pad_6btn(int i, u32 out_bits) { u32 pad = ~PicoIn.padInt[i]; // Get inverse of pad MXYZ SACB RLDU int phase = Pico.m.padTHPhase[i]; u32 value = 0; if (i == 0 && phase == 0 && (out_bits & 0x40)) // TH { digitalWrite (Select, HIGH); delayMicroseconds (30); value ^= digitalRead(Data0) << 0; //read UP button value ^= digitalRead(Data1) << 1; //read DOWN button value ^= digitalRead(Data2) << 2; //read LEFT button value ^= digitalRead(Data3) << 3; //read RIGHT button value ^= digitalRead(Data4) << 4; //read B button value ^= digitalRead(Data5) << 5; //read C button } if (i == 0 && phase == 0 && !(out_bits & 0x40)) // TH { digitalWrite (Select, LOW); delayMicroseconds (30); value ^= digitalRead(Data0) << 0; //read UP button value ^= digitalRead(Data1) << 1; //read DOWN button value ^= digitalRead(Data4) << 4; //read A button value ^= digitalRead(Data5) << 5; //read Start button digitalWrite (Select, HIGH); delayMicroseconds (10); } if (i == 0 && phase == 1 && (out_bits & 0x40)) // TH { digitalWrite (Select, HIGH); delayMicroseconds (20); value ^= digitalRead(Data0) << 0; //read UP button value ^= digitalRead(Data1) << 1; //read DOWN button value ^= digitalRead(Data2) << 2; //read LEFT button value ^= digitalRead(Data3) << 3; //read RIGHT button value ^= digitalRead(Data4) << 4; //read B button value ^= digitalRead(Data5) << 5; //read C button } if (i == 0 && phase == 1 && !(out_bits & 0x40)) // TH { digitalWrite (Select, LOW); delayMicroseconds (30); value ^= digitalRead(Data0) << 0; //read UP button value ^= digitalRead(Data1) << 1; //read DOWN button value ^= digitalRead(Data4) << 4; //read A button value ^= digitalRead(Data5) << 5; //read Start button digitalWrite (Select, HIGH); delayMicroseconds (10); } if (i == 0 && phase == 2 && (out_bits & 0x40)) // TH { digitalWrite (Select, HIGH); delayMicroseconds (20); value ^= digitalRead(Data0) << 0; //read UP button value ^= digitalRead(Data1) << 1; //read DOWN button value ^= digitalRead(Data2) << 2; //read LEFT button value ^= digitalRead(Data3) << 3; //read RIGHT button value ^= digitalRead(Data4) << 4; //read B button value ^= digitalRead(Data5) << 5; //read C button } if (i == 0 && phase == 2 && !(out_bits & 0x40)) { digitalWrite (Select, LOW); delayMicroseconds (30); value ^= digitalRead(Data4) << 4; //read A button value ^= digitalRead(Data5) << 5; //read Start button digitalWrite (Select, HIGH); delayMicroseconds (10); } if (i == 0 && phase == 3 && (out_bits & 0x40)) { digitalWrite (Select, HIGH); delayMicroseconds (20); value ^= digitalRead(Data0) << 0; //read Z button value ^= digitalRead(Data1) << 1; //read Y button value ^= digitalRead(Data2) << 2; //read X button value ^= digitalRead(Data3) << 3; //read MODE button value ^= digitalRead(Data4) << 4; //read B button value ^= digitalRead(Data5) << 5; //read C button } if (i == 0 && phase == 3 && !(out_bits & 0x40)) { digitalWrite (Select, LOW); delayMicroseconds (30); value ^= digitalRead(Data4) << 4; //read A button value ^= digitalRead(Data5) << 5; //read Start button digitalWrite (Select, HIGH); delayMicroseconds (10); value |= 0x0f; } if (i == 1 && phase == 0 && (out_bits & 0x40)) // TH { value = pad & 0x3f; // ?1CB RLDU } if (i == 1 && phase == 0 && !(out_bits & 0x40)) // TH { value = ((pad & 0xc0) >> 2) | (pad & 3); // ?0SA 00DU } if (i == 1 && phase == 1 && (out_bits & 0x40)) // TH { value = pad & 0x3f; // ?1CB RLDU } if (i == 1 && phase == 1 && !(out_bits & 0x40)) // TH { value = ((pad & 0xc0) >> 2) | (pad & 3); // ?0SA 00DU } if (i == 1 && phase == 2 && (out_bits & 0x40)) // TH { value = pad & 0x3f; // ?1CB RLDU } if (i == 1 && phase == 2 && !(out_bits & 0x40)) { value = (pad & 0xc0) >> 2; // ?0SA 0000 } if(i == 1 && phase == 3 && (out_bits & 0x40)) { return (pad & 0x30) | ((pad >> 8) & 0xf); // ?1CB MXYZ } if(i == 1 && phase == 3 && !(out_bits & 0x40)) { return ((pad & 0xc0) >> 2) | 0x0f; // ?0SA 1111 } return value; } 

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╣реИрдВ:

 if (i == 0 && phase == 1 && !(out_bits & 0x40)) // TH 

рдпрд╣рд╛рдБ рдпрд╣ рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рд╣рдо рдкрд╣рд▓реЗ рдЧреЗрдордкреИрдб (i == 0) рд╕реЗ рдкрдврд╝ рд░рд╣реЗ рд╣реИрдВ, рджреВрд╕рд░рд╛ рд░реАрдбрд┐рдВрдЧ рдЪрд░рдг (рдЪрд░рдг == 1) , рдФрд░ рд╕реЗрд▓реЗрдХреНрдЯ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ 0 рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП ! (Out_bits & 0x40) ред рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдПрдореБрд▓реЗрдЯрд░ рдореЗрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдореИрдВрдиреЗ Xubuntu рдкрд░ рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛, рдФрд░ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЛрдб, рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯреНрд╕ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рд╕реЗрдЯ рдХрд░рдХреЗ, рдХреЛрдб рдХреЛ рдбрд┐рдмрдЧ рдореЛрдб рдореЗрдВ рдЪрд▓рд╛рдпрд╛ред рдкрд░рд┐рдгрд╛рдо рдПрдХ рдРрд╕реА рд╕реБрдВрджрд░ рддрд╕реНрд╡реАрд░ рд╣реИ:



рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХрд╛рд░реНрдп рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ:


рдпрд╣рд╛рдБ рдореБрдЭреЗ рдПрдореБрд▓реЗрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрдж рд╣реА рдХрд╣рдиреЗ рдЪрд╛рд╣рд┐рдПред рдпрд╛ рддреЛ рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрд╛рдпрд╛, рдпрд╛ рдпрд╣ рдПрдХ рдмрдЧ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдореБрд▓реЗрдЯрд░ рд╢реБрд░реВ рдореЗрдВ 3-рдмрдЯрди рдореЛрдб рдореЗрдВ рд▓реЛрдб рд╣реЛрддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рд╡реИрд╢реНрд╡рд┐рдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛред 99% рдЦреЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред 6-рдмрдЯрди рдЧреЗрдордкреИрдб рдХреЗ рд╕рд╛рде рдСрдкрд░реЗрд╢рди рдХреЗ рдореЛрдб рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдЬрд╛рдиреЗ рдФрд░ рдХреБрдЫ рднреА рдмрджрд▓реЗ рдмрд┐рдирд╛ рдЧреЗрдо рдореЗрдВ рд╡рд╛рдкрд╕ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдПрдХ рдЦреЗрд▓ рд╣реИ рдЬреЛ рдЗрд╕ рд╕рдВрджрд░реНрдн рдХреЗ рдмрд╛рд╣рд░ рд╣реИ, рдпрд╣ рд▓реЙрд╕реНрдЯ рд╡рд╛рдЗрдХрд┐рдВрдЧреНрд╕ рд╣реИ, рдПрдХреНрд╕, рдЬреЗрдб, MODE рдмрдЯрди рдЗрд╕рдореЗрдВ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдирд╛рдЪ рдХреЗ рдареАрдХ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред

рдкреБрдирд╢реНрдЪ

рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕реЗ рдФрд░ рднреА рдЖрд╕рд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡реНрдпрдХреНрддрд┐ рдкрд╣рд▓реЗ рд╣реА рдЧреЗрдордкреИрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдбреНрд░рд╛рдЗрд╡рд░ рд▓рд┐рдЦ рдЪреБрдХрд╛ рд╣реИ, рдФрд░ рдмрд╣реБрдд рдХрдо рд╕реНрддрд░ рдкрд░ред рдореИрдВ рдЕрдм рднреА рдЗрд╕рд╕реЗ рджреВрд░ рд╣реВрдВред

рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

Source: https://habr.com/ru/post/hi435094/


All Articles