Bylo uz jasne podle genu ze nebude IT manazer nebo securitak s nulovou odpovednosti :-) za prusvihy. Je nutne si spalit prsty a vycmoudit hromadu soucastek aby se clovek necemu naucil.
Ja bych na tabory uz koule nemel. Mne to stacilo jako uciteli.
Nutno ovsem podotknout ze decka se zajmem jsou obvykle hodna a nedelaji takovy bordel. Akorat je clovek musi zaujmout.
Radeji bych mel celou svoji byvalou tridu nez nektere kolegy.
Interně to čtení vypadá takto:
func (c ADCChannel) getOnce() uint16 {
// Make it safe to sample multiple ADC channels in separate go routines.
adcLock.Lock()
rp.ADC.CS.ReplaceBits(uint32(c)<<rp.ADC_CS_AINSEL_Pos, rp.ADC_CS_AINSEL_Msk, 0)
rp.ADC.CS.SetBits(rp.ADC_CS_START_ONCE)
waitForReady()
v := rp.ADC.RESULT.Get()
adcLock.Unlock()
// rp2040 is a 12-bit ADC, scale raw reading to 16-bits.
return uint16(v) << 4
}
A to vlastní čekání řeší právě čekání na ready bit:
func waitForReady() {
for !rp.ADC.CS.HasBits(rp.ADC_CS_READY) {
}
}
jj pro GPIO to jde zajistit přes:
// This call will replace a previously set callback on this pin. You can pass a
// nil func to unset the pin change interrupt. If you do so, the change
// parameter is ignored and can be set to any value (such as 0).
func (p Pin) SetInterrupt(change PinChange, callback func(Pin)) error {
timery atd. to mají řešené maličko jinak.