Hej! Håller på med en automatisk toalettspolare.
Jag har en ir detektor som känner av pulser från en ir diod. Dessa ska detektera om en person sätter sig ner, och när personen reser sig upp ska ett servo trycka på spolknappen i en viss tid för sedan återgå till viloläge.
Hittils ser min kod ut såhär. Men servot vill inte som jag vill.. Så om nån har tid och lust att ta en titt så är det fritt fram =)
' {$STAMP BS2} ' Stamp directive.
' {$PBASIC 2.5} ' PBASIC directive.
' -----[ Variables ]----------------------------------------------------------
irDetectSitt VAR BIT
counter VAR WORD
' -----[ Main Routine ]-------------------------------------------------------
DO
FREQOUT 8, 1, 38500 ' Pulsa ut IR ljus från IR diod
irDetectSitt = IN9 '
IF (irDetectSitt = 0) THEN ' Någon sätter sig
GOSUB Flush_Toilet ' Gå till spolrutin
ELSE ' Ingen sitter
GOSUB Blink_Led ' Blinka led
ENDIF '
LOOP
' -----[ Subroutines ]--------------------------------------------------------
Flush_Toilet:
PAUSE 2000 ' Vänta och kolla om nån rest sig upp
IF (irDetectSitt = 1) THEN 'Någon reser sig upp
FOR counter = 1 TO 150 'Servo trycker på spolknappen
PULSOUT 4, 1000
PAUSE 20
NEXT
PAUSE 5000 'Servo ser till att tillräckligt mkt vatten spolar
FOR counter = 1 TO 150 'Servo tillbaka till viloläge
PULSOUT 4, 500
PAUSE 20
NEXT
ENDIF
RETURN 'Tillbaka till vänteläge
Blink_Led: ' Ingen sitter
HIGH 0
PAUSE 25
LOW 0
PAUSE 1500
RETURN
Hmm, är du säker på att det där är rätt värden ? om det hade varit PBP (eller PB, som ju ska vara kompatibelt till en viss gräns med BS) så hade det där varit helöt fel värden, mittenpositionen på ett servo är ju normalt 1.5ms, vilket ger 150 som du ska skicka till servot, ändlägena skiljer sej grovt mellan olika servon har jag märkt.
var skrev jag att jag vill till mittläget med servot? inte det som är problemet utan att programmet inte gör som jag vill =) servopulserna angivna i programmet är helt i sin ordning tom enligt ett kurskompendie för basic stamp där det står:
PULSOUT 14, 1000 sends a pulse to pin 14 that lasts 1000 × 2 µs. Thats 2000 µs or 2 ms.
Så det är fel nån annan stans i mitt program men kan inte komma på vart..
Som andra redan sagt så hade det varit enklare om du berättat VAD den gör eller inte gör - inte bara att det inte fungerar.
Men jag tror jag ser åtminstånde ETT problem. Du "pulsar ut ljus" med kommandot FREQOUT men när du på nästa rad kollar om detektorn "ser" ljuset så "sänder" ju inte längre dioden ut något ljus. Hade det varit en ultraljuds sändare/mottagare så kanske det hade fungerat.
Alltså, FREQOUT genererar endast den frekvens du anger under den tid du anger sedan blir det "tyst" och programmet fortsätter på "nästa rad". Programmet fortsätter heller inte INNAN den tid du anger att frekvensen skall genereras har "gått ut", dvs den kan inte BÅDE "pulsa ut ljus" och detektera SAMTIDIGT.
Fixa en oscillator med en 555 istället som du sedan kan aktivera eller stänga av med ett enkelt HIGH/LOW kommande från STAMP'en. Det borde ge dig en större chans till frramgång.